diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..3b669254e7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,222 @@ +# Repo-specific DockerIgnore ------------------------------------------------------------------------------------------- +.git +.cache +.idea +runs +output +coco +storage.googleapis.com + +data/samples/* +**/results*.csv +*.jpg + +# Neural Network weights ----------------------------------------------------------------------------------------------- +**/*.pt +**/*.pth +**/*.onnx +**/*.engine +**/*.mlmodel +**/*.torchscript +**/*.torchscript.pt +**/*.tflite +**/*.h5 +**/*.pb +*_saved_model/ +*_web_model/ +*_openvino_model/ + +# Below Copied From .gitignore ----------------------------------------------------------------------------------------- +# Below Copied From .gitignore ----------------------------------------------------------------------------------------- + + +# GitHub Python GitIgnore ---------------------------------------------------------------------------------------------- +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +wandb/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv* +venv*/ +ENV*/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + + +# https://github.com/github/gitignore/blob/master/Global/macOS.gitignore ----------------------------------------------- + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +Icon? + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +# https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/* +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/dictionaries +.html # Bokeh Plots +.pg # TensorFlow Frozen Graphs +.avi # videos + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ +cmake-build-release/ + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 0000000000..34d2683ac6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,85 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +name: 🐛 Bug Report +description: "Problems with Ultralytics YOLOv3" +labels: [bug, triage] +type: "bug" +body: + - type: markdown + attributes: + value: | + Thank you for submitting an Ultralytics YOLOv3 🐛 Bug Report! + + - type: checkboxes + attributes: + label: Search before asking + description: > + Please search the Ultralytics YOLOv3 [README](https://github.com/ultralytics/yolov3#readme) and [issues](https://github.com/ultralytics/yolov3/issues) to see if a similar bug report already exists. + options: + - label: > + I have searched the [issues](https://github.com/ultralytics/yolov3/issues) and did not find a similar report. + required: true + + - type: dropdown + attributes: + label: Project area + description: | + Help us route the report to the right maintainers. + multiple: true + options: + - "Training" + - "Inference" + - "Export/deployment" + - "Documentation" + - "Other" + validations: + required: false + + - type: textarea + attributes: + label: Bug + description: Please describe the issue in detail so we can reproduce it in Ultralytics YOLOv3. Include logs, screenshots, console output, and any context that helps explain the problem. + placeholder: | + 💡 ProTip! Include as much information as possible (logs, tracebacks, screenshots, etc.) to receive the most helpful response. + validations: + required: true + + - type: textarea + attributes: + label: Environment + description: Share the platform and version information relevant to your report. + placeholder: | + Please include: + - OS (e.g., Ubuntu 20.04, macOS 13.5, Windows 11) + - Language or framework version (Python, Swift, Flutter, etc.) + - Package or app version + - Hardware (e.g., CPU, GPU model, device model) + - Any other environment details + validations: + required: true + + - type: textarea + attributes: + label: Minimal Reproducible Example + description: > + Provide the smallest possible snippet, command, or steps required to reproduce the issue. This helps us pinpoint problems faster. + placeholder: | + ```python + # Code or commands to reproduce your issue here + ``` + validations: + required: true + + - type: textarea + attributes: + label: Additional + description: Anything else you would like to share? + + - type: checkboxes + attributes: + label: Are you willing to submit a PR? + description: > + (Optional) We encourage you to submit a [Pull Request](https://github.com/ultralytics/yolov3/pulls) to help improve Ultralytics YOLOv3, especially if you know how to fix the issue. + See the Ultralytics [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started. + options: + - label: Yes I'd like to help by submitting a PR! diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 7b4d9efdc6..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhoneXS] - - OS: [e.g. iOS8.1] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..6abf9d02a6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,16 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +blank_issues_enabled: true +contact_links: + - name: 📘 YOLOv3 README + url: https://github.com/ultralytics/yolov3#readme + about: Usage guide and background for YOLOv3 + - name: 💬 Forum + url: https://community.ultralytics.com/ + about: Ask the Ultralytics community for workflow help + - name: 🎧 Discord + url: https://ultralytics.com/discord + about: Chat with the Ultralytics team and other builders + - name: ⌨️ Reddit + url: https://reddit.com/r/ultralytics + about: Discuss Ultralytics projects on Reddit diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml new file mode 100644 index 0000000000..1cd29f6a96 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -0,0 +1,51 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +name: 🚀 Feature Request +description: "Suggest an Ultralytics YOLOv3 improvement" +labels: [enhancement] +type: "feature" +body: + - type: markdown + attributes: + value: | + Thank you for submitting an Ultralytics YOLOv3 🚀 Feature Request! + + - type: checkboxes + attributes: + label: Search before asking + description: > + Please search the Ultralytics YOLOv3 [README](https://github.com/ultralytics/yolov3#readme) and [issues](https://github.com/ultralytics/yolov3/issues) to see if a similar feature request already exists. + options: + - label: > + I have searched https://github.com/ultralytics/yolov3/issues and did not find a similar request. + required: true + + - type: textarea + attributes: + label: Description + description: Briefly describe the feature you would like to see added to Ultralytics YOLOv3. + placeholder: | + What new capability or improvement are you proposing? + validations: + required: true + + - type: textarea + attributes: + label: Use case + description: Explain how this feature would be used and who benefits from it. Screenshots or mockups are welcome. + placeholder: | + How would this feature improve your workflow? + + - type: textarea + attributes: + label: Additional + description: Anything else you would like to share? + + - type: checkboxes + attributes: + label: Are you willing to submit a PR? + description: > + (Optional) We encourage you to submit a [Pull Request](https://github.com/ultralytics/yolov3/pulls) to help improve Ultralytics YOLOv3. + See the Ultralytics [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started. + options: + - label: Yes I'd like to help by submitting a PR! diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 11fc491ef1..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000000..dd4dfff6bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,34 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +name: ❓ Question +description: "Ask an Ultralytics YOLOv3 question" +labels: [question] +body: + - type: markdown + attributes: + value: | + Thank you for asking an Ultralytics YOLOv3 ❓ Question! + + - type: checkboxes + attributes: + label: Search before asking + description: > + Please search the Ultralytics YOLOv3 [README](https://github.com/ultralytics/yolov3#readme), [issues](https://github.com/ultralytics/yolov3/issues), and [Ultralytics discussions](https://github.com/orgs/ultralytics/discussions) to see if a similar question already exists. + options: + - label: > + I checked the docs, issues, and discussions and could not find an answer. + required: true + + - type: textarea + attributes: + label: Question + description: What is your question? Provide as much detail as possible so we can assist with Ultralytics YOLOv3. Include code snippets, screenshots, logs, or links to notebooks/demos. + placeholder: | + 💡 ProTip! Include as much information as possible (logs, tracebacks, screenshots, etc.) to receive the most helpful response. + validations: + required: true + + - type: textarea + attributes: + label: Additional + description: Anything else you would like to share? diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..56c78219fe --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,24 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Dependabot for package version updates +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: pip + directory: "/" + schedule: + interval: weekly + time: "04:00" + open-pull-requests-limit: 10 + labels: + - dependencies + + - package-ecosystem: github-actions + directory: "/.github/workflows" + schedule: + interval: weekly + time: "04:00" + open-pull-requests-limit: 5 + labels: + - dependencies diff --git a/.github/workflows/ci-testing.yml b/.github/workflows/ci-testing.yml new file mode 100644 index 0000000000..1066941a88 --- /dev/null +++ b/.github/workflows/ci-testing.yml @@ -0,0 +1,127 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# YOLOv3 Continuous Integration (CI) GitHub Actions tests + +name: YOLOv3 CI + +permissions: + contents: read + +on: + push: + branches: [master] + pull_request: + branches: [master] + schedule: + - cron: "0 0 * * *" # runs at 00:00 UTC every day + workflow_dispatch: + +jobs: + Tests: + timeout-minutes: 60 + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] # macos-latest bug https://github.com/ultralytics/yolov5/pull/9049 + python-version: ["3.11"] + model: [yolov5n] + include: + # - os: ubuntu-latest + # python-version: "3.8" # '3.6.8' min (warning, this test is failing) + # model: yolov5n + - os: ubuntu-latest + python-version: "3.9" + model: yolov5n + - os: ubuntu-latest + python-version: "3.8" # torch 1.8.0 requires python >=3.6, <=3.8 + model: yolov5n + torch: "1.8.0" # min torch version CI https://pypi.org/project/torchvision/ + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + cache: "pip" # caching pip dependencies + - name: Install requirements + run: | + python -m pip install --upgrade pip wheel + torch="" + if [ "${{ matrix.torch }}" == "1.8.0" ]; then + torch="torch==1.8.0 torchvision==0.9.0" + fi + pip install -r requirements.txt $torch --extra-index-url https://download.pytorch.org/whl/cpu + shell: bash # for Windows compatibility + - name: Check environment + run: | + yolo checks + pip list + - name: Test detection + shell: bash # for Windows compatibility + run: | + # export PYTHONPATH="$PWD" # to run '$ python *.py' files in subdirectories + m=${{ matrix.model }} # official weights + b=runs/train/exp/weights/best # best.pt checkpoint + python train.py --imgsz 64 --batch 32 --weights $m.pt --cfg $m.yaml --epochs 1 --device cpu # train + for d in cpu; do # devices + for w in $m $b; do # weights + python val.py --imgsz 64 --batch 32 --weights $w.pt --device $d # val + python detect.py --imgsz 64 --weights $w.pt --device $d # detect + done + done + python hubconf.py --model $m # hub + # python models/tf.py --weights $m.pt # build TF model + python models/yolo.py --cfg $m.yaml # build PyTorch model + python export.py --weights $m.pt --img 64 --include torchscript # export + python - < GitHub Actions error for ${{ github.workflow }} ❌\n\n\n*Repository:* https://github.com/${{ github.repository }}\n*Action:* https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\n*Author:* ${{ github.actor }}\n*Event:* ${{ github.event_name }}\n" diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 0000000000..3721c14a6d --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,45 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Ultralytics Contributor License Agreement (CLA) action https://docs.ultralytics.com/help/CLA +# This workflow automatically requests Pull Requests (PR) authors to sign the Ultralytics CLA before PRs can be merged + +name: CLA Assistant +on: + issue_comment: + types: + - created + pull_request_target: + types: + - reopened + - opened + - synchronize + +permissions: + actions: write + contents: write + pull-requests: write + statuses: write + +jobs: + CLA: + if: github.repository == 'ultralytics/yolov3' + runs-on: ubuntu-latest + steps: + - name: CLA Assistant + if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I sign the CLA') || github.event_name == 'pull_request_target' + uses: contributor-assistant/github-action@v2.6.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Must be repository secret PAT + PERSONAL_ACCESS_TOKEN: ${{ secrets._GITHUB_TOKEN }} + with: + path-to-signatures: "signatures/version1/cla.json" + path-to-document: "https://docs.ultralytics.com/help/CLA" # CLA document + # Branch must not be protected + branch: cla-signatures + allowlist: dependabot[bot],github-actions,[pre-commit*,pre-commit*,bot* + + remote-organization-name: ultralytics + remote-repository-name: cla + custom-pr-sign-comment: "I have read the CLA Document and I sign the CLA" + custom-allsigned-prcomment: All Contributors have signed the CLA. ✅ diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000000..29959c0887 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,62 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Builds ultralytics/yolov3:latest images on DockerHub https://hub.docker.com/r/ultralytics/yolov3 + +name: Publish Docker Images + +permissions: + contents: read + +on: + push: + branches: [master] + workflow_dispatch: + +jobs: + docker: + if: github.repository == 'ultralytics/yolov3' + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v6 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push arm64 image + uses: docker/build-push-action@v6 + continue-on-error: true + with: + context: . + platforms: linux/arm64 + file: utils/docker/Dockerfile-arm64 + push: true + tags: ultralytics/yolov3:latest-arm64 + + - name: Build and push CPU image + uses: docker/build-push-action@v6 + continue-on-error: true + with: + context: . + file: utils/docker/Dockerfile-cpu + push: true + tags: ultralytics/yolov3:latest-cpu + + - name: Build and push GPU image + uses: docker/build-push-action@v6 + continue-on-error: true + with: + context: . + file: utils/docker/Dockerfile + push: true + tags: ultralytics/yolov3:latest diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000000..ba89d938cb --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,35 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Ultralytics Actions https://github.com/ultralytics/actions +# This workflow formats code and documentation in PRs to Ultralytics standards + +name: Ultralytics Actions + +on: + issues: + types: [opened] + pull_request: + branches: [main, master] + types: [opened, closed, synchronize, review_requested] + +permissions: + contents: write # Modify code in PRs + pull-requests: write # Add comments and labels to PRs + issues: write # Add comments and labels to issues + +jobs: + actions: + runs-on: ubuntu-latest + steps: + - name: Run Ultralytics Actions + uses: ultralytics/actions@main + with: + token: ${{ secrets._GITHUB_TOKEN || secrets.GITHUB_TOKEN }} # Auto-generated token + labels: true # Auto-label issues/PRs using AI + python: true # Format Python with Ruff and docformatter + prettier: true # Format YAML, JSON, Markdown, CSS + spelling: true # Check spelling with codespell + links: false # Check broken links with Lychee + summary: true # Generate AI-powered PR summaries + openai_api_key: ${{ secrets.OPENAI_API_KEY }} # Powers PR summaries, labels and comments + brave_api_key: ${{ secrets.BRAVE_API_KEY }} # Used for broken link resolution diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml new file mode 100644 index 0000000000..3946f6b608 --- /dev/null +++ b/.github/workflows/links.yml @@ -0,0 +1,83 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Continuous Integration (CI) GitHub Actions tests broken link checker using https://github.com/lycheeverse/lychee +# Ignores the following status codes to reduce false positives: +# - 403(OpenVINO, 'forbidden') +# - 429(Instagram, 'too many requests') +# - 500(Zenodo, 'cached') +# - 502(Zenodo, 'bad gateway') +# - 999(LinkedIn, 'unknown status code') + +name: Check Broken links + +permissions: + contents: read + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # runs at 00:00 UTC every day + +jobs: + Links: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Install lychee + run: curl -sSfL "https://github.com/lycheeverse/lychee/releases/latest/download/lychee-x86_64-unknown-linux-gnu.tar.gz" | sudo tar xz -C /usr/local/bin + + - name: Test Markdown and HTML links with retry + uses: ultralytics/actions/retry@main + with: + timeout_minutes: 5 + retry_delay_seconds: 60 + retries: 2 + run: | + lychee \ + --scheme 'https' \ + --timeout 60 \ + --insecure \ + --accept 100..=103,200..=299,401,403,429,500,502,999 \ + --exclude-all-private \ + --exclude 'https?://(www\.)?(linkedin\.com|twitter\.com|x\.com|instagram\.com|kaggle\.com|fonts\.gstatic\.com|url\.com)' \ + --exclude-path './**/ci.yml' \ + --github-token ${{ secrets.GITHUB_TOKEN }} \ + --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.183 Safari/537.36" \ + './**/*.md' \ + './**/*.html' | tee -a $GITHUB_STEP_SUMMARY + + # Raise error if broken links found + if ! grep -q "0 Errors" $GITHUB_STEP_SUMMARY; then + exit 1 + fi + + - name: Test Markdown, HTML, YAML, Python and Notebook links with retry + if: github.event_name == 'workflow_dispatch' + uses: ultralytics/actions/retry@main + with: + timeout_minutes: 5 + retry_delay_seconds: 60 + retries: 2 + run: | + lychee \ + --scheme 'https' \ + --timeout 60 \ + --insecure \ + --accept 100..=103,200..=299,429,999 \ + --exclude-all-private \ + --exclude 'https?://(www\.)?(linkedin\.com|twitter\.com|x\.com|instagram\.com|kaggle\.com|fonts\.gstatic\.com|url\.com)' \ + --exclude-path './**/ci.yml' \ + --github-token ${{ secrets.GITHUB_TOKEN }} \ + --header "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.183 Safari/537.36" \ + './**/*.md' \ + './**/*.html' \ + './**/*.yml' \ + './**/*.yaml' \ + './**/*.py' \ + './**/*.ipynb' | tee -a $GITHUB_STEP_SUMMARY + + # Raise error if broken links found + if ! grep -q "0 Errors" $GITHUB_STEP_SUMMARY; then + exit 1 + fi diff --git a/.github/workflows/merge-main-into-prs.yml b/.github/workflows/merge-main-into-prs.yml new file mode 100644 index 0000000000..095144be3f --- /dev/null +++ b/.github/workflows/merge-main-into-prs.yml @@ -0,0 +1,75 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Automatically merges repository 'main' branch into all open PRs to keep them up-to-date +# Action runs on updates to main branch so when one PR merges to main all others update + +name: Merge main into PRs + +on: + workflow_dispatch: + # push: + # branches: + # - ${{ github.event.repository.default_branch }} + +jobs: + Merge: + if: github.repository == 'ultralytics/yolov3' + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + fetch-depth: 0 + - uses: actions/setup-python@v6 + with: + python-version: "3.x" + cache: "pip" + - name: Install requirements + run: | + pip install pygithub + - name: Merge default branch into PRs + shell: python + run: | + from github import Github + import os + + g = Github(os.getenv('GITHUB_TOKEN')) + repo = g.get_repo(os.getenv('GITHUB_REPOSITORY')) + + # Fetch the default branch name + default_branch_name = repo.default_branch + default_branch = repo.get_branch(default_branch_name) + + for pr in repo.get_pulls(state='open', sort='created'): + try: + # Get full names for repositories and branches + base_repo_name = repo.full_name + head_repo_name = pr.head.repo.full_name + base_branch_name = pr.base.ref + head_branch_name = pr.head.ref + + # Check if PR is behind the default branch + comparison = repo.compare(default_branch.commit.sha, pr.head.sha) + + if comparison.behind_by > 0: + print(f"⚠️ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is behind {default_branch_name} by {comparison.behind_by} commit(s).") + + # Attempt to update the branch + try: + success = pr.update_branch() + assert success, "Branch update failed" + print(f"✅ Successfully merged '{default_branch_name}' into PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}).") + except Exception as update_error: + print(f"❌ Could not update PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}): {update_error}") + print(" This might be due to branch protection rules or insufficient permissions.") + else: + print(f"✅ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is up to date with {default_branch_name}.") + except Exception as e: + print(f"❌ Could not process PR #{pr.number}: {e}") + + env: + GITHUB_TOKEN: ${{ secrets._GITHUB_TOKEN }} + GITHUB_REPOSITORY: ${{ github.repository }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml new file mode 100644 index 0000000000..81e345de61 --- /dev/null +++ b/.github/workflows/stale.yml @@ -0,0 +1,53 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +name: Close stale issues + +permissions: + contents: read + issues: write + pull-requests: write + +on: + schedule: + - cron: "0 0 * * *" # Runs at 00:00 UTC every day + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v10 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + stale-issue-message: | + 👋 Hello there! We wanted to give you a friendly reminder that this issue has not had any recent activity and may be closed soon, but don't worry - you can always reopen it if needed. If you still have any questions or concerns, please feel free to let us know how we can help. + + For additional resources and information, please see the links below: + + - **Docs**: https://docs.ultralytics.com + - **HUB**: https://hub.ultralytics.com + - **Community**: https://community.ultralytics.com + + Feel free to inform us of any other **issues** you discover or **feature requests** that come to mind in the future. Pull Requests (PRs) are also always welcomed! + + Thank you for your contributions to YOLO 🚀 and Vision AI ⭐ + + stale-pr-message: | + 👋 Hello there! We wanted to let you know that we've decided to close this pull request due to inactivity. We appreciate the effort you put into contributing to our project, but unfortunately, not all contributions are suitable or aligned with our product roadmap. + + We hope you understand our decision, and please don't let it discourage you from contributing to open source projects in the future. We value all of our community members and their contributions, and we encourage you to keep exploring new projects and ways to get involved. + + For additional resources and information, please see the links below: + + - **Docs**: https://docs.ultralytics.com + - **HUB**: https://hub.ultralytics.com + - **Community**: https://community.ultralytics.com + + Thank you for your contributions to YOLO 🚀 and Vision AI ⭐ + + days-before-issue-stale: 30 + days-before-issue-close: 10 + days-before-pr-stale: 90 + days-before-pr-close: 30 + exempt-issue-labels: "documentation,tutorial,TODO" + operations-per-run: 300 # The maximum number of operations per run, used to control rate limiting. diff --git a/.gitignore b/.gitignore index 9ff1a3756e..6bcedfac61 100755 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,17 @@ # Repo-specific GitIgnore ---------------------------------------------------------------------------------------------- *.jpg +*.jpeg *.png *.bmp *.tif +*.tiff *.heic *.JPG +*.JPEG *.PNG +*.BMP *.TIF +*.TIFF *.HEIC *.mp4 *.mov @@ -14,28 +19,28 @@ *.avi *.data *.json - *.cfg +!setup.cfg !cfg/yolov3*.cfg +storage.googleapis.com runs/* data/* -!data/samples/zidane.jpg -!data/samples/bus.jpg -!data/coco.names -!data/coco_paper.names -!data/coco.data -!data/coco_*.data -!data/coco_*.txt -!data/coco_*.txt -!data/trainvalno5k.shapes -!data/5k.shapes -!data/5k.txt +data/images/* +!data/*.yaml +!data/hyps +!data/scripts +!data/images +!data/images/zidane.jpg +!data/images/bus.jpg !data/*.sh -pycocotools/* -results*.txt -gcp_test*.sh +results*.csv + +# Datasets ------------------------------------------------------------------------------------------------------------- +coco/ +coco128/ +VOC/ # MATLAB GitIgnore ----------------------------------------------------------------------------------------------------- *.m~ @@ -45,8 +50,17 @@ gcp_test*.sh # Neural Network weights ----------------------------------------------------------------------------------------------- *.weights *.pt +*.pb *.onnx +*.engine *.mlmodel +*.torchscript +*.tflite +*.h5 +*_saved_model/ +*_web_model/ +*_openvino_model/ +*_paddle_model/ darknet53.conv.74 yolov3-tiny.conv.15 @@ -75,9 +89,11 @@ sdist/ var/ wheels/ *.egg-info/ +/wandb/ .installed.cfg *.egg + # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. @@ -136,9 +152,9 @@ celerybeat-schedule .env # virtualenv -.venv -venv/ -ENV/ +.venv* +venv*/ +ENV*/ # Spyder project settings .spyderproject diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..117c3a552b --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,14 @@ +cff-version: 1.2.0 +preferred-citation: + type: software + message: If you use YOLOv5, please cite it as below. + authors: + - family-names: Jocher + given-names: Glenn + orcid: "https://orcid.org/0000-0001-5950-6979" + title: "YOLOv5 by Ultralytics" + version: 7.0 + doi: 10.5281/zenodo.3908559 + date-released: 2020-5-29 + license: AGPL-3.0 + url: "https://github.com/ultralytics/yolov5" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..b324957cf6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,79 @@ +# Contributing To YOLOv3 🚀 + +We value your input and welcome your contributions to Ultralytics YOLOv3! Whether you're interested in: + +- Reporting a bug +- Discussing the current state of the codebase +- Submitting a fix +- Proposing a new feature +- Becoming a maintainer + +Ultralytics YOLO models are successful thanks to the collective efforts of our community. Every improvement you contribute helps advance the possibilities of AI and computer vision! 😃 + +## Submitting A Pull Request (PR) 🛠️ + +Contributing a PR is straightforward! Here’s a step-by-step example for updating `requirements.txt`: + +### 1. Select The File To Update + +Click on `requirements.txt` in the GitHub repository to open it. + +

PR_step1

+ +### 2. Click 'Edit This File' + +Use the pencil icon in the top-right corner to begin editing. + +

PR_step2

+ +### 3. Make Your Changes + +For example, update the `matplotlib` version from `3.2.2` to `3.3`. + +

PR_step3

+ +### 4. Preview And Submit Your PR + +Switch to the **Preview changes** tab to review your edits. At the bottom, select 'Create a new branch for this commit', give your branch a descriptive name like `fix/matplotlib_version`, and click the green **Propose changes** button. Your PR is now submitted for review! 😃 + +

PR_step4

+ +### PR Best Practices + +To ensure your contribution is integrated smoothly, please: + +- ✅ Ensure your PR is **up-to-date** with the `ultralytics/yolov3` `master` branch. If your PR is behind, update your code by clicking the 'Update branch' button or by running `git pull` and `git merge master` locally. + +

Screenshot 2022-08-29 at 22 47 15

+ +- ✅ Confirm that all Continuous Integration (CI) **checks are passing**. + +

Screenshot 2022-08-29 at 22 47 03

+ +- ✅ Limit your changes to the **minimum required** for your bug fix or feature. + _"It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is."_ — Bruce Lee + +## Submitting A Bug Report 🐛 + +If you encounter an issue with Ultralytics YOLOv3, please submit a bug report! + +To help us investigate, please provide a [minimum reproducible example](https://docs.ultralytics.com/help/minimum-reproducible-example/). Your code should be: + +- ✅ **Minimal** – Use as little code as possible that still produces the issue. +- ✅ **Complete** – Include all parts needed for someone else to reproduce the problem. +- ✅ **Reproducible** – Test your code to ensure it reliably triggers the issue. + +Additionally, for [Ultralytics](https://www.ultralytics.com/) to assist, your code should be: + +- ✅ **Current** – Ensure your code is up-to-date with the latest [master branch](https://github.com/ultralytics/yolov3/tree/master). Use `git pull` or `git clone` to get the latest version. +- ✅ **Unmodified** – The problem must be reproducible without custom modifications to the repository. [Ultralytics](https://www.ultralytics.com/) does not provide support for custom code. + +If your issue meets these criteria, please close your current issue and open a new one using the 🐛 **Bug Report** [template](https://github.com/ultralytics/yolov3/issues/new/choose), including your [minimum reproducible example](https://docs.ultralytics.com/help/minimum-reproducible-example/) to help us diagnose and resolve your problem. + +## License + +By contributing, you agree that your submissions will be licensed under the [AGPL-3.0 license](https://choosealicense.com/licenses/agpl-3.0/). + +--- + +Thank you for helping improve Ultralytics YOLOv3! Your contributions make a difference. For more on open-source best practices, check out the [Ultralytics open-source community](https://www.ultralytics.com/blog/tips-to-start-contributing-to-ultralytics-open-source-projects) and [GitHub's open source guides](https://opensource.guide/how-to-contribute/). diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 632f8d7cfc..0000000000 --- a/Dockerfile +++ /dev/null @@ -1,68 +0,0 @@ -# Start FROM Nvidia PyTorch image https://ngc.nvidia.com/catalog/containers/nvidia:pytorch -FROM nvcr.io/nvidia/pytorch:19.10-py3 - -# Install dependencies (pip or conda) -RUN pip install -U gsutil -# RUN pip install -U -r requirements.txt -# RUN conda update -n base -c defaults conda -# RUN conda install -y -c anaconda future numpy opencv matplotlib tqdm pillow -# RUN conda install -y -c conda-forge scikit-image tensorboard pycocotools - -## Install OpenCV with Gstreamer support -#WORKDIR /usr/src -#RUN pip uninstall -y opencv-python -#RUN apt-get update -#RUN apt-get install -y gstreamer1.0-tools gstreamer1.0-python3-dbg-plugin-loader libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -#RUN git clone https://github.com/opencv/opencv.git && cd opencv && git checkout 4.1.1 && mkdir build -#RUN git clone https://github.com/opencv/opencv_contrib.git && cd opencv_contrib && git checkout 4.1.1 -#RUN cd opencv/build && cmake ../ \ -# -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -# -D BUILD_OPENCV_PYTHON3=ON \ -# -D PYTHON3_EXECUTABLE=/opt/conda/bin/python \ -# -D PYTHON3_INCLUDE_PATH=/opt/conda/include/python3.6m \ -# -D PYTHON3_LIBRARIES=/opt/conda/lib/python3.6/site-packages \ -# -D WITH_GSTREAMER=ON \ -# -D WITH_FFMPEG=OFF \ -# && make && make install && ldconfig -#RUN cd /usr/local/lib/python3.6/site-packages/cv2/python-3.6/ && mv cv2.cpython-36m-x86_64-linux-gnu.so cv2.so -#RUN cd /opt/conda/lib/python3.6/site-packages/ && ln -s /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.so cv2.so -#RUN python3 -c "import cv2; print(cv2.getBuildInformation())" - -# Create working directory -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -# Copy contents -COPY . /usr/src/app - -# Copy weights -#RUN python3 -c "from utils.google_utils import *; \ -# gdrive_download(id='18xqvs_uwAqfTXp-LJCYLYNHBOcrwbrp0', name='weights/darknet53.conv.74'); \ -# gdrive_download(id='1oPCHKsM2JpM-zgyepQciGli9X0MTsJCO', name='weights/yolov3-spp.weights'); \ -# gdrive_download(id='1vFlbJ_dXPvtwaLLOu-twnjK4exdFiQ73', name='weights/yolov3-spp.pt)" - - -# --------------------------------------------------- Extras Below --------------------------------------------------- - -# Build -# rm -rf yolov3 # Warning: remove existing -# git clone https://github.com/ultralytics/yolov3 && cd yolov3 && python3 detect.py -# sudo docker image prune -af && sudo docker build -t ultralytics/yolov3:v0 . - -# Run -# sudo nvidia-docker run --ipc=host ultralytics/yolov3:v0 python3 detect.py - -# Run with local directory access -# sudo nvidia-docker run --ipc=host -v "$(pwd)"/coco:/usr/src/coco ultralytics/yolov3:v0 python3 train.py - -# Pull and Run with local directory access -# export tag=ultralytics/yolov3:v0 && sudo docker pull $tag && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $tag - -# Build and Push -# export tag=ultralytics/yolov3:v0 && sudo docker build -t $tag . && sudo docker push $tag - -# Kill all -# sudo docker kill "$(sudo docker ps -q)" - -# Run bash for loop -# sudo nvidia-docker run --ipc=host ultralytics/yolov3:v0 while true; do python3 train.py --evolve; done diff --git a/LICENSE b/LICENSE index 9e419e0421..be3f7b28e5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,23 +1,21 @@ -GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble - The GNU General Public License is a free, copyleft license for -software and other kinds of works. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to +our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. +software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you @@ -26,44 +24,34 @@ them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. The precise terms and conditions for copying, distribution and modification follow. @@ -72,7 +60,7 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. + "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. @@ -549,35 +537,45 @@ to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Use with the GNU Affero General Public License. + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single +under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General +Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published +GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's +versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. @@ -635,40 +633,29 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by + it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Affero General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md old mode 100755 new mode 100644 index 87633b2d41..812cbeca99 --- a/README.md +++ b/README.md @@ -1,183 +1,295 @@ - - - - - - -
- - - - - - - - - -
+
+

+ + Ultralytics YOLOv3 banner +

+ +[中文](https://docs.ultralytics.com/zh/) | [한국어](https://docs.ultralytics.com/ko/) | [日本語](https://docs.ultralytics.com/ja/) | [Русский](https://docs.ultralytics.com/ru/) | [Deutsch](https://docs.ultralytics.com/de/) | [Français](https://docs.ultralytics.com/fr/) | [Español](https://docs.ultralytics.com/es) | [Português](https://docs.ultralytics.com/pt/) | [Türkçe](https://docs.ultralytics.com/tr/) | [Tiếng Việt](https://docs.ultralytics.com/vi/) | [العربية](https://docs.ultralytics.com/ar/) + +
+ YOLOv3 CI + YOLOv3 Citation + Docker Pulls + Discord + Ultralytics Forums + Ultralytics Reddit +
+ Run on Gradient + Open In Colab + Open In Kaggle +
+
+ +Ultralytics YOLOv3 is a robust and efficient [computer vision](https://www.ultralytics.com/glossary/computer-vision-cv) model developed by [Ultralytics](https://www.ultralytics.com/). Built on the [PyTorch](https://pytorch.org/) framework, this implementation extends the original YOLOv3 architecture, renowned for its improvements in [object detection](https://www.ultralytics.com/glossary/object-detection) speed and accuracy over earlier versions. It incorporates best practices and insights from extensive research, making it a reliable choice for a wide range of vision AI applications. + +Explore the [Ultralytics Docs](https://docs.ultralytics.com/) for in-depth guidance (YOLOv3-specific docs may be limited, but general YOLO principles apply), open an issue on [GitHub](https://github.com/ultralytics/yolov5/issues/new/choose) for support, and join our [Discord community](https://discord.com/invite/ultralytics) for questions and discussions! + +For Enterprise License requests, please complete the form at [Ultralytics Licensing](https://www.ultralytics.com/license). + +
+ Ultralytics GitHub + space + Ultralytics LinkedIn + space + Ultralytics Twitter + space + Ultralytics YouTube + space + Ultralytics TikTok + space + Ultralytics BiliBili + space + Ultralytics Discord +
+
+
+ +## 🚀 YOLO11: The Next Evolution + +We are thrilled to introduce **Ultralytics YOLO11** 🚀, the latest advancement in our state-of-the-art vision models! Available now at the [Ultralytics YOLO GitHub repository](https://github.com/ultralytics/ultralytics), YOLO11 continues our legacy of speed, precision, and user-friendly design. Whether you're working on [object detection](https://docs.ultralytics.com/tasks/detect/), [instance segmentation](https://docs.ultralytics.com/tasks/segment/), [pose estimation](https://docs.ultralytics.com/tasks/pose/), [image classification](https://docs.ultralytics.com/tasks/classify/), or [oriented object detection (OBB)](https://docs.ultralytics.com/tasks/obb/), YOLO11 delivers the performance and flexibility needed for modern computer vision tasks. + +Get started today and unlock the full potential of YOLO11! Visit the [Ultralytics Docs](https://docs.ultralytics.com/) for comprehensive guides and resources: + +[![PyPI version](https://badge.fury.io/py/ultralytics.svg)](https://badge.fury.io/py/ultralytics) [![Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/projects/ultralytics) -# Introduction - -This directory contains PyTorch YOLOv3 software developed by Ultralytics LLC, and **is freely available for redistribution under the GPL-3.0 license**. For more information please visit https://www.ultralytics.com. - -# Description - -The https://github.com/ultralytics/yolov3 repo contains inference and training code for YOLOv3 in PyTorch. The code works on Linux, MacOS and Windows. Training is done on the COCO dataset by default: https://cocodataset.org/#home. **Credit to Joseph Redmon for YOLO:** https://pjreddie.com/darknet/yolo/. - -# Requirements - -Python 3.7 or later with the following `pip3 install -U -r requirements.txt` packages: +```bash +# Install the ultralytics package +pip install ultralytics +``` -- `numpy` -- `torch >= 1.1.0` -- `opencv-python` -- `tqdm` +
+ + Ultralytics YOLO Performance Comparison +
-# Tutorials +## 📚 Documentation -* [GCP Quickstart](https://github.com/ultralytics/yolov3/wiki/GCP-Quickstart) -* [Transfer Learning](https://github.com/ultralytics/yolov3/wiki/Example:-Transfer-Learning) -* [Train Single Image](https://github.com/ultralytics/yolov3/wiki/Example:-Train-Single-Image) -* [Train Single Class](https://github.com/ultralytics/yolov3/wiki/Example:-Train-Single-Class) -* [Train Custom Data](https://github.com/ultralytics/yolov3/wiki/Train-Custom-Data) +See the [Ultralytics Docs for YOLOv3](https://docs.ultralytics.com/models/yolov3/) for full documentation on training, testing, and deployment using the Ultralytics framework. While YOLOv3-specific documentation may be limited, the general YOLO principles apply. Below are quickstart examples adapted for YOLOv3 concepts. -# Jupyter Notebook +
+Install -Our Jupyter [notebook](https://colab.research.google.com/github/ultralytics/yolov3/blob/master/examples.ipynb) provides quick training, inference and testing examples. +Clone the repository and install dependencies from `requirements.txt` in a [**Python>=3.8.0**](https://www.python.org/) environment. Ensure you have [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/) installed. (Note: This repo is originally YOLOv5, dependencies should be compatible but tailored testing for YOLOv3 is recommended). -# Training +```bash +# Clone the YOLOv3 repository +git clone https://github.com/ultralytics/yolov3 -**Start Training:** `python3 train.py` to begin training after downloading COCO data with `data/get_coco_dataset.sh`. Each epoch trains on 117,263 images from the train and validate COCO sets, and tests on 5000 images from the COCO validate set. +# Navigate to the cloned directory +cd yolov3 -**Resume Training:** `python3 train.py --resume` to resume training from `weights/last.pt`. +# Install required packages +pip install -r requirements.txt +``` -**Plot Training:** `from utils import utils; utils.plot_results()` plots training results from `coco_16img.data`, `coco_64img.data`, 2 example datasets available in the `data/` folder, which train and test on the first 16 and 64 images of the COCO2014-trainval dataset. +
- +
+Inference with PyTorch Hub -## Image Augmentation +Use YOLOv3 via [PyTorch Hub](https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading/) for inference. [Models](https://github.com/ultralytics/yolov5/tree/master/models) like `yolov3.pt`, `yolov3-spp.pt`, `yolov3-tiny.pt` can be loaded. -`datasets.py` applies random OpenCV-powered (https://opencv.org/) augmentation to the input images in accordance with the following specifications. Augmentation is applied **only** during training, not during inference. Bounding boxes are automatically tracked and updated with the images. 416 x 416 examples pictured below. +```python +import torch -Augmentation | Description ---- | --- -Translation | +/- 10% (vertical and horizontal) -Rotation | +/- 5 degrees -Shear | +/- 2 degrees (vertical and horizontal) -Scale | +/- 10% -Reflection | 50% probability (horizontal-only) -H**S**V Saturation | +/- 50% -HS**V** Intensity | +/- 50% +# Load a YOLOv3 model (e.g., yolov3, yolov3-spp) +model = torch.hub.load("ultralytics/yolov3", "yolov3", pretrained=True) # specify 'yolov3' or other variants - +# Define the input image source (URL, local file, PIL image, OpenCV frame, numpy array, or list) +img = "https://ultralytics.com/images/zidane.jpg" # Example image -## Speed +# Perform inference +results = model(img) -https://cloud.google.com/deep-learning-vm/ -**Machine type:** n1-standard-8 (8 vCPUs, 30 GB memory) -**CPU platform:** Intel Skylake -**GPUs:** K80 ($0.20/hr), T4 ($0.35/hr), V100 ($0.83/hr) CUDA with [Nvidia Apex](https://github.com/NVIDIA/apex) FP16/32 -**HDD:** 100 GB SSD -**Dataset:** COCO train 2014 (117,263 images) -**Model:** `yolov3-spp.cfg` +# Process the results (options: .print(), .show(), .save(), .crop(), .pandas()) +results.print() # Print results to console +results.show() # Display results in a window +results.save() # Save results to runs/detect/exp +``` -GPUs | `batch_size` | images/sec | epoch time | epoch cost ---- |---| --- | --- | --- -K80 | 64 (32x2) | 11 | 175 min | $0.58 -T4 | 64 (32x2) | 40 | 49 min | $0.29 -T4 x2 | 64 (64x1) | 61 | 32 min | $0.36 -V100 | 64 (32x2) | 115 | 17 min | $0.24 -V100 x2 | 64 (64x1) | 150 | 13 min | $0.36 -2080Ti | 64 (32x2) | 81 | 24 min | - -2080Ti x2 | 64 (64x1) | 140 | 14 min | - +
-# Inference +
+Inference with detect.py -`detect.py` runs inference on any sources: +The `detect.py` script runs inference on various sources. Use `--weights yolov3.pt` or other YOLOv3 variants. It automatically downloads models and saves results to `runs/detect`. ```bash -python3 detect.py --source ... -``` - -- Image: `--source file.jpg` -- Video: `--source file.mp4` -- Directory: `--source dir/` -- Webcam: `--source 0` -- RTSP stream: `--source rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa` -- HTTP stream: `--source http://wmccpinetop.axiscam.net/mjpg/video.mjpg` +# Run inference using a webcam with yolov3-tiny +python detect.py --weights yolov3-tiny.pt --source 0 -To run a specific models: +# Run inference on a local image file with yolov3 +python detect.py --weights yolov3.pt --source img.jpg -**YOLOv3:** `python3 detect.py --cfg cfg/yolov3.cfg --weights yolov3.weights` - +# Run inference on a local video file with yolov3-spp +python detect.py --weights yolov3-spp.pt --source vid.mp4 -**YOLOv3-tiny:** `python3 detect.py --cfg cfg/yolov3-tiny.cfg --weights yolov3-tiny.weights` - +# Run inference on a screen capture +python detect.py --weights yolov3.pt --source screen -**YOLOv3-SPP:** `python3 detect.py --cfg cfg/yolov3-spp.cfg --weights yolov3-spp.weights` - +# Run inference on a directory of images +python detect.py --weights yolov3.pt --source path/to/images/ +# Run inference on a text file listing image paths +python detect.py --weights yolov3.pt --source list.txt -# Pretrained Weights +# Run inference on a text file listing stream URLs +python detect.py --weights yolov3.pt --source list.streams -Download from: [https://drive.google.com/open?id=1LezFG5g3BCW6iYaV89B2i64cqEUZD7e0](https://drive.google.com/open?id=1LezFG5g3BCW6iYaV89B2i64cqEUZD7e0) +# Run inference using a glob pattern for images +python detect.py --weights yolov3.pt --source 'path/to/*.jpg' -## Darknet Conversion - -```bash -$ git clone https://github.com/ultralytics/yolov3 && cd yolov3 +# Run inference on a YouTube video URL +python detect.py --weights yolov3.pt --source 'https://youtu.be/LNwODJXcvt4' -# convert darknet cfg/weights to pytorch model -$ python3 -c "from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.weights')" -Success: converted 'weights/yolov3-spp.weights' to 'converted.pt' - -# convert cfg/pytorch model to darknet weights -$ python3 -c "from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.pt')" -Success: converted 'weights/yolov3-spp.pt' to 'converted.weights' +# Run inference on an RTSP, RTMP, or HTTP stream +python detect.py --weights yolov3.pt --source 'rtsp://example.com/media.mp4' ``` -# mAP +
-- `test.py --weights weights/yolov3.weights` tests official YOLOv3 weights. -- `test.py --weights weights/last.pt` tests latest checkpoint. -- mAPs on COCO2014 using pycocotools. -- mAP@0.5 run at `--nms-thres 0.5`, mAP@0.5...0.95 run at `--nms-thres 0.7`. -- YOLOv3-SPP ultralytics is `ultralytics68.pt` with `yolov3-spp.cfg`. -- Darknet results published in https://arxiv.org/abs/1804.02767. +
+Training - |Size |COCO mAP
@0.5...0.95 |COCO mAP
@0.5 ---- | --- | --- | --- -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |320 |14.0
28.7
30.5
**35.4** |29.1
51.8
52.3
**54.3** -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |416 |16.0
31.2
33.9
**39.0** |33.0
55.4
56.9
**59.2** -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |512 |16.6
32.7
35.6
**40.3** |34.9
57.7
59.5
**60.6** -YOLOv3-tiny
YOLOv3
YOLOv3-SPP
**YOLOv3-SPP ultralytics** |608 |16.6
33.1
37.0
**40.9** |35.4
58.2
60.7
**60.9** +The commands below show how to train YOLOv3 models on the [COCO dataset](https://docs.ultralytics.com/datasets/detect/coco/). Models and datasets are downloaded automatically. Use the largest `--batch-size` your hardware allows. ```bash -$ python3 test.py --save-json --img-size 608 --nms-thres 0.7 --weights ultralytics68.pt -Namespace(batch_size=16, cfg='cfg/yolov3-spp.cfg', conf_thres=0.001, data='data/coco.data', device='1', img_size=608, iou_thres=0.5, nms_thres=0.7, save_json=True, weights='ultralytics68.pt') -Using CUDA device0 _CudaDeviceProperties(name='GeForce RTX 2080 Ti', total_memory=11019MB) - - Class Images Targets P R mAP@0.5 F1: 100%|███████████████████████████████████████████████████████████████████████████████████| 313/313 [09:46<00:00, 1.09it/s] - all 5e+03 3.58e+04 0.0481 0.829 0.589 0.0894 - - Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.40882 - Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.60026 - Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.44551 - Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.24343 - Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.45024 - Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.51362 - Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.32644 - Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.53629 - Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.59343 - Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.42207 - Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.63985 - Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.70688 -``` +# Train YOLOv3-tiny on COCO for 300 epochs (example settings) +python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov3-tiny.yaml --batch-size 64 -# Citation +# Train YOLOv3 on COCO for 300 epochs (example settings) +python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov3.yaml --batch-size 32 -[![DOI](https://zenodo.org/badge/146165888.svg)](https://zenodo.org/badge/latestdoi/146165888) - -# Contact +# Train YOLOv3-SPP on COCO for 300 epochs (example settings) +python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov3-spp.yaml --batch-size 16 +``` -Issues should be raised directly in the repository. For additional questions or comments please email Glenn Jocher at glenn.jocher@ultralytics.com or visit us at https://contact.ultralytics.com. +
+ +
+Tutorials + +Note: These tutorials primarily use YOLOv5 examples but the principles often apply to YOLOv3 within the Ultralytics framework. + +- **[Train Custom Data](https://docs.ultralytics.com/yolov5/tutorials/train_custom_data/)** 🚀 **RECOMMENDED**: Learn how to train models on your own datasets. +- **[Tips for Best Training Results](https://docs.ultralytics.com/guides/model-training-tips/)** ☘️: Improve your model's performance with expert tips. +- **[Multi-GPU Training](https://docs.ultralytics.com/yolov5/tutorials/multi_gpu_training/)**: Speed up training using multiple GPUs. +- **[PyTorch Hub Integration](https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading/)** 🌟 **NEW**: Easily load models using PyTorch Hub. +- **[Model Export (TFLite, ONNX, CoreML, TensorRT)](https://docs.ultralytics.com/yolov5/tutorials/model_export/)** 🚀: Convert your models to various deployment formats. +- **[NVIDIA Jetson Deployment](https://docs.ultralytics.com/guides/nvidia-jetson/)** 🌟 **NEW**: Deploy models on NVIDIA Jetson devices. +- **[Test-Time Augmentation (TTA)](https://docs.ultralytics.com/yolov5/tutorials/test_time_augmentation/)**: Enhance prediction accuracy with TTA. +- **[Model Ensembling](https://docs.ultralytics.com/yolov5/tutorials/model_ensembling/)**: Combine multiple models for better performance. +- **[Model Pruning/Sparsity](https://docs.ultralytics.com/yolov5/tutorials/model_pruning_and_sparsity/)**: Optimize models for size and speed. +- **[Hyperparameter Evolution](https://docs.ultralytics.com/yolov5/tutorials/hyperparameter_evolution/)**: Automatically find the best training hyperparameters. +- **[Transfer Learning with Frozen Layers](https://docs.ultralytics.com/yolov5/tutorials/transfer_learning_with_frozen_layers/)**: Adapt pretrained models to new tasks efficiently. +- **[Architecture Summary](https://docs.ultralytics.com/yolov5/tutorials/architecture_description/)** 🌟 **NEW**: Understand the model architecture (focus on YOLOv3 principles). +- **[Ultralytics HUB Training](https://www.ultralytics.com/hub)** 🚀 **RECOMMENDED**: Train and deploy YOLO models using Ultralytics HUB. +- **[ClearML Logging](https://docs.ultralytics.com/yolov5/tutorials/clearml_logging_integration/)**: Integrate with ClearML for experiment tracking. +- **[Neural Magic DeepSparse Integration](https://docs.ultralytics.com/yolov5/tutorials/neural_magic_pruning_quantization/)**: Accelerate inference with DeepSparse. +- **[Comet Logging](https://docs.ultralytics.com/yolov5/tutorials/comet_logging_integration/)** 🌟 **NEW**: Log experiments using Comet ML. + +
+ +## 🧩 Integrations + +Ultralytics offers robust integrations with leading AI platforms to enhance your workflow, including dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with partners like [Weights & Biases](https://docs.ultralytics.com/integrations/weights-biases/), [Comet ML](https://docs.ultralytics.com/integrations/comet/), [Roboflow](https://docs.ultralytics.com/integrations/roboflow/), and [Intel OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI projects. Explore more at [Ultralytics Integrations](https://docs.ultralytics.com/integrations/). + + + Ultralytics active learning integrations + +
+
+ +
+ + Ultralytics HUB logo + space + + Weights & Biases logo + space + + Comet ML logo + space + + Neural Magic logo +
+ +| Ultralytics HUB 🌟 | Weights & Biases | Comet | Neural Magic | +| :-----------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | +| Streamline YOLO workflows: Label, train, and deploy effortlessly with [Ultralytics HUB](https://hub.ultralytics.com/). Try now! | Track experiments, hyperparameters, and results with [Weights & Biases](https://docs.ultralytics.com/integrations/weights-biases/). | Free forever, [Comet ML](https://docs.ultralytics.com/integrations/comet/) lets you save YOLO models, resume training, and interactively visualize predictions. | Run YOLO inference up to 6x faster with [Neural Magic DeepSparse](https://docs.ultralytics.com/integrations/neural-magic/). | + +## ⭐ Ultralytics HUB + +Experience seamless AI development with [Ultralytics HUB](https://www.ultralytics.com/hub) ⭐, the ultimate platform for building, training, and deploying computer vision models. Visualize datasets, train YOLOv3, YOLOv5, and YOLOv8 🚀 models, and deploy them to real-world applications without writing any code. Transform images into actionable insights using our advanced tools and user-friendly [Ultralytics App](https://www.ultralytics.com/app-install). Start your journey for **Free** today! + + +Ultralytics HUB Platform Screenshot + +## 🤔 Why YOLOv3? + +YOLOv3 marked a major leap forward in real-time object detection at its release. Key advantages include: + +- **Improved Accuracy:** Enhanced detection of small objects compared to YOLOv2. +- **Multi-Scale Predictions:** Detects objects at three different scales, boosting performance across varied object sizes. +- **Class Prediction:** Uses logistic classifiers for object classes, enabling multi-label classification. +- **Feature Extractor:** Employs a deeper network (Darknet-53) versus the Darknet-19 used in YOLOv2. + +While newer models like YOLOv5 and YOLO11 offer further advancements, YOLOv3 remains a reliable and widely adopted baseline, efficiently implemented in PyTorch by Ultralytics. + +## ☁️ Environments + +Get started quickly with our pre-configured environments. Click the icons below for setup details. + +
+ + Run on Gradient + + + Open In Colab + + + Open In Kaggle + + + Docker Image + + + AWS Marketplace + + + GCP Quickstart +
+ +## 🤝 Contribute + +We welcome your contributions! Making YOLO models accessible and effective is a community effort. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started. Share your feedback through the [Ultralytics Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey). Thank you to all our contributors for making Ultralytics YOLO better! + +[![Ultralytics open-source contributors](https://raw.githubusercontent.com/ultralytics/assets/main/im/image-contributors.png)](https://github.com/ultralytics/yolov5/graphs/contributors) + +## 📜 License + +Ultralytics provides two licensing options to meet different needs: + +- **AGPL-3.0 License**: An [OSI-approved](https://opensource.org/license/agpl-v3) open-source license ideal for academic research, personal projects, and testing. It promotes open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/yolov5/blob/master/LICENSE) file for details. +- **Enterprise License**: Tailored for commercial applications, this license allows seamless integration of Ultralytics software and AI models into commercial products and services, bypassing the open-source requirements of AGPL-3.0. For commercial use cases, please contact us via [Ultralytics Licensing](https://www.ultralytics.com/license). + +## 📧 Contact + +For bug reports and feature requests related to Ultralytics YOLO implementations, please visit [GitHub Issues](https://github.com/ultralytics/yolov5/issues). For general questions, discussions, and community support, join our [Discord server](https://discord.com/invite/ultralytics)! + +
+
+ Ultralytics GitHub + space + Ultralytics LinkedIn + space + Ultralytics Twitter + space + Ultralytics YouTube + space + Ultralytics TikTok + space + Ultralytics BiliBili + space + Ultralytics Discord +
diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000000..6ca478ab55 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,297 @@ +Ultralytics logo + +
+

+ + Ultralytics YOLOv3 banner +

+ +[English](https://docs.ultralytics.com/) | [한국어](https://docs.ultralytics.com/ko/) | [日本語](https://docs.ultralytics.com/ja/) | [Русский](https://docs.ultralytics.com/ru/) | [Deutsch](https://docs.ultralytics.com/de/) | [Français](https://docs.ultralytics.com/fr/) | [Español](https://docs.ultralytics.com/es) | [Português](https://docs.ultralytics.com/pt/) | [Türkçe](https://docs.ultralytics.com/tr/) | [Tiếng Việt](https://docs.ultralytics.com/vi/) | [العربية](https://docs.ultralytics.com/ar/) + +
+ YOLOv3 CI + YOLOv3 Citation + Docker Pulls + Discord + Ultralytics Forums + Ultralytics Reddit +
+ Run on Gradient + Open In Colab + Open In Kaggle +
+
+ +Ultralytics YOLOv3 是由 [Ultralytics](https://www.ultralytics.com/) 开发的高效、强大的[计算机视觉](https://www.ultralytics.com/glossary/computer-vision-cv)模型。该实现基于 [PyTorch](https://pytorch.org/) 框架,构建于原始 YOLOv3 架构之上。与早期版本相比,YOLOv3 在[目标检测](https://www.ultralytics.com/glossary/object-detection)速度与准确性方面表现卓越,融合了前沿研究和最佳实践,成为多种视觉 AI 任务的可靠选择。 + +欢迎您充分利用本项目资源!请访问 [Ultralytics 文档](https://docs.ultralytics.com/)获取详细指南(注意:YOLOv3 专属文档有限,建议参考通用 YOLO 原则),在 [GitHub Issues](https://github.com/ultralytics/yolov5/issues/new/choose) 提问获取支持,并加入 [Discord 社区](https://discord.com/invite/ultralytics)参与讨论! + +如需企业许可证,请填写 [Ultralytics 许可申请](https://www.ultralytics.com/license)。 + +
+ Ultralytics GitHub + space + Ultralytics LinkedIn + space + Ultralytics Twitter + space + Ultralytics YouTube + space + Ultralytics TikTok + space + Ultralytics BiliBili + space + Ultralytics Discord +
+
+
+ +## 🚀 YOLO11:下一代进化 + +我们隆重推出 **Ultralytics YOLO11** 🚀,这是我们最新的 SOTA 视觉模型!YOLO11 已在 [Ultralytics YOLO GitHub 仓库](https://github.com/ultralytics/ultralytics)发布,延续了速度、精度与易用性的卓越传统。无论您在进行[目标检测](https://docs.ultralytics.com/tasks/detect/)、[实例分割](https://docs.ultralytics.com/tasks/segment/)、[姿态估计](https://docs.ultralytics.com/tasks/pose/)、[图像分类](https://docs.ultralytics.com/tasks/classify/)还是[旋转目标检测 (OBB)](https://docs.ultralytics.com/tasks/obb/),YOLO11 都能为您的应用带来卓越性能和多功能性。 + +立即体验,释放 YOLO11 的全部潜能!访问 [Ultralytics 文档](https://docs.ultralytics.com/)获取全面指南和资源: + +[![PyPI version](https://badge.fury.io/py/ultralytics.svg)](https://badge.fury.io/py/ultralytics) [![Downloads](https://static.pepy.tech/badge/ultralytics)](https://pepy.tech/projects/ultralytics) + +```bash +# 安装 ultralytics 包 +pip install ultralytics +``` + +
+ + Ultralytics YOLO Performance Comparison +
+ +## 📚 文档 + +请参阅 [Ultralytics YOLOv3 文档](https://docs.ultralytics.com/models/yolov3/),了解如何使用 Ultralytics 框架进行训练、测试和部署。虽然 YOLOv3 专属文档有限,但通用 YOLO 原则同样适用。以下为 YOLOv3 快速入门示例。 + +
+安装 + +克隆仓库并在 [**Python>=3.8.0**](https://www.python.org/) 环境下,从 [requirements.txt](https://github.com/ultralytics/yolov5/blob/master/requirements.txt) 安装依赖。确保已安装 [**PyTorch>=1.8**](https://pytorch.org/get-started/locally/)。建议针对 YOLOv3 进行专门测试以确保兼容性。 + +```bash +# 克隆 YOLOv3 仓库 +git clone https://github.com/ultralytics/yolov3 + +# 进入目录 +cd yolov3 + +# 安装依赖 +pip install -r requirements.txt +``` + +
+ +
+使用 PyTorch Hub 进行推理 + +通过 [PyTorch Hub](https://docs.ultralytics.com/integrations/jupyterlab/) 可便捷加载 YOLOv3 进行推理。[模型权重](https://github.com/ultralytics/yolov5/tree/master/models)如 `yolov3.pt`、`yolov3-spp.pt`、`yolov3-tiny.pt` 均可直接使用。 + +```python +import torch + +# 加载 YOLOv3 模型(如 yolov3, yolov3-spp) +model = torch.hub.load("ultralytics/yolov3", "yolov3", pretrained=True) + +# 输入图像(支持 URL、本地文件、PIL、OpenCV、numpy 数组或列表) +img = "https://ultralytics.com/images/zidane.jpg" + +# 推理 +results = model(img) + +# 结果处理(.print(), .show(), .save(), .crop(), .pandas()) +results.print() +results.show() +results.save() +``` + +
+ +
+使用 detect.py 进行推理 + +`detect.py` 脚本支持多种输入源推理。使用 `--weights yolov3.pt` 或其他变体,模型会自动下载,结果保存至 `runs/detect`。 + +```bash +# 使用 yolov3-tiny 和摄像头推理 +python detect.py --weights yolov3-tiny.pt --source 0 + +# 使用 yolov3 推理本地图像 +python detect.py --weights yolov3.pt --source img.jpg + +# 使用 yolov3-spp 推理本地视频 +python detect.py --weights yolov3-spp.pt --source vid.mp4 + +# 推理屏幕截图 +python detect.py --weights yolov3.pt --source screen + +# 推理图像目录 +python detect.py --weights yolov3.pt --source path/to/images/ + +# 推理图像路径列表文件 +python detect.py --weights yolov3.pt --source list.txt + +# 推理流 URL 列表文件 +python detect.py --weights yolov3.pt --source list.streams + +# 使用 glob 模式推理 +python detect.py --weights yolov3.pt --source 'path/to/*.jpg' + +# 推理 YouTube 视频 +python detect.py --weights yolov3.pt --source 'https://youtu.be/LNwODJXcvt4' + +# 推理 RTSP、RTMP 或 HTTP 流 +python detect.py --weights yolov3.pt --source 'rtsp://example.com/media.mp4' +``` + +
+ +
+训练 + +以下命令展示如何在 [COCO 数据集](https://docs.ultralytics.com/datasets/detect/coco/)上训练 YOLOv3。模型和数据集会自动下载。请根据硬件选择合适的 `--batch-size`。 + +```bash +# 在 COCO 上训练 YOLOv3-tiny 300 轮 +python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov3-tiny.yaml --batch-size 64 + +# 在 COCO 上训练 YOLOv3 300 轮 +python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov3.yaml --batch-size 32 + +# 在 COCO 上训练 YOLOv3-SPP 300 轮 +python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov3-spp.yaml --batch-size 16 +``` + +
+ +
+教程 + +注意:这些教程多以 YOLOv5 为例,但原理同样适用于 YOLOv3。 + +- **[训练自定义数据](https://docs.ultralytics.com/guides/data-collection-and-annotation/)** 🚀 **推荐**:学习如何在自有数据集上训练模型。 +- **[最佳训练技巧](https://docs.ultralytics.com/guides/model-training-tips/)** ☘️:提升模型性能的专家建议。 +- **[多 GPU 训练](https://docs.ultralytics.com/guides/model-training-tips/)**:加速大规模训练。 +- **[PyTorch Hub 集成](https://docs.ultralytics.com/integrations/jupyterlab/)** 🌟 **新增**:一键加载模型。 +- **[模型导出 (TFLite, ONNX, CoreML, TensorRT)](https://docs.ultralytics.com/modes/export/)** 🚀:多格式部署支持。 +- **[NVIDIA Jetson 部署](https://docs.ultralytics.com/guides/nvidia-jetson/)** 🌟 **新增**:边缘设备推理。 +- **[测试时增强 (TTA)](https://docs.ultralytics.com/guides/model-evaluation-insights/)**:提升预测准确率。 +- **[模型集成](https://docs.ultralytics.com/guides/model-deployment-options/)**:多模型融合提升表现。 +- **[模型剪枝/稀疏化](https://docs.ultralytics.com/guides/model-deployment-practices/)**:优化模型体积与速度。 +- **[超参数进化](https://docs.ultralytics.com/guides/hyperparameter-tuning/)**:自动优化训练参数。 +- **[迁移学习与冻结层](https://docs.ultralytics.com/guides/model-training-tips/)**:高效迁移预训练模型。 +- **[架构总结](https://docs.ultralytics.com/models/yolov3/)** 🌟 **新增**:理解 YOLOv3 设计原理。 +- **[Ultralytics HUB 训练](https://www.ultralytics.com/hub)** 🚀 **推荐**:无代码训练与部署。 +- **[ClearML 日志集成](https://docs.ultralytics.com/integrations/clearml/)**:实验可追溯。 +- **[Neural Magic DeepSparse 集成](https://docs.ultralytics.com/integrations/neural-magic/)**:极致推理加速。 +- **[Comet 日志集成](https://docs.ultralytics.com/integrations/comet/)** 🌟 **新增**:实验可视化与管理。 + +
+ +## 🧩 集成 + +Ultralytics 与领先 AI 平台深度集成,扩展了数据集标注、训练、可视化和模型管理等能力。了解如何通过 [Weights & Biases](https://docs.ultralytics.com/integrations/weights-biases/)、[Comet ML](https://docs.ultralytics.com/integrations/comet/)、[Roboflow](https://docs.ultralytics.com/integrations/roboflow/) 和 [Intel OpenVINO](https://docs.ultralytics.com/integrations/openvino/) 等合作伙伴优化您的 AI 工作流。探索 [Ultralytics 集成](https://docs.ultralytics.com/integrations/) 了解更多。 + + + Ultralytics active learning integrations + +
+
+ +
+ + Ultralytics HUB logo + space + + Weights & Biases logo + space + + Comet ML logo + space + + Neural Magic logo +
+ +| Ultralytics HUB 🌟 | Weights & Biases | Comet | Neural Magic | +| :-----------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------: | +| 简化 YOLO 工作流:使用 [Ultralytics HUB](https://hub.ultralytics.com/) 轻松标注、训练和部署。立即体验! | 使用 [Weights & Biases](https://docs.ultralytics.com/integrations/weights-biases/) 跟踪实验与超参数。 | [Comet ML](https://docs.ultralytics.com/integrations/comet/) 永久免费,支持模型保存、训练恢复与预测可视化。 | [Neural Magic DeepSparse](https://docs.ultralytics.com/integrations/neural-magic/) 可将 YOLO 推理速度提升至 6 倍。 | + +## ⭐ Ultralytics HUB + +通过 [Ultralytics HUB](https://www.ultralytics.com/hub) ⭐ 体验无缝 AI 开发,轻松构建、训练和部署计算机视觉模型。无需代码,即可可视化数据集、训练 YOLOv3、YOLOv5 和 YOLOv8 🚀,并将模型部署到实际场景。借助 [Ultralytics App](https://www.ultralytics.com/app-install) 和创新工具,将图像转化为可操作见解。立即开启您的**免费** AI 之旅! + + +Ultralytics HUB Platform Screenshot + +## 🤔 为何选择 YOLOv3? + +YOLOv3 发布时推动了实时目标检测的进步。其核心优势包括: + +- **更高准确率:** 对小目标检测表现优异。 +- **多尺度预测:** 支持三种不同尺度,提升多尺寸目标检测能力。 +- **多标签分类:** 采用逻辑分类器而非 softmax,支持多标签输出。 +- **强大特征提取器:** 使用更深的 Darknet-53 网络替代 YOLOv2 的 Darknet-19。 + +尽管后续如 YOLOv5 和 YOLO11 等模型带来更多创新,YOLOv3 依然是坚实且广泛理解的基准,Ultralytics 在 PyTorch 中实现高效。 + +## ☁️ 环境 + +使用预配置环境快速上手。点击下方图标了解各平台设置详情。 + +
+ + Run on Gradient + + + Open In Colab + + + Open In Kaggle + + + Docker Image + + + AWS Marketplace + + + GCP Quickstart +
+ +## 🤝 贡献 + +欢迎您的贡献!Ultralytics 致力于让 YOLO 模型更易用、更高效。请参阅[贡献指南](https://docs.ultralytics.com/help/contributing/)开始参与。通过 [Ultralytics 调查](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) 分享您的反馈。感谢所有为 Ultralytics YOLO 发展做出贡献的朋友! + +[![Ultralytics open-source contributors](https://raw.githubusercontent.com/ultralytics/assets/main/im/image-contributors.png)](https://github.com/ultralytics/yolov5/graphs/contributors) + +## 📜 许可证 + +Ultralytics 提供两种许可选项以满足不同需求: + +- **AGPL-3.0 许可证**:经 [OSI 批准](https://opensource.org/license/agpl-v3)的开源协议,适合学术、个人项目和测试,促进开放合作。详情见 [LICENSE](https://github.com/ultralytics/yolov5/blob/master/LICENSE)。 +- **企业许可证**:专为商业应用设计,允许将 Ultralytics 软件和模型集成到商业产品和服务,无需遵守 AGPL-3.0 的开源要求。请通过 [Ultralytics 许可](https://www.ultralytics.com/license) 联系我们。 + +## 📧 联系 + +如需报告 Ultralytics YOLO 实现的 bug 或功能请求,请访问 [GitHub Issues](https://github.com/ultralytics/yolov5/issues)。如有一般问题、讨论或社区支持,欢迎加入 [Discord 服务器](https://discord.com/invite/ultralytics)! + +
+
+ Ultralytics GitHub + space + Ultralytics LinkedIn + space + Ultralytics Twitter + space + Ultralytics YouTube + space + Ultralytics TikTok + space + Ultralytics BiliBili + space + Ultralytics Discord +
diff --git a/benchmarks.py b/benchmarks.py new file mode 100644 index 0000000000..b47412614c --- /dev/null +++ b/benchmarks.py @@ -0,0 +1,304 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Run YOLOv3 benchmarks on all supported export formats. + +Format | `export.py --include` | Model +--- | --- | --- +PyTorch | - | yolov5s.pt +TorchScript | `torchscript` | yolov5s.torchscript +ONNX | `onnx` | yolov5s.onnx +OpenVINO | `openvino` | yolov5s_openvino_model/ +TensorRT | `engine` | yolov5s.engine +CoreML | `coreml` | yolov5s.mlmodel +TensorFlow SavedModel | `saved_model` | yolov5s_saved_model/ +TensorFlow GraphDef | `pb` | yolov5s.pb +TensorFlow Lite | `tflite` | yolov5s.tflite +TensorFlow Edge TPU | `edgetpu` | yolov5s_edgetpu.tflite +TensorFlow.js | `tfjs` | yolov5s_web_model/ + +Requirements: + $ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime openvino-dev tensorflow-cpu # CPU + $ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime-gpu openvino-dev tensorflow # GPU + $ pip install -U nvidia-tensorrt --index-url https://pypi.ngc.nvidia.com # TensorRT + +Usage: + $ python benchmarks.py --weights yolov5s.pt --img 640 +""" + +import argparse +import platform +import sys +import time +from pathlib import Path + +import pandas as pd + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[0] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +# ROOT = ROOT.relative_to(Path.cwd()) # relative + +import export +from models.experimental import attempt_load +from models.yolo import SegmentationModel +from segment.val import run as val_seg +from utils import notebook_init +from utils.general import LOGGER, check_yaml, file_size, print_args +from utils.torch_utils import select_device +from val import run as val_det + + +def run( + weights=ROOT / "yolov5s.pt", # weights path + imgsz=640, # inference size (pixels) + batch_size=1, # batch size + data=ROOT / "data/coco128.yaml", # dataset.yaml path + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + half=False, # use FP16 half-precision inference + test=False, # test exports only + pt_only=False, # test PyTorch only + hard_fail=False, # throw error on benchmark failure +): + """Run YOLOv3 benchmarks on multiple export formats and validate performance metrics. + + Args: + weights (str | Path): Path to the weights file. Defaults to 'yolov5s.pt'. + imgsz (int): Inference image size in pixels. Defaults to 640. + batch_size (int): Batch size for inference. Defaults to 1. + data (str | Path): Path to the dataset configuration file (dataset.yaml). Defaults to 'data/coco128.yaml'. + device (str): Device to be used for inference, e.g., '0' or '0,1,2,3' for GPU or 'cpu' for CPU. Defaults to ''. + half (bool): Use FP16 half-precision for inference. Defaults to False. + test (bool): Test exports only without running benchmarks. Defaults to False. + pt_only (bool): Run benchmarks only for PyTorch format. Defaults to False. + hard_fail (bool): Raise an error if any benchmark test fails. Defaults to False. + + Returns: + None + + Examples: + ```python + # Run benchmarks on the default 'yolov5s.pt' model with an image size of 640 pixels + run() + + # Run benchmarks on a specific model with GPU and half-precision enabled + run(weights='custom_model.pt', device='0', half=True) + + # Test only PyTorch export + run(pt_only=True) + ``` + + Notes: + This function iterates over multiple export formats, performs the export, and then validates the model's performance + using appropriate validation functions for detection and segmentation models. The results are logged, and optionally, + benchmarks can be configured to raise errors on failures using the `hard_fail` argument. + """ + y, t = [], time.time() + device = select_device(device) + model_type = type(attempt_load(weights, fuse=False)) # DetectionModel, SegmentationModel, etc. + for i, (name, f, suffix, cpu, gpu) in export.export_formats().iterrows(): # index, (name, file, suffix, CPU, GPU) + try: + assert i not in (9, 10), "inference not supported" # Edge TPU and TF.js are unsupported + assert i != 5 or platform.system() == "Darwin", "inference only supported on macOS>=10.13" # CoreML + if "cpu" in device.type: + assert cpu, "inference not supported on CPU" + if "cuda" in device.type: + assert gpu, "inference not supported on GPU" + + # Export + if f == "-": + w = weights # PyTorch format + else: + w = export.run( + weights=weights, imgsz=[imgsz], include=[f], batch_size=batch_size, device=device, half=half + )[-1] # all others + assert suffix in str(w), "export failed" + + # Validate + if model_type == SegmentationModel: + result = val_seg(data, w, batch_size, imgsz, plots=False, device=device, task="speed", half=half) + metric = result[0][7] # (box(p, r, map50, map), mask(p, r, map50, map), *loss(box, obj, cls)) + else: # DetectionModel: + result = val_det(data, w, batch_size, imgsz, plots=False, device=device, task="speed", half=half) + metric = result[0][3] # (p, r, map50, map, *loss(box, obj, cls)) + speed = result[2][1] # times (preprocess, inference, postprocess) + y.append([name, round(file_size(w), 1), round(metric, 4), round(speed, 2)]) # MB, mAP, t_inference + except Exception as e: + if hard_fail: + assert type(e) is AssertionError, f"Benchmark --hard-fail for {name}: {e}" + LOGGER.warning(f"WARNING ⚠️ Benchmark failure for {name}: {e}") + y.append([name, None, None, None]) # mAP, t_inference + if pt_only and i == 0: + break # break after PyTorch + + # Print results + LOGGER.info("\n") + parse_opt() + notebook_init() # print system info + c = ["Format", "Size (MB)", "mAP50-95", "Inference time (ms)"] if map else ["Format", "Export", "", ""] + py = pd.DataFrame(y, columns=c) + LOGGER.info(f"\nBenchmarks complete ({time.time() - t:.2f}s)") + LOGGER.info(str(py if map else py.iloc[:, :2])) + if hard_fail and isinstance(hard_fail, str): + metrics = py["mAP50-95"].array # values to compare to floor + floor = eval(hard_fail) # minimum metric floor to pass, i.e. = 0.29 mAP for YOLOv5n + assert all(x > floor for x in metrics if pd.notna(x)), f"HARD FAIL: mAP50-95 < floor {floor}" + return py + + +def test( + weights=ROOT / "yolov5s.pt", # weights path + imgsz=640, # inference size (pixels) + batch_size=1, # batch size + data=ROOT / "data/coco128.yaml", # dataset.yaml path + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + half=False, # use FP16 half-precision inference + test=False, # test exports only + pt_only=False, # test PyTorch only + hard_fail=False, # throw error on benchmark failure +): + """Run YOLOv3 export tests for various formats and log the results, including export success status. + + Args: + weights (str | Path): Path to the weights file. Defaults to ROOT / "yolov5s.pt". + imgsz (int): Inference size in pixels. Defaults to 640. + batch_size (int): Number of images per batch. Defaults to 1. + data (str | Path): Path to the dataset yaml file. Defaults to ROOT / "data/coco128.yaml". + device (str): Device for inference. Accepts cuda device (e.g., "0" or "0,1,2,3") or "cpu". Defaults to "". + half (bool): Use FP16 half-precision inference. Defaults to False. + test (bool): Run export tests only, no inference. Defaults to False. + pt_only (bool): Run tests on PyTorch format only. Defaults to False. + hard_fail (bool): Raise an error on benchmark failure. Defaults to False. + + Returns: + pd.DataFrame: A DataFrame containing the export formats and their success status. + + Examples: + ```python + from ultralytics import test + + results = test( + weights="path/to/yolov5s.pt", + imgsz=640, + batch_size=1, + data="path/to/coco128.yaml", + device="0", + half=False, + test=True, + pt_only=False, + hard_fail=True, + ) + print(results) + ``` + + Notes: + Ensure all required packages are installed as specified in the Ultralytics YOLOv3 documentation: + https://github.com/ultralytics/ultralytics + """ + y, t = [], time.time() + device = select_device(device) + for i, (name, f, suffix, gpu) in export.export_formats().iterrows(): # index, (name, file, suffix, gpu-capable) + try: + w = ( + weights + if f == "-" + else export.run(weights=weights, imgsz=[imgsz], include=[f], device=device, half=half)[-1] + ) # weights + assert suffix in str(w), "export failed" + y.append([name, True]) + except Exception: + y.append([name, False]) # mAP, t_inference + + # Print results + LOGGER.info("\n") + parse_opt() + notebook_init() # print system info + py = pd.DataFrame(y, columns=["Format", "Export"]) + LOGGER.info(f"\nExports complete ({time.time() - t:.2f}s)") + LOGGER.info(str(py)) + return py + + +def parse_opt(): + """Parses command line arguments for YOLOv3 inference and export configurations. + + Args: + --weights (str): Path to the weights file. Default is 'ROOT / "yolov3-tiny.pt"'. + --imgsz | --img | --img-size (int): Inference image size in pixels. Default is 640. + --batch-size (int): Batch size for inference. Default is 1. + --data (str): Path to the dataset configuration file (dataset.yaml). Default is 'ROOT / "data/coco128.yaml"'. + --device (str): CUDA device identifier, e.g., '0' for single GPU, '0,1,2,3' for multiple GPUs, or 'cpu' for CPU + inference. Default is "". + --half (bool): If set, use FP16 half-precision inference. Default is False. + --test (bool): If set, test only exports without running inference. Default is False. + --pt-only (bool): If set, test only the PyTorch model without exporting to other formats. Default is False. + --hard-fail (str | bool): If set, raise an exception on benchmark failure. Can also be a string representing the + minimum metric floor for success. Default is False. + + Returns: + argparse.Namespace: The parsed arguments as a namespace object. + + Examples: + To run inference on the YOLOv3-tiny model with a different image size: + + ```python + $ python benchmarks.py --weights yolov3-tiny.pt --imgsz 512 --device 0 + ``` + + Notes: + The `--hard-fail` argument can be a boolean or a string. If a string is provided, it should be an expression that + represents the minimum acceptable metric value, such as '0.29' for mAP (mean Average Precision). + + Links: + https://github.com/ultralytics/ultralytics + """ + parser = argparse.ArgumentParser() + parser.add_argument("--weights", type=str, default=ROOT / "yolov3-tiny.pt", help="weights path") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="inference size (pixels)") + parser.add_argument("--batch-size", type=int, default=1, help="batch size") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--test", action="store_true", help="test exports only") + parser.add_argument("--pt-only", action="store_true", help="test PyTorch only") + parser.add_argument("--hard-fail", nargs="?", const=True, default=False, help="Exception on error or < min metric") + opt = parser.parse_args() + opt.data = check_yaml(opt.data) # check YAML + print_args(vars(opt)) + return opt + + +def main(opt): + """Executes the export and benchmarking pipeline for YOLOv3 models, testing multiple export formats and validating + performance metrics. + + Args: + opt (argparse.Namespace): Parsed command line arguments, including options for weights, image size, batch size, + dataset path, device, half-precision inference, test mode, PyTorch-only testing, and hard fail conditions. + + Returns: + pd.DataFrame: A DataFrame containing benchmarking results with columns: + - Format: Name of the export format + - Size (MB): File size of the exported model + - mAP50-95: Mean Average Precision for the model + - Inference time (ms): Time taken for inference + + Examples: + Running the function from command line with required arguments: + + ```python + $ python benchmarks.py --weights yolov5s.pt --img 640 + ``` + + For more details, visit the Ultralytics YOLOv3 repository on [GitHub](https://github.com/ultralytics/ultralytics). + + Notes: + The function runs the main pipeline by exporting the YOLOv3 model to various formats and running benchmarks to + evaluate performance. If `opt.test` is set to True, it only tests the export process and logs the results. + """ + test(**vars(opt)) if opt.test else run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/cfg/yolov3-1cls.cfg b/cfg/yolov3-1cls.cfg deleted file mode 100755 index 00bad5d009..0000000000 --- a/cfg/yolov3-1cls.cfg +++ /dev/null @@ -1,788 +0,0 @@ -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=16 -subdivisions=1 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=1 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=1 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=1 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3-spp-1cls.cfg b/cfg/yolov3-spp-1cls.cfg deleted file mode 100644 index 88edcffb51..0000000000 --- a/cfg/yolov3-spp-1cls.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=100 -max_batches = 5000 -policy=steps -steps=4000,4500 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=1 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=1 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=1 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3-spp-3cls.cfg b/cfg/yolov3-spp-3cls.cfg deleted file mode 100644 index b5d4bdf28d..0000000000 --- a/cfg/yolov3-spp-3cls.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=100 -max_batches = 5000 -policy=steps -steps=4000,4500 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=24 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=3 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=24 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=3 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=24 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=3 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3-spp-pan-scale.cfg b/cfg/yolov3-spp-pan-scale.cfg deleted file mode 100644 index d95bd52b24..0000000000 --- a/cfg/yolov3-spp-pan-scale.cfg +++ /dev/null @@ -1,938 +0,0 @@ -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=64 -subdivisions=32 -width=544 -height=544 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - - -learning_rate=0.001 -burn_in=1000 -max_batches = 10000 - -policy=steps -steps=8000,9000 -scales=.1,.1 - -#policy=sgdr -#sgdr_cycle=1000 -#sgdr_mult=2 -#steps=4000,6000,8000,9000 -#scales=1, 1, 0.1, 0.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - - -########### to [yolo-3] - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - - -########### to [yolo-2] - - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - - - -########### to [yolo-1] - - -########### features of different layers - - -[route] -layers=1 - -[reorg3d] -stride=2 - -[route] -layers=5,-1 - -[reorg3d] -stride=2 - -[route] -layers=12,-1 - -[reorg3d] -stride=2 - -[route] -layers=37,-1 - -[reorg3d] -stride=2 - -[route] -layers=62,-1 - - - -########### [yolo-1] - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=4 - -[route] -layers = -1,-12 - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=340 -activation=linear - - -[yolo] -mask = 0,1,2,3 -anchors = 8,8, 10,13, 16,30, 33,23, 32,32, 30,61, 62,45, 64,64, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=12 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -scale_x_y = 1.05 -random=0 - - - - -########### [yolo-2] - - -[route] -layers = -7 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1,-28 - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=340 -activation=linear - - -[yolo] -mask = 4,5,6,7 -anchors = 8,8, 10,13, 16,30, 33,23, 32,32, 30,61, 62,45, 64,64, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=12 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -scale_x_y = 1.1 -random=0 - - - -########### [yolo-3] - -[route] -layers = -14 - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[route] -layers = -1,-43 - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - - -[convolutional] -size=1 -stride=1 -pad=1 -filters=340 -activation=linear - - -[yolo] -mask = 8,9,10,11 -anchors = 8,8, 10,13, 16,30, 33,23, 32,32, 30,61, 62,45, 59,119, 80,80, 116,90, 156,198, 373,326 -classes=80 -num=12 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -scale_x_y = 1.2 -random=0 diff --git a/cfg/yolov3-spp.cfg b/cfg/yolov3-spp.cfg deleted file mode 100644 index bb4e893bf6..0000000000 --- a/cfg/yolov3-spp.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3-tiny-1cls.cfg b/cfg/yolov3-tiny-1cls.cfg deleted file mode 100644 index b441eae2aa..0000000000 --- a/cfg/yolov3-tiny-1cls.cfg +++ /dev/null @@ -1,182 +0,0 @@ -[net] -# Testing -batch=1 -subdivisions=1 -# Training -# batch=64 -# subdivisions=2 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=16 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=1 - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -########### - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - - - -[yolo] -mask = 3,4,5 -anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 -classes=1 -num=6 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 8 - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=18 -activation=linear - -[yolo] -mask = 0,1,2 -anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 -classes=1 -num=6 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3-tiny.cfg b/cfg/yolov3-tiny.cfg deleted file mode 100644 index 42c0fcf919..0000000000 --- a/cfg/yolov3-tiny.cfg +++ /dev/null @@ -1,182 +0,0 @@ -[net] -# Testing -batch=1 -subdivisions=1 -# Training -# batch=64 -# subdivisions=2 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=16 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=2 - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[maxpool] -size=2 -stride=1 - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -########### - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - - -[yolo] -mask = 3,4,5 -anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 -classes=80 -num=6 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 8 - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - -[yolo] -mask = 1,2,3 -anchors = 10,14, 23,27, 37,58, 81,82, 135,169, 344,319 -classes=80 -num=6 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3.cfg b/cfg/yolov3.cfg deleted file mode 100755 index 946e0154c3..0000000000 --- a/cfg/yolov3.cfg +++ /dev/null @@ -1,788 +0,0 @@ -[net] -# Testing -#batch=1 -#subdivisions=1 -# Training -batch=16 -subdivisions=1 -width=416 -height=416 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-18a320.cfg b/cfg/yolov3s-18a320.cfg deleted file mode 100644 index 1f39f4ef89..0000000000 --- a/cfg/yolov3s-18a320.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=510 -activation=linear - - -[yolo] -mask = 12,13,14,15,16,17 -anchors = 7,8, 11,20, 27,15, 20,36, 50,29, 28,60, 61,61, 99,39, 43,99, 98,91, 66,148, 180,68, 139,135, 104,210, 285,92, 205,173, 186,274, 302,212 -classes=80 -num=18 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=510 -activation=linear - - -[yolo] -mask = 6,7,8,9,10,11 -anchors = 7,8, 11,20, 27,15, 20,36, 50,29, 28,60, 61,61, 99,39, 43,99, 98,91, 66,148, 180,68, 139,135, 104,210, 285,92, 205,173, 186,274, 302,212 -classes=80 -num=18 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=510 -activation=linear - - -[yolo] -mask = 0,1,2,3,4,5 -anchors = 7,8, 11,20, 27,15, 20,36, 50,29, 28,60, 61,61, 99,39, 43,99, 98,91, 66,148, 180,68, 139,135, 104,210, 285,92, 205,173, 186,274, 302,212 -classes=80 -num=18 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-30a320.cfg b/cfg/yolov3s-30a320.cfg deleted file mode 100644 index d5cb7bad22..0000000000 --- a/cfg/yolov3s-30a320.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=850 -activation=linear - - -[yolo] -mask = 20,21,22,23,24,25,26,27,28,29 -anchors = 6,7, 9,18, 17,10, 21,22, 14,33, 36,15, 22,51, 34,34, 59,24, 32,74, 51,49, 90,38, 41,105, 67,72, 144,48, 54,148, 106,79, 81,109, 211,63, 107,147, 81,200, 149,112, 297,73, 152,187, 214,135, 121,264, 220,206, 299,153, 211,291, 309,230 -classes=80 -num=30 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=850 -activation=linear - - -[yolo] -mask = 10,11,12,13,14,15,16,17,18,19 -anchors = 6,7, 9,18, 17,10, 21,22, 14,33, 36,15, 22,51, 34,34, 59,24, 32,74, 51,49, 90,38, 41,105, 67,72, 144,48, 54,148, 106,79, 81,109, 211,63, 107,147, 81,200, 149,112, 297,73, 152,187, 214,135, 121,264, 220,206, 299,153, 211,291, 309,230 -classes=80 -num=30 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=850 -activation=linear - - -[yolo] -mask = 0,1,2,3,4,5,6,7,8,9 -anchors = 6,7, 9,18, 17,10, 21,22, 14,33, 36,15, 22,51, 34,34, 59,24, 32,74, 51,49, 90,38, 41,105, 67,72, 144,48, 54,148, 106,79, 81,109, 211,63, 107,147, 81,200, 149,112, 297,73, 152,187, 214,135, 121,264, 220,206, 299,153, 211,291, 309,230 -classes=80 -num=30 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-3a320.cfg b/cfg/yolov3s-3a320.cfg deleted file mode 100644 index 79897398ae..0000000000 --- a/cfg/yolov3s-3a320.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=85 -activation=linear - - -[yolo] -mask = 2 -anchors = 16,30, 62,45, 156,198 -classes=80 -num=3 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=85 -activation=linear - - -[yolo] -mask = 1 -anchors = 16,30, 62,45, 156,198 -classes=80 -num=3 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=85 -activation=linear - - -[yolo] -mask = 0 -anchors = 16,30, 62,45, 156,198 -classes=80 -num=3 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-9a320.cfg b/cfg/yolov3s-9a320.cfg deleted file mode 100644 index 0200180dd5..0000000000 --- a/cfg/yolov3s-9a320.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 9,11, 25,27, 33,63, 71,43, 62,120, 135,86, 123,199, 257,100, 264,223 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 9,11, 25,27, 33,63, 71,43, 62,120, 135,86, 123,199, 257,100, 264,223 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 9,11, 25,27, 33,63, 71,43, 62,120, 135,86, 123,199, 257,100, 264,223 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-9a416ms.cfg b/cfg/yolov3s-9a416ms.cfg deleted file mode 100644 index 2433e4c4fb..0000000000 --- a/cfg/yolov3s-9a416ms.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 13,13, 24,41, 62,38, 52,96, 135,80, 105,182, 269,141, 201,320, 445,292 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 13,13, 24,41, 62,38, 52,96, 135,80, 105,182, 269,141, 201,320, 445,292 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 13,13, 24,41, 62,38, 52,96, 135,80, 105,182, 269,141, 201,320, 445,292 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-9a512.cfg b/cfg/yolov3s-9a512.cfg deleted file mode 100644 index 25912121b0..0000000000 --- a/cfg/yolov3s-9a512.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 15,17, 39,44, 55,107, 109,65, 101,203, 203,134, 396,154, 209,324, 434,348 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 15,17, 39,44, 55,107, 109,65, 101,203, 203,134, 396,154, 209,324, 434,348 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 15,17, 39,44, 55,107, 109,65, 101,203, 203,134, 396,154, 209,324, 434,348 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s-9a512ms.cfg b/cfg/yolov3s-9a512ms.cfg deleted file mode 100644 index ae44c5979a..0000000000 --- a/cfg/yolov3s-9a512ms.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=leaky - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=leaky - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 15,16, 32,48, 84,50, 63,118, 170,103, 128,225, 334,175, 246,394, 548,359 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 15,16, 32,48, 84,50, 63,118, 170,103, 128,225, 334,175, 246,394, 548,359 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=leaky - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=leaky - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 15,16, 32,48, 84,50, 63,118, 170,103, 128,225, 334,175, 246,394, 548,359 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/cfg/yolov3s.cfg b/cfg/yolov3s.cfg deleted file mode 100644 index 0517b09ebd..0000000000 --- a/cfg/yolov3s.cfg +++ /dev/null @@ -1,821 +0,0 @@ -[net] -# Testing -# batch=1 -# subdivisions=1 -# Training -batch=64 -subdivisions=16 -width=608 -height=608 -channels=3 -momentum=0.9 -decay=0.0005 -angle=0 -saturation = 1.5 -exposure = 1.5 -hue=.1 - -learning_rate=0.001 -burn_in=1000 -max_batches = 500200 -policy=steps -steps=400000,450000 -scales=.1,.1 - -[convolutional] -batch_normalize=1 -filters=32 -size=3 -stride=1 -pad=1 -activation=swish - -# Downsample - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=2 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=32 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=64 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=2 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=64 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=128 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=2 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=2 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -# Downsample - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=2 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -filters=1024 -size=3 -stride=1 -pad=1 -activation=swish - -[shortcut] -from=-3 -activation=linear - -###################### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -### SPP ### -[maxpool] -stride=1 -size=5 - -[route] -layers=-2 - -[maxpool] -stride=1 -size=9 - -[route] -layers=-4 - -[maxpool] -stride=1 -size=13 - -[route] -layers=-1,-3,-5,-6 - -### End SPP ### - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=swish - -[convolutional] -batch_normalize=1 -filters=512 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=1024 -activation=swish - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 6,7,8 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[upsample] -stride=2 - -[route] -layers = -1, 61 - - - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=swish - -[convolutional] -batch_normalize=1 -filters=256 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=512 -activation=swish - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 3,4,5 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 - - - -[route] -layers = -4 - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[upsample] -stride=2 - -[route] -layers = -1, 36 - - - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=swish - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=swish - -[convolutional] -batch_normalize=1 -filters=128 -size=1 -stride=1 -pad=1 -activation=swish - -[convolutional] -batch_normalize=1 -size=3 -stride=1 -pad=1 -filters=256 -activation=swish - -[convolutional] -size=1 -stride=1 -pad=1 -filters=255 -activation=linear - - -[yolo] -mask = 0,1,2 -anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 -classes=80 -num=9 -jitter=.3 -ignore_thresh = .7 -truth_thresh = 1 -random=1 diff --git a/classify/predict.py b/classify/predict.py new file mode 100644 index 0000000000..9e191933e9 --- /dev/null +++ b/classify/predict.py @@ -0,0 +1,241 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Run YOLOv3 classification inference on images, videos, directories, globs, YouTube, webcam, streams, etc. + +Usage - sources: + $ python classify/predict.py --weights yolov5s-cls.pt --source 0 # webcam + img.jpg # image + vid.mp4 # video + screen # screenshot + path/ # directory + list.txt # list of images + list.streams # list of streams + 'path/*.jpg' # glob + 'https://youtu.be/LNwODJXcvt4' # YouTube + 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream + +Usage - formats: + $ python classify/predict.py --weights yolov5s-cls.pt # PyTorch + yolov5s-cls.torchscript # TorchScript + yolov5s-cls.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s-cls_openvino_model # OpenVINO + yolov5s-cls.engine # TensorRT + yolov5s-cls.mlmodel # CoreML (macOS-only) + yolov5s-cls_saved_model # TensorFlow SavedModel + yolov5s-cls.pb # TensorFlow GraphDef + yolov5s-cls.tflite # TensorFlow Lite + yolov5s-cls_edgetpu.tflite # TensorFlow Edge TPU + yolov5s-cls_paddle_model # PaddlePaddle +""" + +import argparse +import os +import platform +import sys +from pathlib import Path + +import torch +import torch.nn.functional as F + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from ultralytics.utils.plotting import Annotator + +from models.common import DetectMultiBackend +from utils.augmentations import classify_transforms +from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams +from utils.general import ( + LOGGER, + Profile, + check_file, + check_img_size, + check_imshow, + check_requirements, + colorstr, + cv2, + increment_path, + print_args, + strip_optimizer, +) +from utils.torch_utils import select_device, smart_inference_mode + + +@smart_inference_mode() +def run( + weights=ROOT / "yolov5s-cls.pt", # model.pt path(s) + source=ROOT / "data/images", # file/dir/URL/glob/screen/0(webcam) + data=ROOT / "data/coco128.yaml", # dataset.yaml path + imgsz=(224, 224), # inference size (height, width) + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + view_img=False, # show results + save_txt=False, # save results to *.txt + nosave=False, # do not save images/videos + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project=ROOT / "runs/predict-cls", # save results to project/name + name="exp", # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + vid_stride=1, # video frame-rate stride +): + """Performs YOLOv3 classification inference on various input sources and saves or displays results.""" + source = str(source) + save_img = not nosave and not source.endswith(".txt") # save inference images + is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS) + is_url = source.lower().startswith(("rtsp://", "rtmp://", "http://", "https://")) + webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file) + screenshot = source.lower().startswith("screen") + if is_url and is_file: + source = check_file(source) # download + + # Directories + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + (save_dir / "labels" if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load model + device = select_device(device) + model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half) + stride, names, pt = model.stride, model.names, model.pt + imgsz = check_img_size(imgsz, s=stride) # check image size + + # Dataloader + bs = 1 # batch_size + if webcam: + view_img = check_imshow(warn=True) + dataset = LoadStreams(source, img_size=imgsz, transforms=classify_transforms(imgsz[0]), vid_stride=vid_stride) + bs = len(dataset) + elif screenshot: + dataset = LoadScreenshots(source, img_size=imgsz, stride=stride, auto=pt) + else: + dataset = LoadImages(source, img_size=imgsz, transforms=classify_transforms(imgsz[0]), vid_stride=vid_stride) + vid_path, vid_writer = [None] * bs, [None] * bs + + # Run inference + model.warmup(imgsz=(1 if pt else bs, 3, *imgsz)) # warmup + seen, windows, dt = 0, [], (Profile(), Profile(), Profile()) + for path, im, im0s, vid_cap, s in dataset: + with dt[0]: + im = torch.Tensor(im).to(model.device) + im = im.half() if model.fp16 else im.float() # uint8 to fp16/32 + if len(im.shape) == 3: + im = im[None] # expand for batch dim + + # Inference + with dt[1]: + results = model(im) + + # Post-process + with dt[2]: + pred = F.softmax(results, dim=1) # probabilities + + # Process predictions + for i, prob in enumerate(pred): # per image + seen += 1 + if webcam: # batch_size >= 1 + p, im0, frame = path[i], im0s[i].copy(), dataset.count + s += f"{i}: " + else: + p, im0, frame = path, im0s.copy(), getattr(dataset, "frame", 0) + + p = Path(p) # to Path + save_path = str(save_dir / p.name) # im.jpg + txt_path = str(save_dir / "labels" / p.stem) + ("" if dataset.mode == "image" else f"_{frame}") # im.txt + + s += "{:g}x{:g} ".format(*im.shape[2:]) # print string + annotator = Annotator(im0, example=str(names), pil=True) + + # Print results + top5i = prob.argsort(0, descending=True)[:5].tolist() # top 5 indices + s += f"{', '.join(f'{names[j]} {prob[j]:.2f}' for j in top5i)}, " + + # Write results + text = "\n".join(f"{prob[j]:.2f} {names[j]}" for j in top5i) + if save_img or view_img: # Add bbox to image + annotator.text([32, 32], text, txt_color=(255, 255, 255)) + if save_txt: # Write to file + with open(f"{txt_path}.txt", "a") as f: + f.write(text + "\n") + + # Stream results + im0 = annotator.result() + if view_img: + if platform.system() == "Linux" and p not in windows: + windows.append(p) + cv2.namedWindow(str(p), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux) + cv2.resizeWindow(str(p), im0.shape[1], im0.shape[0]) + cv2.imshow(str(p), im0) + cv2.waitKey(1) # 1 millisecond + + # Save results (image with detections) + if save_img: + if dataset.mode == "image": + cv2.imwrite(save_path, im0) + else: # 'video' or 'stream' + if vid_path[i] != save_path: # new video + vid_path[i] = save_path + if isinstance(vid_writer[i], cv2.VideoWriter): + vid_writer[i].release() # release previous video writer + if vid_cap: # video + fps = vid_cap.get(cv2.CAP_PROP_FPS) + w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + else: # stream + fps, w, h = 30, im0.shape[1], im0.shape[0] + save_path = str(Path(save_path).with_suffix(".mp4")) # force *.mp4 suffix on results videos + vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) + vid_writer[i].write(im0) + + # Print time (inference-only) + LOGGER.info(f"{s}{dt[1].dt * 1e3:.1f}ms") + + # Print results + t = tuple(x.t / seen * 1e3 for x in dt) # speeds per image + LOGGER.info(f"Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {(1, 3, *imgsz)}" % t) + if save_txt or save_img: + s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else "" + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}") + if update: + strip_optimizer(weights[0]) # update model (to fix SourceChangeWarning) + + +def parse_opt(): + """Parses command line arguments for model inference settings, returns a Namespace of options.""" + parser = argparse.ArgumentParser() + parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov5s-cls.pt", help="model path(s)") + parser.add_argument("--source", type=str, default=ROOT / "data/images", help="file/dir/URL/glob/screen/0(webcam)") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="(optional) dataset.yaml path") + parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[224], help="inference size h,w") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--view-img", action="store_true", help="show results") + parser.add_argument("--save-txt", action="store_true", help="save results to *.txt") + parser.add_argument("--nosave", action="store_true", help="do not save images/videos") + parser.add_argument("--augment", action="store_true", help="augmented inference") + parser.add_argument("--visualize", action="store_true", help="visualize features") + parser.add_argument("--update", action="store_true", help="update all models") + parser.add_argument("--project", default=ROOT / "runs/predict-cls", help="save results to project/name") + parser.add_argument("--name", default="exp", help="save results to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") + parser.add_argument("--vid-stride", type=int, default=1, help="video frame-rate stride") + opt = parser.parse_args() + opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand + print_args(vars(opt)) + return opt + + +def main(opt): + """Entry point for running the model; checks requirements and calls `run` with options parsed from CLI.""" + check_requirements(ROOT / "requirements.txt", exclude=("tensorboard", "thop")) + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/classify/train.py b/classify/train.py new file mode 100644 index 0000000000..9eef8e0715 --- /dev/null +++ b/classify/train.py @@ -0,0 +1,378 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Train a YOLOv3 classifier model on a classification dataset. + +Usage - Single-GPU training: + $ python classify/train.py --model yolov5s-cls.pt --data imagenette160 --epochs 5 --img 224 + +Usage - Multi-GPU DDP training: + $ python -m torch.distributed.run --nproc_per_node 4 --master_port 2022 classify/train.py --model yolov5s-cls.pt --data imagenet --epochs 5 --img 224 --device 0,1,2,3 + +Datasets: --data mnist, fashion-mnist, cifar10, cifar100, imagenette, imagewoof, imagenet, or 'path/to/data' +YOLOv3-cls models: --model yolov5n-cls.pt, yolov5s-cls.pt, yolov5m-cls.pt, yolov5l-cls.pt, yolov5x-cls.pt +Torchvision models: --model resnet50, efficientnet_b0, etc. See https://pytorch.org/vision/stable/models.html +""" + +import argparse +import os +import subprocess +import sys +import time +from copy import deepcopy +from datetime import datetime +from pathlib import Path + +import torch +import torch.distributed as dist +import torch.hub as hub +import torch.optim.lr_scheduler as lr_scheduler +import torchvision +from torch.cuda import amp +from tqdm import tqdm + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from classify import val as validate +from models.experimental import attempt_load +from models.yolo import ClassificationModel, DetectionModel +from utils.dataloaders import create_classification_dataloader +from utils.general import ( + DATASETS_DIR, + LOGGER, + TQDM_BAR_FORMAT, + WorkingDirectory, + check_git_info, + check_git_status, + check_requirements, + colorstr, + download, + increment_path, + init_seeds, + print_args, + yaml_save, +) +from utils.loggers import GenericLogger +from utils.plots import imshow_cls +from utils.torch_utils import ( + ModelEMA, + de_parallel, + model_info, + reshape_classifier_output, + select_device, + smart_DDP, + smart_optimizer, + smartCrossEntropyLoss, + torch_distributed_zero_first, +) + +LOCAL_RANK = int(os.getenv("LOCAL_RANK", -1)) # https://pytorch.org/docs/stable/elastic/run.html +RANK = int(os.getenv("RANK", -1)) +WORLD_SIZE = int(os.getenv("WORLD_SIZE", 1)) +GIT_INFO = check_git_info() + + +def train(opt, device): + """Trains a model on a given dataset using specified options and device, handling data loading, model optimization, + and logging. + """ + init_seeds(opt.seed + 1 + RANK, deterministic=True) + save_dir, data, bs, epochs, nw, imgsz, pretrained = ( + opt.save_dir, + Path(opt.data), + opt.batch_size, + opt.epochs, + min(os.cpu_count() - 1, opt.workers), + opt.imgsz, + str(opt.pretrained).lower() == "true", + ) + cuda = device.type != "cpu" + + # Directories + wdir = save_dir / "weights" + wdir.mkdir(parents=True, exist_ok=True) # make dir + last, best = wdir / "last.pt", wdir / "best.pt" + + # Save run settings + yaml_save(save_dir / "opt.yaml", vars(opt)) + + # Logger + logger = GenericLogger(opt=opt, console_logger=LOGGER) if RANK in {-1, 0} else None + + # Download Dataset + with torch_distributed_zero_first(LOCAL_RANK), WorkingDirectory(ROOT): + data_dir = data if data.is_dir() else (DATASETS_DIR / data) + if not data_dir.is_dir(): + LOGGER.info(f"\nDataset not found ⚠️, missing path {data_dir}, attempting download...") + t = time.time() + if str(data) == "imagenet": + subprocess.run(["bash", str(ROOT / "data/scripts/get_imagenet.sh")], shell=True, check=True) + else: + url = f"https://github.com/ultralytics/assets/releases/download/v0.0.0/{data}.zip" + download(url, dir=data_dir.parent) + s = f"Dataset download success ✅ ({time.time() - t:.1f}s), saved to {colorstr('bold', data_dir)}\n" + LOGGER.info(s) + + # Dataloaders + nc = len([x for x in (data_dir / "train").glob("*") if x.is_dir()]) # number of classes + trainloader = create_classification_dataloader( + path=data_dir / "train", + imgsz=imgsz, + batch_size=bs // WORLD_SIZE, + augment=True, + cache=opt.cache, + rank=LOCAL_RANK, + workers=nw, + ) + + test_dir = data_dir / "test" if (data_dir / "test").exists() else data_dir / "val" # data/test or data/val + if RANK in {-1, 0}: + testloader = create_classification_dataloader( + path=test_dir, + imgsz=imgsz, + batch_size=bs // WORLD_SIZE * 2, + augment=False, + cache=opt.cache, + rank=-1, + workers=nw, + ) + + # Model + with torch_distributed_zero_first(LOCAL_RANK), WorkingDirectory(ROOT): + if Path(opt.model).is_file() or opt.model.endswith(".pt"): + model = attempt_load(opt.model, device="cpu", fuse=False) + elif opt.model in torchvision.models.__dict__: # TorchVision models i.e. resnet50, efficientnet_b0 + model = torchvision.models.__dict__[opt.model](weights="IMAGENET1K_V1" if pretrained else None) + else: + m = hub.list("ultralytics/yolov5") # + hub.list('pytorch/vision') # models + raise ModuleNotFoundError(f"--model {opt.model} not found. Available models are: \n" + "\n".join(m)) + if isinstance(model, DetectionModel): + LOGGER.warning("WARNING ⚠️ pass YOLOv3 classifier model with '-cls' suffix, i.e. '--model yolov5s-cls.pt'") + model = ClassificationModel(model=model, nc=nc, cutoff=opt.cutoff or 10) # convert to classification model + reshape_classifier_output(model, nc) # update class count + for m in model.modules(): + if not pretrained and hasattr(m, "reset_parameters"): + m.reset_parameters() + if isinstance(m, torch.nn.Dropout) and opt.dropout is not None: + m.p = opt.dropout # set dropout + for p in model.parameters(): + p.requires_grad = True # for training + model = model.to(device) + + # Info + if RANK in {-1, 0}: + model.names = trainloader.dataset.classes # attach class names + model.transforms = testloader.dataset.torch_transforms # attach inference transforms + model_info(model) + if opt.verbose: + LOGGER.info(model) + images, labels = next(iter(trainloader)) + file = imshow_cls(images[:25], labels[:25], names=model.names, f=save_dir / "train_images.jpg") + logger.log_images(file, name="Train Examples") + logger.log_graph(model, imgsz) # log model + + # Optimizer + optimizer = smart_optimizer(model, opt.optimizer, opt.lr0, momentum=0.9, decay=opt.decay) + + # Scheduler + lrf = 0.01 # final lr (fraction of lr0) + + # lf = lambda x: ((1 + math.cos(x * math.pi / epochs)) / 2) * (1 - lrf) + lrf # cosine + def lf(x): + """Linear learning rate scheduler function, scaling learning rate from initial value to `lrf` over `epochs`.""" + return (1 - x / epochs) * (1 - lrf) + lrf # linear + + scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) + # scheduler = lr_scheduler.OneCycleLR(optimizer, max_lr=lr0, total_steps=epochs, pct_start=0.1, + # final_div_factor=1 / 25 / lrf) + + # EMA + ema = ModelEMA(model) if RANK in {-1, 0} else None + + # DDP mode + if cuda and RANK != -1: + model = smart_DDP(model) + + # Train + t0 = time.time() + criterion = smartCrossEntropyLoss(label_smoothing=opt.label_smoothing) # loss function + best_fitness = 0.0 + scaler = amp.GradScaler(enabled=cuda) + val = test_dir.stem # 'val' or 'test' + LOGGER.info( + f"Image sizes {imgsz} train, {imgsz} test\n" + f"Using {nw * WORLD_SIZE} dataloader workers\n" + f"Logging results to {colorstr('bold', save_dir)}\n" + f"Starting {opt.model} training on {data} dataset with {nc} classes for {epochs} epochs...\n\n" + f"{'Epoch':>10}{'GPU_mem':>10}{'train_loss':>12}{f'{val}_loss':>12}{'top1_acc':>12}{'top5_acc':>12}" + ) + for epoch in range(epochs): # loop over the dataset multiple times + tloss, vloss, fitness = 0.0, 0.0, 0.0 # train loss, val loss, fitness + model.train() + if RANK != -1: + trainloader.sampler.set_epoch(epoch) + pbar = enumerate(trainloader) + if RANK in {-1, 0}: + pbar = tqdm(enumerate(trainloader), total=len(trainloader), bar_format=TQDM_BAR_FORMAT) + for i, (images, labels) in pbar: # progress bar + images, labels = images.to(device, non_blocking=True), labels.to(device) + + # Forward + with amp.autocast(enabled=cuda): # stability issues when enabled + loss = criterion(model(images), labels) + + # Backward + scaler.scale(loss).backward() + + # Optimize + scaler.unscale_(optimizer) # unscale gradients + torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=10.0) # clip gradients + scaler.step(optimizer) + scaler.update() + optimizer.zero_grad() + if ema: + ema.update(model) + + if RANK in {-1, 0}: + # Print + tloss = (tloss * i + loss.item()) / (i + 1) # update mean losses + mem = "%.3gG" % (torch.cuda.memory_reserved() / 1e9 if torch.cuda.is_available() else 0) # (GB) + pbar.desc = f"{f'{epoch + 1}/{epochs}':>10}{mem:>10}{tloss:>12.3g}" + " " * 36 + + # Test + if i == len(pbar) - 1: # last batch + top1, top5, vloss = validate.run( + model=ema.ema, dataloader=testloader, criterion=criterion, pbar=pbar + ) # test accuracy, loss + fitness = top1 # define fitness as top1 accuracy + + # Scheduler + scheduler.step() + + # Log metrics + if RANK in {-1, 0}: + # Best fitness + if fitness > best_fitness: + best_fitness = fitness + + # Log + metrics = { + "train/loss": tloss, + f"{val}/loss": vloss, + "metrics/accuracy_top1": top1, + "metrics/accuracy_top5": top5, + "lr/0": optimizer.param_groups[0]["lr"], + } # learning rate + logger.log_metrics(metrics, epoch) + + # Save model + final_epoch = epoch + 1 == epochs + if (not opt.nosave) or final_epoch: + ckpt = { + "epoch": epoch, + "best_fitness": best_fitness, + "model": deepcopy(ema.ema).half(), # deepcopy(de_parallel(model)).half(), + "ema": None, # deepcopy(ema.ema).half(), + "updates": ema.updates, + "optimizer": None, # optimizer.state_dict(), + "opt": vars(opt), + "git": GIT_INFO, # {remote, branch, commit} if a git repo + "date": datetime.now().isoformat(), + } + + # Save last, best and delete + torch.save(ckpt, last) + if best_fitness == fitness: + torch.save(ckpt, best) + del ckpt + + # Train complete + if RANK in {-1, 0} and final_epoch: + LOGGER.info( + f"\nTraining complete ({(time.time() - t0) / 3600:.3f} hours)" + f"\nResults saved to {colorstr('bold', save_dir)}" + f"\nPredict: python classify/predict.py --weights {best} --source im.jpg" + f"\nValidate: python classify/val.py --weights {best} --data {data_dir}" + f"\nExport: python export.py --weights {best} --include onnx" + f"\nPyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', '{best}')" + f"\nVisualize: https://netron.app\n" + ) + + # Plot examples + images, labels = (x[:25] for x in next(iter(testloader))) # first 25 images and labels + pred = torch.max(ema.ema(images.to(device)), 1)[1] + file = imshow_cls(images, labels, pred, de_parallel(model).names, verbose=False, f=save_dir / "test_images.jpg") + + # Log results + meta = {"epochs": epochs, "top1_acc": best_fitness, "date": datetime.now().isoformat()} + logger.log_images(file, name="Test Examples (true-predicted)", epoch=epoch) + logger.log_model(best, epochs, metadata=meta) + + +def parse_opt(known=False): + """Parses command line arguments for model configuration and training options.""" + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=str, default="yolov5s-cls.pt", help="initial weights path") + parser.add_argument("--data", type=str, default="imagenette160", help="cifar10, cifar100, mnist, imagenet, ...") + parser.add_argument("--epochs", type=int, default=10, help="total training epochs") + parser.add_argument("--batch-size", type=int, default=64, help="total batch size for all GPUs") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=224, help="train, val image size (pixels)") + parser.add_argument("--nosave", action="store_true", help="only save final checkpoint") + parser.add_argument("--cache", type=str, nargs="?", const="ram", help='--cache images in "ram" (default) or "disk"') + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--project", default=ROOT / "runs/train-cls", help="save to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--pretrained", nargs="?", const=True, default=True, help="start from i.e. --pretrained False") + parser.add_argument("--optimizer", choices=["SGD", "Adam", "AdamW", "RMSProp"], default="Adam", help="optimizer") + parser.add_argument("--lr0", type=float, default=0.001, help="initial learning rate") + parser.add_argument("--decay", type=float, default=5e-5, help="weight decay") + parser.add_argument("--label-smoothing", type=float, default=0.1, help="Label smoothing epsilon") + parser.add_argument("--cutoff", type=int, default=None, help="Model layer cutoff index for Classify() head") + parser.add_argument("--dropout", type=float, default=None, help="Dropout (fraction)") + parser.add_argument("--verbose", action="store_true", help="Verbose mode") + parser.add_argument("--seed", type=int, default=0, help="Global training seed") + parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify") + return parser.parse_known_args()[0] if known else parser.parse_args() + + +def main(opt): + """Initializes training environment, checks, DDP mode setup, and starts training with given options.""" + if RANK in {-1, 0}: + print_args(vars(opt)) + check_git_status() + check_requirements(ROOT / "requirements.txt") + + # DDP mode + device = select_device(opt.device, batch_size=opt.batch_size) + if LOCAL_RANK != -1: + assert opt.batch_size != -1, "AutoBatch is coming soon for classification, please pass a valid --batch-size" + assert opt.batch_size % WORLD_SIZE == 0, f"--batch-size {opt.batch_size} must be multiple of WORLD_SIZE" + assert torch.cuda.device_count() > LOCAL_RANK, "insufficient CUDA devices for DDP command" + torch.cuda.set_device(LOCAL_RANK) + device = torch.device("cuda", LOCAL_RANK) + dist.init_process_group(backend="nccl" if dist.is_nccl_available() else "gloo") + + # Parameters + opt.save_dir = increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok) # increment run + + # Train + train(opt, device) + + +def run(**kwargs): + """Executes YOLOv5 model training with dynamic options, e.g., `run(data='mnist', imgsz=320, model='yolov5m')`.""" + opt = parse_opt(True) + for k, v in kwargs.items(): + setattr(opt, k, v) + main(opt) + return opt + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/classify/tutorial.ipynb b/classify/tutorial.ipynb new file mode 100644 index 0000000000..20a6e25925 --- /dev/null +++ b/classify/tutorial.ipynb @@ -0,0 +1,1499 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "t6MPjfT5NrKQ" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + "\n", + " [中文](https://docs.ultralytics.com/zh/) | [한국어](https://docs.ultralytics.com/ko/) | [日本語](https://docs.ultralytics.com/ja/) | [Русский](https://docs.ultralytics.com/ru/) | [Deutsch](https://docs.ultralytics.com/de/) | [Français](https://docs.ultralytics.com/fr/) | [Español](https://docs.ultralytics.com/es/) | [Português](https://docs.ultralytics.com/pt/) | [Türkçe](https://docs.ultralytics.com/tr/) | [Tiếng Việt](https://docs.ultralytics.com/vi/) | [العربية](https://docs.ultralytics.com/ar/)\n", + "\n", + " \"Ultralytics\n", + " \"Run\n", + " \"Open\n", + " \"Open\n", + "\n", + " \"Discord\"\n", + " \"Ultralytics\n", + " \"Ultralytics\n", + "
\n", + "\n", + "This **Ultralytics YOLOv5 Classification Notebook** is the easiest way to get started with [YOLO models](https://www.ultralytics.com/yolo)—no installation needed. Built by [Ultralytics](https://www.ultralytics.com/), the creators of YOLO, this notebook walks you through running **state-of-the-art** models directly in your browser.\n", + "\n", + "Ultralytics models are constantly updated for performance and flexibility. They're **fast**, **accurate**, and **easy to use**, and they excel at [object detection](https://docs.ultralytics.com/tasks/detect/), [tracking](https://docs.ultralytics.com/modes/track/), [instance segmentation](https://docs.ultralytics.com/tasks/segment/), [image classification](https://docs.ultralytics.com/tasks/classify/), and [pose estimation](https://docs.ultralytics.com/tasks/pose/).\n", + "\n", + "Find detailed documentation in the [Ultralytics Docs](https://docs.ultralytics.com/). Get support via [GitHub Issues](https://github.com/ultralytics/ultralytics/issues/new/choose). Join discussions on [Discord](https://discord.com/invite/ultralytics), [Reddit](https://www.reddit.com/r/ultralytics/), and the [Ultralytics Community Forums](https://community.ultralytics.com/)!\n", + "\n", + "Request an Enterprise License for commercial use at [Ultralytics Licensing](https://www.ultralytics.com/license).\n", + "\n", + "
\n", + "
\n", + " \n", + " \"Ultralytics\n", + " \n", + "\n", + "

\n", + " Watch: How to Train\n", + " Ultralytics\n", + " YOLO11 Model on Custom Dataset using Google Colab Notebook 🚀\n", + "

\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7mGmQbAO5pQb" + }, + "source": [ + "# Setup\n", + "\n", + "Clone GitHub [repository](https://github.com/ultralytics/yolov5), install [dependencies](https://github.com/ultralytics/yolov5/blob/master/requirements.txt) and check PyTorch and GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wbvMlHd_QwMG", + "outputId": "0806e375-610d-4ec0-c867-763dbb518279" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "YOLOv5 🚀 v7.0-3-g61ebf5e Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setup complete ✅ (2 CPUs, 12.7 GB RAM, 22.6/78.2 GB disk)\n" + ] + } + ], + "source": [ + "!git clone https://github.com/ultralytics/yolov5 # clone\n", + "%cd yolov5\n", + "%pip install -qr requirements.txt # install\n", + "\n", + "import torch\n", + "\n", + "import utils\n", + "\n", + "display = utils.notebook_init() # checks" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4JnkELT0cIJg" + }, + "source": [ + "# 1. Predict\n", + "\n", + "`classify/predict.py` runs YOLOv5 Classification inference on a variety of sources, downloading models automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases), and saving results to `runs/predict-cls`. Example inference sources are:\n", + "\n", + "```shell\n", + "python classify/predict.py --source 0 # webcam\n", + " img.jpg # image \n", + " vid.mp4 # video\n", + " screen # screenshot\n", + " path/ # directory\n", + " 'path/*.jpg' # glob\n", + " 'https://youtu.be/LNwODJXcvt4' # YouTube\n", + " 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zR9ZbuQCH7FX", + "outputId": "50504ef7-aa3e-4281-a4e3-d0c7df3c0ffe" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001B[34m\u001B[1mclassify/predict: \u001B[0mweights=['yolov5s-cls.pt'], source=data/images, data=data/coco128.yaml, imgsz=[224, 224], device=, view_img=False, save_txt=False, nosave=False, augment=False, visualize=False, update=False, project=runs/predict-cls, name=exp, exist_ok=False, half=False, dnn=False, vid_stride=1\n", + "YOLOv5 🚀 v7.0-3-g61ebf5e Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "Downloading https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s-cls.pt to yolov5s-cls.pt...\n", + "100% 10.5M/10.5M [00:00<00:00, 12.3MB/s]\n", + "\n", + "Fusing layers... \n", + "Model summary: 117 layers, 5447688 parameters, 0 gradients, 11.4 GFLOPs\n", + "image 1/2 /content/yolov5/data/images/bus.jpg: 224x224 minibus 0.39, police van 0.24, amphibious vehicle 0.05, recreational vehicle 0.04, trolleybus 0.03, 3.9ms\n", + "image 2/2 /content/yolov5/data/images/zidane.jpg: 224x224 suit 0.38, bow tie 0.19, bridegroom 0.18, rugby ball 0.04, stage 0.02, 4.6ms\n", + "Speed: 0.3ms pre-process, 4.3ms inference, 1.5ms NMS per image at shape (1, 3, 224, 224)\n", + "Results saved to \u001B[1mruns/predict-cls/exp\u001B[0m\n" + ] + } + ], + "source": [ + "!python classify/predict.py --weights yolov5s-cls.pt --img 224 --source data/images\n", + "# display.Image(filename='runs/predict-cls/exp/zidane.jpg', width=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hkAzDWJ7cWTr" + }, + "source": [ + "        \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0eq1SMWl6Sfn" + }, + "source": [ + "# 2. Validate\n", + "Validate a model's accuracy on the [Imagenet](https://image-net.org/) dataset's `val` or `test` splits. Models are downloaded automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases). To show results by class use the `--verbose` flag." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WQPtK1QYVaD_", + "outputId": "20fc0630-141e-4a90-ea06-342cbd7ce496" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2022-11-22 19:53:40-- https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar\n", + "Resolving image-net.org (image-net.org)... 171.64.68.16\n", + "Connecting to image-net.org (image-net.org)|171.64.68.16|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 6744924160 (6.3G) [application/x-tar]\n", + "Saving to: ‘ILSVRC2012_img_val.tar’\n", + "\n", + "ILSVRC2012_img_val. 100%[===================>] 6.28G 16.1MB/s in 10m 52s \n", + "\n", + "2022-11-22 20:04:32 (9.87 MB/s) - ‘ILSVRC2012_img_val.tar’ saved [6744924160/6744924160]\n", + "\n" + ] + } + ], + "source": [ + "# Download Imagenet val (6.3G, 50000 images)\n", + "!bash data/scripts/get_imagenet.sh --val" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "X58w8JLpMnjH", + "outputId": "41843132-98e2-4c25-d474-4cd7b246fb8e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001B[34m\u001B[1mclassify/val: \u001B[0mdata=../datasets/imagenet, weights=['yolov5s-cls.pt'], batch_size=128, imgsz=224, device=, workers=8, verbose=True, project=runs/val-cls, name=exp, exist_ok=False, half=True, dnn=False\n", + "YOLOv5 🚀 v7.0-3-g61ebf5e Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "Fusing layers... \n", + "Model summary: 117 layers, 5447688 parameters, 0 gradients, 11.4 GFLOPs\n", + "validating: 100% 391/391 [04:57<00:00, 1.31it/s]\n", + " Class Images top1_acc top5_acc\n", + " all 50000 0.715 0.902\n", + " tench 50 0.94 0.98\n", + " goldfish 50 0.88 0.92\n", + " great white shark 50 0.78 0.96\n", + " tiger shark 50 0.68 0.96\n", + " hammerhead shark 50 0.82 0.92\n", + " electric ray 50 0.76 0.9\n", + " stingray 50 0.7 0.9\n", + " cock 50 0.78 0.92\n", + " hen 50 0.84 0.96\n", + " ostrich 50 0.98 1\n", + " brambling 50 0.9 0.96\n", + " goldfinch 50 0.92 0.98\n", + " house finch 50 0.88 0.96\n", + " junco 50 0.94 0.98\n", + " indigo bunting 50 0.86 0.88\n", + " American robin 50 0.9 0.96\n", + " bulbul 50 0.84 0.96\n", + " jay 50 0.9 0.96\n", + " magpie 50 0.84 0.96\n", + " chickadee 50 0.9 1\n", + " American dipper 50 0.82 0.92\n", + " kite 50 0.76 0.94\n", + " bald eagle 50 0.92 1\n", + " vulture 50 0.96 1\n", + " great grey owl 50 0.94 0.98\n", + " fire salamander 50 0.96 0.98\n", + " smooth newt 50 0.58 0.94\n", + " newt 50 0.74 0.9\n", + " spotted salamander 50 0.86 0.94\n", + " axolotl 50 0.86 0.96\n", + " American bullfrog 50 0.78 0.92\n", + " tree frog 50 0.84 0.96\n", + " tailed frog 50 0.48 0.8\n", + " loggerhead sea turtle 50 0.68 0.94\n", + " leatherback sea turtle 50 0.5 0.8\n", + " mud turtle 50 0.64 0.84\n", + " terrapin 50 0.52 0.98\n", + " box turtle 50 0.84 0.98\n", + " banded gecko 50 0.7 0.88\n", + " green iguana 50 0.76 0.94\n", + " Carolina anole 50 0.58 0.96\n", + "desert grassland whiptail lizard 50 0.82 0.94\n", + " agama 50 0.74 0.92\n", + " frilled-necked lizard 50 0.84 0.86\n", + " alligator lizard 50 0.58 0.78\n", + " Gila monster 50 0.72 0.8\n", + " European green lizard 50 0.42 0.9\n", + " chameleon 50 0.76 0.84\n", + " Komodo dragon 50 0.86 0.96\n", + " Nile crocodile 50 0.7 0.84\n", + " American alligator 50 0.76 0.96\n", + " triceratops 50 0.9 0.94\n", + " worm snake 50 0.76 0.88\n", + " ring-necked snake 50 0.8 0.92\n", + " eastern hog-nosed snake 50 0.58 0.88\n", + " smooth green snake 50 0.6 0.94\n", + " kingsnake 50 0.82 0.9\n", + " garter snake 50 0.88 0.94\n", + " water snake 50 0.7 0.94\n", + " vine snake 50 0.66 0.76\n", + " night snake 50 0.34 0.82\n", + " boa constrictor 50 0.8 0.96\n", + " African rock python 50 0.48 0.76\n", + " Indian cobra 50 0.82 0.94\n", + " green mamba 50 0.54 0.86\n", + " sea snake 50 0.62 0.9\n", + " Saharan horned viper 50 0.56 0.86\n", + "eastern diamondback rattlesnake 50 0.6 0.86\n", + " sidewinder 50 0.28 0.86\n", + " trilobite 50 0.98 0.98\n", + " harvestman 50 0.86 0.94\n", + " scorpion 50 0.86 0.94\n", + " yellow garden spider 50 0.92 0.96\n", + " barn spider 50 0.38 0.98\n", + " European garden spider 50 0.62 0.98\n", + " southern black widow 50 0.88 0.94\n", + " tarantula 50 0.94 1\n", + " wolf spider 50 0.82 0.92\n", + " tick 50 0.74 0.84\n", + " centipede 50 0.68 0.82\n", + " black grouse 50 0.88 0.98\n", + " ptarmigan 50 0.78 0.94\n", + " ruffed grouse 50 0.88 1\n", + " prairie grouse 50 0.92 1\n", + " peacock 50 0.88 0.9\n", + " quail 50 0.9 0.94\n", + " partridge 50 0.74 0.96\n", + " grey parrot 50 0.9 0.96\n", + " macaw 50 0.88 0.98\n", + "sulphur-crested cockatoo 50 0.86 0.92\n", + " lorikeet 50 0.96 1\n", + " coucal 50 0.82 0.88\n", + " bee eater 50 0.96 0.98\n", + " hornbill 50 0.9 0.96\n", + " hummingbird 50 0.88 0.96\n", + " jacamar 50 0.92 0.94\n", + " toucan 50 0.84 0.94\n", + " duck 50 0.76 0.94\n", + " red-breasted merganser 50 0.86 0.96\n", + " goose 50 0.74 0.96\n", + " black swan 50 0.94 0.98\n", + " tusker 50 0.54 0.92\n", + " echidna 50 0.98 1\n", + " platypus 50 0.72 0.84\n", + " wallaby 50 0.78 0.88\n", + " koala 50 0.84 0.92\n", + " wombat 50 0.78 0.84\n", + " jellyfish 50 0.88 0.96\n", + " sea anemone 50 0.72 0.9\n", + " brain coral 50 0.88 0.96\n", + " flatworm 50 0.8 0.98\n", + " nematode 50 0.86 0.9\n", + " conch 50 0.74 0.88\n", + " snail 50 0.78 0.88\n", + " slug 50 0.74 0.82\n", + " sea slug 50 0.88 0.98\n", + " chiton 50 0.88 0.98\n", + " chambered nautilus 50 0.88 0.92\n", + " Dungeness crab 50 0.78 0.94\n", + " rock crab 50 0.68 0.86\n", + " fiddler crab 50 0.64 0.86\n", + " red king crab 50 0.76 0.96\n", + " American lobster 50 0.78 0.96\n", + " spiny lobster 50 0.74 0.88\n", + " crayfish 50 0.56 0.86\n", + " hermit crab 50 0.78 0.96\n", + " isopod 50 0.66 0.78\n", + " white stork 50 0.88 0.96\n", + " black stork 50 0.84 0.98\n", + " spoonbill 50 0.96 1\n", + " flamingo 50 0.94 1\n", + " little blue heron 50 0.92 0.98\n", + " great egret 50 0.9 0.96\n", + " bittern 50 0.86 0.94\n", + " crane (bird) 50 0.62 0.9\n", + " limpkin 50 0.98 1\n", + " common gallinule 50 0.92 0.96\n", + " American coot 50 0.9 0.98\n", + " bustard 50 0.92 0.96\n", + " ruddy turnstone 50 0.94 1\n", + " dunlin 50 0.86 0.94\n", + " common redshank 50 0.9 0.96\n", + " dowitcher 50 0.84 0.96\n", + " oystercatcher 50 0.86 0.94\n", + " pelican 50 0.92 0.96\n", + " king penguin 50 0.88 0.96\n", + " albatross 50 0.9 1\n", + " grey whale 50 0.84 0.92\n", + " killer whale 50 0.92 1\n", + " dugong 50 0.84 0.96\n", + " sea lion 50 0.82 0.92\n", + " Chihuahua 50 0.66 0.84\n", + " Japanese Chin 50 0.72 0.98\n", + " Maltese 50 0.76 0.94\n", + " Pekingese 50 0.84 0.94\n", + " Shih Tzu 50 0.74 0.96\n", + " King Charles Spaniel 50 0.88 0.98\n", + " Papillon 50 0.86 0.94\n", + " toy terrier 50 0.48 0.94\n", + " Rhodesian Ridgeback 50 0.76 0.98\n", + " Afghan Hound 50 0.84 1\n", + " Basset Hound 50 0.8 0.92\n", + " Beagle 50 0.82 0.96\n", + " Bloodhound 50 0.48 0.72\n", + " Bluetick Coonhound 50 0.86 0.94\n", + " Black and Tan Coonhound 50 0.54 0.8\n", + "Treeing Walker Coonhound 50 0.66 0.98\n", + " English foxhound 50 0.32 0.84\n", + " Redbone Coonhound 50 0.62 0.94\n", + " borzoi 50 0.92 1\n", + " Irish Wolfhound 50 0.48 0.88\n", + " Italian Greyhound 50 0.76 0.98\n", + " Whippet 50 0.74 0.92\n", + " Ibizan Hound 50 0.6 0.86\n", + " Norwegian Elkhound 50 0.88 0.98\n", + " Otterhound 50 0.62 0.9\n", + " Saluki 50 0.72 0.92\n", + " Scottish Deerhound 50 0.86 0.98\n", + " Weimaraner 50 0.88 0.94\n", + "Staffordshire Bull Terrier 50 0.66 0.98\n", + "American Staffordshire Terrier 50 0.64 0.92\n", + " Bedlington Terrier 50 0.9 0.92\n", + " Border Terrier 50 0.86 0.92\n", + " Kerry Blue Terrier 50 0.78 0.98\n", + " Irish Terrier 50 0.7 0.96\n", + " Norfolk Terrier 50 0.68 0.9\n", + " Norwich Terrier 50 0.72 1\n", + " Yorkshire Terrier 50 0.66 0.9\n", + " Wire Fox Terrier 50 0.64 0.98\n", + " Lakeland Terrier 50 0.74 0.92\n", + " Sealyham Terrier 50 0.76 0.9\n", + " Airedale Terrier 50 0.82 0.92\n", + " Cairn Terrier 50 0.76 0.9\n", + " Australian Terrier 50 0.48 0.84\n", + " Dandie Dinmont Terrier 50 0.82 0.92\n", + " Boston Terrier 50 0.92 1\n", + " Miniature Schnauzer 50 0.68 0.9\n", + " Giant Schnauzer 50 0.72 0.98\n", + " Standard Schnauzer 50 0.74 1\n", + " Scottish Terrier 50 0.76 0.96\n", + " Tibetan Terrier 50 0.48 1\n", + "Australian Silky Terrier 50 0.66 0.96\n", + "Soft-coated Wheaten Terrier 50 0.74 0.96\n", + "West Highland White Terrier 50 0.88 0.96\n", + " Lhasa Apso 50 0.68 0.96\n", + " Flat-Coated Retriever 50 0.72 0.94\n", + " Curly-coated Retriever 50 0.82 0.94\n", + " Golden Retriever 50 0.86 0.94\n", + " Labrador Retriever 50 0.82 0.94\n", + "Chesapeake Bay Retriever 50 0.76 0.96\n", + "German Shorthaired Pointer 50 0.8 0.96\n", + " Vizsla 50 0.68 0.96\n", + " English Setter 50 0.7 1\n", + " Irish Setter 50 0.8 0.9\n", + " Gordon Setter 50 0.84 0.92\n", + " Brittany 50 0.84 0.96\n", + " Clumber Spaniel 50 0.92 0.96\n", + "English Springer Spaniel 50 0.88 1\n", + " Welsh Springer Spaniel 50 0.92 1\n", + " Cocker Spaniels 50 0.7 0.94\n", + " Sussex Spaniel 50 0.72 0.92\n", + " Irish Water Spaniel 50 0.88 0.98\n", + " Kuvasz 50 0.66 0.9\n", + " Schipperke 50 0.9 0.98\n", + " Groenendael 50 0.8 0.94\n", + " Malinois 50 0.86 0.98\n", + " Briard 50 0.52 0.8\n", + " Australian Kelpie 50 0.6 0.88\n", + " Komondor 50 0.88 0.94\n", + " Old English Sheepdog 50 0.94 0.98\n", + " Shetland Sheepdog 50 0.74 0.9\n", + " collie 50 0.6 0.96\n", + " Border Collie 50 0.74 0.96\n", + " Bouvier des Flandres 50 0.78 0.94\n", + " Rottweiler 50 0.88 0.96\n", + " German Shepherd Dog 50 0.8 0.98\n", + " Dobermann 50 0.68 0.96\n", + " Miniature Pinscher 50 0.76 0.88\n", + "Greater Swiss Mountain Dog 50 0.68 0.94\n", + " Bernese Mountain Dog 50 0.96 1\n", + " Appenzeller Sennenhund 50 0.22 1\n", + " Entlebucher Sennenhund 50 0.64 0.98\n", + " Boxer 50 0.7 0.92\n", + " Bullmastiff 50 0.78 0.98\n", + " Tibetan Mastiff 50 0.88 0.96\n", + " French Bulldog 50 0.84 0.94\n", + " Great Dane 50 0.54 0.9\n", + " St. Bernard 50 0.92 1\n", + " husky 50 0.46 0.98\n", + " Alaskan Malamute 50 0.76 0.96\n", + " Siberian Husky 50 0.46 0.98\n", + " Dalmatian 50 0.94 0.98\n", + " Affenpinscher 50 0.78 0.9\n", + " Basenji 50 0.92 0.94\n", + " pug 50 0.94 0.98\n", + " Leonberger 50 1 1\n", + " Newfoundland 50 0.78 0.96\n", + " Pyrenean Mountain Dog 50 0.78 0.96\n", + " Samoyed 50 0.96 1\n", + " Pomeranian 50 0.98 1\n", + " Chow Chow 50 0.9 0.96\n", + " Keeshond 50 0.88 0.94\n", + " Griffon Bruxellois 50 0.84 0.98\n", + " Pembroke Welsh Corgi 50 0.82 0.94\n", + " Cardigan Welsh Corgi 50 0.66 0.98\n", + " Toy Poodle 50 0.52 0.88\n", + " Miniature Poodle 50 0.52 0.92\n", + " Standard Poodle 50 0.8 1\n", + " Mexican hairless dog 50 0.88 0.98\n", + " grey wolf 50 0.82 0.92\n", + " Alaskan tundra wolf 50 0.78 0.98\n", + " red wolf 50 0.48 0.9\n", + " coyote 50 0.64 0.86\n", + " dingo 50 0.76 0.88\n", + " dhole 50 0.9 0.98\n", + " African wild dog 50 0.98 1\n", + " hyena 50 0.88 0.96\n", + " red fox 50 0.54 0.92\n", + " kit fox 50 0.72 0.98\n", + " Arctic fox 50 0.94 1\n", + " grey fox 50 0.7 0.94\n", + " tabby cat 50 0.54 0.92\n", + " tiger cat 50 0.22 0.94\n", + " Persian cat 50 0.9 0.98\n", + " Siamese cat 50 0.96 1\n", + " Egyptian Mau 50 0.54 0.8\n", + " cougar 50 0.9 1\n", + " lynx 50 0.72 0.88\n", + " leopard 50 0.78 0.98\n", + " snow leopard 50 0.9 0.98\n", + " jaguar 50 0.7 0.94\n", + " lion 50 0.9 0.98\n", + " tiger 50 0.92 0.98\n", + " cheetah 50 0.94 0.98\n", + " brown bear 50 0.94 0.98\n", + " American black bear 50 0.8 1\n", + " polar bear 50 0.84 0.96\n", + " sloth bear 50 0.72 0.92\n", + " mongoose 50 0.7 0.92\n", + " meerkat 50 0.82 0.92\n", + " tiger beetle 50 0.92 0.94\n", + " ladybug 50 0.86 0.94\n", + " ground beetle 50 0.64 0.94\n", + " longhorn beetle 50 0.62 0.88\n", + " leaf beetle 50 0.64 0.98\n", + " dung beetle 50 0.86 0.98\n", + " rhinoceros beetle 50 0.86 0.94\n", + " weevil 50 0.9 1\n", + " fly 50 0.78 0.94\n", + " bee 50 0.68 0.94\n", + " ant 50 0.68 0.78\n", + " grasshopper 50 0.5 0.92\n", + " cricket 50 0.64 0.92\n", + " stick insect 50 0.64 0.92\n", + " cockroach 50 0.72 0.8\n", + " mantis 50 0.64 0.86\n", + " cicada 50 0.9 0.96\n", + " leafhopper 50 0.88 0.94\n", + " lacewing 50 0.78 0.92\n", + " dragonfly 50 0.82 0.98\n", + " damselfly 50 0.82 1\n", + " red admiral 50 0.94 0.96\n", + " ringlet 50 0.86 0.98\n", + " monarch butterfly 50 0.9 0.92\n", + " small white 50 0.9 1\n", + " sulfur butterfly 50 0.92 1\n", + "gossamer-winged butterfly 50 0.88 1\n", + " starfish 50 0.88 0.92\n", + " sea urchin 50 0.84 0.94\n", + " sea cucumber 50 0.66 0.84\n", + " cottontail rabbit 50 0.72 0.94\n", + " hare 50 0.84 0.96\n", + " Angora rabbit 50 0.94 0.98\n", + " hamster 50 0.96 1\n", + " porcupine 50 0.88 0.98\n", + " fox squirrel 50 0.76 0.94\n", + " marmot 50 0.92 0.96\n", + " beaver 50 0.78 0.94\n", + " guinea pig 50 0.78 0.94\n", + " common sorrel 50 0.96 0.98\n", + " zebra 50 0.94 0.96\n", + " pig 50 0.5 0.76\n", + " wild boar 50 0.84 0.96\n", + " warthog 50 0.84 0.96\n", + " hippopotamus 50 0.88 0.96\n", + " ox 50 0.48 0.94\n", + " water buffalo 50 0.78 0.94\n", + " bison 50 0.88 0.96\n", + " ram 50 0.58 0.92\n", + " bighorn sheep 50 0.66 1\n", + " Alpine ibex 50 0.92 0.98\n", + " hartebeest 50 0.94 1\n", + " impala 50 0.82 0.96\n", + " gazelle 50 0.7 0.96\n", + " dromedary 50 0.9 1\n", + " llama 50 0.82 0.94\n", + " weasel 50 0.44 0.92\n", + " mink 50 0.78 0.96\n", + " European polecat 50 0.46 0.9\n", + " black-footed ferret 50 0.68 0.96\n", + " otter 50 0.66 0.88\n", + " skunk 50 0.96 0.96\n", + " badger 50 0.86 0.92\n", + " armadillo 50 0.88 0.9\n", + " three-toed sloth 50 0.96 1\n", + " orangutan 50 0.78 0.92\n", + " gorilla 50 0.82 0.94\n", + " chimpanzee 50 0.84 0.94\n", + " gibbon 50 0.76 0.86\n", + " siamang 50 0.68 0.94\n", + " guenon 50 0.8 0.94\n", + " patas monkey 50 0.62 0.82\n", + " baboon 50 0.9 0.98\n", + " macaque 50 0.8 0.86\n", + " langur 50 0.6 0.82\n", + " black-and-white colobus 50 0.86 0.9\n", + " proboscis monkey 50 1 1\n", + " marmoset 50 0.74 0.98\n", + " white-headed capuchin 50 0.72 0.9\n", + " howler monkey 50 0.86 0.94\n", + " titi 50 0.5 0.9\n", + "Geoffroy's spider monkey 50 0.42 0.8\n", + " common squirrel monkey 50 0.76 0.92\n", + " ring-tailed lemur 50 0.72 0.94\n", + " indri 50 0.9 0.96\n", + " Asian elephant 50 0.58 0.92\n", + " African bush elephant 50 0.7 0.98\n", + " red panda 50 0.94 0.94\n", + " giant panda 50 0.94 0.98\n", + " snoek 50 0.74 0.9\n", + " eel 50 0.6 0.84\n", + " coho salmon 50 0.84 0.96\n", + " rock beauty 50 0.88 0.98\n", + " clownfish 50 0.78 0.98\n", + " sturgeon 50 0.68 0.94\n", + " garfish 50 0.62 0.8\n", + " lionfish 50 0.96 0.96\n", + " pufferfish 50 0.88 0.96\n", + " abacus 50 0.74 0.88\n", + " abaya 50 0.84 0.92\n", + " academic gown 50 0.42 0.86\n", + " accordion 50 0.8 0.9\n", + " acoustic guitar 50 0.5 0.76\n", + " aircraft carrier 50 0.8 0.96\n", + " airliner 50 0.92 1\n", + " airship 50 0.76 0.82\n", + " altar 50 0.64 0.98\n", + " ambulance 50 0.88 0.98\n", + " amphibious vehicle 50 0.64 0.94\n", + " analog clock 50 0.52 0.92\n", + " apiary 50 0.82 0.96\n", + " apron 50 0.7 0.84\n", + " waste container 50 0.4 0.8\n", + " assault rifle 50 0.42 0.84\n", + " backpack 50 0.34 0.64\n", + " bakery 50 0.4 0.68\n", + " balance beam 50 0.8 0.98\n", + " balloon 50 0.86 0.96\n", + " ballpoint pen 50 0.52 0.96\n", + " Band-Aid 50 0.7 0.9\n", + " banjo 50 0.84 1\n", + " baluster 50 0.68 0.94\n", + " barbell 50 0.56 0.9\n", + " barber chair 50 0.7 0.92\n", + " barbershop 50 0.54 0.86\n", + " barn 50 0.96 0.96\n", + " barometer 50 0.84 0.98\n", + " barrel 50 0.56 0.88\n", + " wheelbarrow 50 0.66 0.88\n", + " baseball 50 0.74 0.98\n", + " basketball 50 0.88 0.98\n", + " bassinet 50 0.66 0.92\n", + " bassoon 50 0.74 0.98\n", + " swimming cap 50 0.62 0.88\n", + " bath towel 50 0.54 0.78\n", + " bathtub 50 0.4 0.88\n", + " station wagon 50 0.66 0.84\n", + " lighthouse 50 0.78 0.94\n", + " beaker 50 0.52 0.68\n", + " military cap 50 0.84 0.96\n", + " beer bottle 50 0.66 0.88\n", + " beer glass 50 0.6 0.84\n", + " bell-cot 50 0.56 0.96\n", + " bib 50 0.58 0.82\n", + " tandem bicycle 50 0.86 0.96\n", + " bikini 50 0.56 0.88\n", + " ring binder 50 0.64 0.84\n", + " binoculars 50 0.54 0.78\n", + " birdhouse 50 0.86 0.94\n", + " boathouse 50 0.74 0.92\n", + " bobsleigh 50 0.92 0.96\n", + " bolo tie 50 0.8 0.94\n", + " poke bonnet 50 0.64 0.86\n", + " bookcase 50 0.66 0.92\n", + " bookstore 50 0.62 0.88\n", + " bottle cap 50 0.58 0.7\n", + " bow 50 0.72 0.86\n", + " bow tie 50 0.7 0.9\n", + " brass 50 0.92 0.96\n", + " bra 50 0.5 0.7\n", + " breakwater 50 0.62 0.86\n", + " breastplate 50 0.4 0.9\n", + " broom 50 0.6 0.86\n", + " bucket 50 0.66 0.8\n", + " buckle 50 0.5 0.68\n", + " bulletproof vest 50 0.5 0.78\n", + " high-speed train 50 0.94 0.96\n", + " butcher shop 50 0.74 0.94\n", + " taxicab 50 0.64 0.86\n", + " cauldron 50 0.44 0.66\n", + " candle 50 0.48 0.74\n", + " cannon 50 0.88 0.94\n", + " canoe 50 0.94 1\n", + " can opener 50 0.66 0.86\n", + " cardigan 50 0.68 0.8\n", + " car mirror 50 0.94 0.96\n", + " carousel 50 0.94 0.98\n", + " tool kit 50 0.56 0.78\n", + " carton 50 0.42 0.7\n", + " car wheel 50 0.38 0.74\n", + "automated teller machine 50 0.76 0.94\n", + " cassette 50 0.52 0.8\n", + " cassette player 50 0.28 0.9\n", + " castle 50 0.78 0.88\n", + " catamaran 50 0.78 1\n", + " CD player 50 0.52 0.82\n", + " cello 50 0.82 1\n", + " mobile phone 50 0.68 0.86\n", + " chain 50 0.38 0.66\n", + " chain-link fence 50 0.7 0.84\n", + " chain mail 50 0.64 0.9\n", + " chainsaw 50 0.84 0.92\n", + " chest 50 0.68 0.92\n", + " chiffonier 50 0.26 0.64\n", + " chime 50 0.62 0.84\n", + " china cabinet 50 0.82 0.96\n", + " Christmas stocking 50 0.92 0.94\n", + " church 50 0.62 0.9\n", + " movie theater 50 0.58 0.88\n", + " cleaver 50 0.32 0.62\n", + " cliff dwelling 50 0.88 1\n", + " cloak 50 0.32 0.64\n", + " clogs 50 0.58 0.88\n", + " cocktail shaker 50 0.62 0.7\n", + " coffee mug 50 0.44 0.72\n", + " coffeemaker 50 0.64 0.92\n", + " coil 50 0.66 0.84\n", + " combination lock 50 0.64 0.84\n", + " computer keyboard 50 0.7 0.82\n", + " confectionery store 50 0.54 0.86\n", + " container ship 50 0.82 0.98\n", + " convertible 50 0.78 0.98\n", + " corkscrew 50 0.82 0.92\n", + " cornet 50 0.46 0.88\n", + " cowboy boot 50 0.64 0.8\n", + " cowboy hat 50 0.64 0.82\n", + " cradle 50 0.38 0.8\n", + " crane (machine) 50 0.78 0.94\n", + " crash helmet 50 0.92 0.96\n", + " crate 50 0.52 0.82\n", + " infant bed 50 0.74 1\n", + " Crock Pot 50 0.78 0.9\n", + " croquet ball 50 0.9 0.96\n", + " crutch 50 0.46 0.7\n", + " cuirass 50 0.54 0.86\n", + " dam 50 0.74 0.92\n", + " desk 50 0.6 0.86\n", + " desktop computer 50 0.54 0.94\n", + " rotary dial telephone 50 0.88 0.94\n", + " diaper 50 0.68 0.84\n", + " digital clock 50 0.54 0.76\n", + " digital watch 50 0.58 0.86\n", + " dining table 50 0.76 0.9\n", + " dishcloth 50 0.94 1\n", + " dishwasher 50 0.44 0.78\n", + " disc brake 50 0.98 1\n", + " dock 50 0.54 0.94\n", + " dog sled 50 0.84 1\n", + " dome 50 0.72 0.92\n", + " doormat 50 0.56 0.82\n", + " drilling rig 50 0.84 0.96\n", + " drum 50 0.38 0.68\n", + " drumstick 50 0.56 0.72\n", + " dumbbell 50 0.62 0.9\n", + " Dutch oven 50 0.7 0.84\n", + " electric fan 50 0.82 0.86\n", + " electric guitar 50 0.62 0.84\n", + " electric locomotive 50 0.92 0.98\n", + " entertainment center 50 0.9 0.98\n", + " envelope 50 0.44 0.86\n", + " espresso machine 50 0.72 0.94\n", + " face powder 50 0.7 0.92\n", + " feather boa 50 0.7 0.84\n", + " filing cabinet 50 0.88 0.98\n", + " fireboat 50 0.94 0.98\n", + " fire engine 50 0.84 0.9\n", + " fire screen sheet 50 0.62 0.76\n", + " flagpole 50 0.74 0.88\n", + " flute 50 0.36 0.72\n", + " folding chair 50 0.62 0.84\n", + " football helmet 50 0.86 0.94\n", + " forklift 50 0.8 0.92\n", + " fountain 50 0.84 0.94\n", + " fountain pen 50 0.76 0.92\n", + " four-poster bed 50 0.78 0.94\n", + " freight car 50 0.96 1\n", + " French horn 50 0.76 0.92\n", + " frying pan 50 0.36 0.78\n", + " fur coat 50 0.84 0.96\n", + " garbage truck 50 0.9 0.98\n", + " gas mask 50 0.84 0.92\n", + " gas pump 50 0.9 0.98\n", + " goblet 50 0.68 0.82\n", + " go-kart 50 0.9 1\n", + " golf ball 50 0.84 0.9\n", + " golf cart 50 0.78 0.86\n", + " gondola 50 0.98 0.98\n", + " gong 50 0.74 0.92\n", + " gown 50 0.62 0.96\n", + " grand piano 50 0.7 0.96\n", + " greenhouse 50 0.8 0.98\n", + " grille 50 0.72 0.9\n", + " grocery store 50 0.66 0.94\n", + " guillotine 50 0.86 0.92\n", + " barrette 50 0.52 0.66\n", + " hair spray 50 0.5 0.74\n", + " half-track 50 0.78 0.9\n", + " hammer 50 0.56 0.76\n", + " hamper 50 0.64 0.84\n", + " hair dryer 50 0.56 0.74\n", + " hand-held computer 50 0.42 0.86\n", + " handkerchief 50 0.78 0.94\n", + " hard disk drive 50 0.76 0.84\n", + " harmonica 50 0.7 0.88\n", + " harp 50 0.88 0.96\n", + " harvester 50 0.78 1\n", + " hatchet 50 0.54 0.74\n", + " holster 50 0.66 0.84\n", + " home theater 50 0.64 0.94\n", + " honeycomb 50 0.56 0.88\n", + " hook 50 0.3 0.6\n", + " hoop skirt 50 0.64 0.86\n", + " horizontal bar 50 0.68 0.98\n", + " horse-drawn vehicle 50 0.88 0.94\n", + " hourglass 50 0.88 0.96\n", + " iPod 50 0.76 0.94\n", + " clothes iron 50 0.82 0.88\n", + " jack-o'-lantern 50 0.98 0.98\n", + " jeans 50 0.68 0.84\n", + " jeep 50 0.72 0.9\n", + " T-shirt 50 0.72 0.96\n", + " jigsaw puzzle 50 0.84 0.94\n", + " pulled rickshaw 50 0.86 0.94\n", + " joystick 50 0.8 0.9\n", + " kimono 50 0.84 0.96\n", + " knee pad 50 0.62 0.88\n", + " knot 50 0.66 0.8\n", + " lab coat 50 0.8 0.96\n", + " ladle 50 0.36 0.64\n", + " lampshade 50 0.48 0.84\n", + " laptop computer 50 0.26 0.88\n", + " lawn mower 50 0.78 0.96\n", + " lens cap 50 0.46 0.72\n", + " paper knife 50 0.26 0.5\n", + " library 50 0.54 0.9\n", + " lifeboat 50 0.92 0.98\n", + " lighter 50 0.56 0.78\n", + " limousine 50 0.76 0.92\n", + " ocean liner 50 0.88 0.94\n", + " lipstick 50 0.74 0.9\n", + " slip-on shoe 50 0.74 0.92\n", + " lotion 50 0.5 0.86\n", + " speaker 50 0.52 0.68\n", + " loupe 50 0.32 0.52\n", + " sawmill 50 0.72 0.9\n", + " magnetic compass 50 0.52 0.82\n", + " mail bag 50 0.68 0.92\n", + " mailbox 50 0.82 0.92\n", + " tights 50 0.22 0.94\n", + " tank suit 50 0.24 0.9\n", + " manhole cover 50 0.96 0.98\n", + " maraca 50 0.74 0.9\n", + " marimba 50 0.84 0.94\n", + " mask 50 0.44 0.82\n", + " match 50 0.66 0.9\n", + " maypole 50 0.96 1\n", + " maze 50 0.8 0.96\n", + " measuring cup 50 0.54 0.76\n", + " medicine chest 50 0.6 0.84\n", + " megalith 50 0.8 0.92\n", + " microphone 50 0.52 0.7\n", + " microwave oven 50 0.48 0.72\n", + " military uniform 50 0.62 0.84\n", + " milk can 50 0.68 0.82\n", + " minibus 50 0.7 1\n", + " miniskirt 50 0.46 0.76\n", + " minivan 50 0.38 0.8\n", + " missile 50 0.4 0.84\n", + " mitten 50 0.76 0.88\n", + " mixing bowl 50 0.8 0.92\n", + " mobile home 50 0.54 0.78\n", + " Model T 50 0.92 0.96\n", + " modem 50 0.58 0.86\n", + " monastery 50 0.44 0.9\n", + " monitor 50 0.4 0.86\n", + " moped 50 0.56 0.94\n", + " mortar 50 0.68 0.94\n", + " square academic cap 50 0.5 0.84\n", + " mosque 50 0.9 1\n", + " mosquito net 50 0.9 0.98\n", + " scooter 50 0.9 0.98\n", + " mountain bike 50 0.78 0.96\n", + " tent 50 0.88 0.96\n", + " computer mouse 50 0.42 0.82\n", + " mousetrap 50 0.76 0.88\n", + " moving van 50 0.4 0.72\n", + " muzzle 50 0.5 0.72\n", + " nail 50 0.68 0.74\n", + " neck brace 50 0.56 0.68\n", + " necklace 50 0.86 1\n", + " nipple 50 0.7 0.88\n", + " notebook computer 50 0.34 0.84\n", + " obelisk 50 0.8 0.92\n", + " oboe 50 0.6 0.84\n", + " ocarina 50 0.8 0.86\n", + " odometer 50 0.96 1\n", + " oil filter 50 0.58 0.82\n", + " organ 50 0.82 0.9\n", + " oscilloscope 50 0.9 0.96\n", + " overskirt 50 0.2 0.7\n", + " bullock cart 50 0.7 0.94\n", + " oxygen mask 50 0.46 0.84\n", + " packet 50 0.5 0.78\n", + " paddle 50 0.56 0.94\n", + " paddle wheel 50 0.86 0.96\n", + " padlock 50 0.74 0.78\n", + " paintbrush 50 0.62 0.8\n", + " pajamas 50 0.56 0.92\n", + " palace 50 0.64 0.96\n", + " pan flute 50 0.84 0.86\n", + " paper towel 50 0.66 0.84\n", + " parachute 50 0.92 0.94\n", + " parallel bars 50 0.62 0.96\n", + " park bench 50 0.74 0.9\n", + " parking meter 50 0.84 0.92\n", + " passenger car 50 0.5 0.82\n", + " patio 50 0.58 0.84\n", + " payphone 50 0.74 0.92\n", + " pedestal 50 0.52 0.9\n", + " pencil case 50 0.64 0.92\n", + " pencil sharpener 50 0.52 0.78\n", + " perfume 50 0.7 0.9\n", + " Petri dish 50 0.6 0.8\n", + " photocopier 50 0.88 0.98\n", + " plectrum 50 0.7 0.84\n", + " Pickelhaube 50 0.72 0.86\n", + " picket fence 50 0.84 0.94\n", + " pickup truck 50 0.64 0.92\n", + " pier 50 0.52 0.82\n", + " piggy bank 50 0.82 0.94\n", + " pill bottle 50 0.76 0.86\n", + " pillow 50 0.76 0.9\n", + " ping-pong ball 50 0.84 0.88\n", + " pinwheel 50 0.76 0.88\n", + " pirate ship 50 0.76 0.94\n", + " pitcher 50 0.46 0.84\n", + " hand plane 50 0.84 0.94\n", + " planetarium 50 0.88 0.98\n", + " plastic bag 50 0.36 0.62\n", + " plate rack 50 0.52 0.78\n", + " plow 50 0.78 0.88\n", + " plunger 50 0.42 0.7\n", + " Polaroid camera 50 0.84 0.92\n", + " pole 50 0.38 0.74\n", + " police van 50 0.76 0.94\n", + " poncho 50 0.58 0.86\n", + " billiard table 50 0.8 0.88\n", + " soda bottle 50 0.56 0.94\n", + " pot 50 0.78 0.92\n", + " potter's wheel 50 0.9 0.94\n", + " power drill 50 0.42 0.72\n", + " prayer rug 50 0.7 0.86\n", + " printer 50 0.54 0.86\n", + " prison 50 0.7 0.9\n", + " projectile 50 0.28 0.9\n", + " projector 50 0.62 0.84\n", + " hockey puck 50 0.92 0.96\n", + " punching bag 50 0.6 0.68\n", + " purse 50 0.42 0.78\n", + " quill 50 0.68 0.84\n", + " quilt 50 0.64 0.9\n", + " race car 50 0.72 0.92\n", + " racket 50 0.72 0.9\n", + " radiator 50 0.66 0.76\n", + " radio 50 0.64 0.92\n", + " radio telescope 50 0.9 0.96\n", + " rain barrel 50 0.8 0.98\n", + " recreational vehicle 50 0.84 0.94\n", + " reel 50 0.72 0.82\n", + " reflex camera 50 0.72 0.92\n", + " refrigerator 50 0.7 0.9\n", + " remote control 50 0.7 0.88\n", + " restaurant 50 0.5 0.66\n", + " revolver 50 0.82 1\n", + " rifle 50 0.38 0.7\n", + " rocking chair 50 0.62 0.84\n", + " rotisserie 50 0.88 0.92\n", + " eraser 50 0.54 0.76\n", + " rugby ball 50 0.86 0.94\n", + " ruler 50 0.68 0.86\n", + " running shoe 50 0.78 0.94\n", + " safe 50 0.82 0.92\n", + " safety pin 50 0.4 0.62\n", + " salt shaker 50 0.66 0.9\n", + " sandal 50 0.66 0.86\n", + " sarong 50 0.64 0.86\n", + " saxophone 50 0.66 0.88\n", + " scabbard 50 0.76 0.92\n", + " weighing scale 50 0.58 0.78\n", + " school bus 50 0.92 1\n", + " schooner 50 0.84 1\n", + " scoreboard 50 0.9 0.96\n", + " CRT screen 50 0.14 0.7\n", + " screw 50 0.9 0.98\n", + " screwdriver 50 0.3 0.58\n", + " seat belt 50 0.88 0.94\n", + " sewing machine 50 0.76 0.9\n", + " shield 50 0.56 0.82\n", + " shoe store 50 0.78 0.96\n", + " shoji 50 0.8 0.92\n", + " shopping basket 50 0.52 0.88\n", + " shopping cart 50 0.76 0.92\n", + " shovel 50 0.62 0.84\n", + " shower cap 50 0.7 0.84\n", + " shower curtain 50 0.64 0.82\n", + " ski 50 0.74 0.92\n", + " ski mask 50 0.72 0.88\n", + " sleeping bag 50 0.68 0.8\n", + " slide rule 50 0.72 0.88\n", + " sliding door 50 0.44 0.78\n", + " slot machine 50 0.94 0.98\n", + " snorkel 50 0.86 0.98\n", + " snowmobile 50 0.88 1\n", + " snowplow 50 0.84 0.98\n", + " soap dispenser 50 0.56 0.86\n", + " soccer ball 50 0.86 0.96\n", + " sock 50 0.62 0.76\n", + " solar thermal collector 50 0.72 0.96\n", + " sombrero 50 0.6 0.84\n", + " soup bowl 50 0.56 0.94\n", + " space bar 50 0.34 0.88\n", + " space heater 50 0.52 0.74\n", + " space shuttle 50 0.82 0.96\n", + " spatula 50 0.3 0.6\n", + " motorboat 50 0.86 1\n", + " spider web 50 0.7 0.9\n", + " spindle 50 0.86 0.98\n", + " sports car 50 0.6 0.94\n", + " spotlight 50 0.26 0.6\n", + " stage 50 0.68 0.86\n", + " steam locomotive 50 0.94 1\n", + " through arch bridge 50 0.84 0.96\n", + " steel drum 50 0.82 0.9\n", + " stethoscope 50 0.6 0.82\n", + " scarf 50 0.5 0.92\n", + " stone wall 50 0.76 0.9\n", + " stopwatch 50 0.58 0.9\n", + " stove 50 0.46 0.74\n", + " strainer 50 0.64 0.84\n", + " tram 50 0.88 0.96\n", + " stretcher 50 0.6 0.8\n", + " couch 50 0.8 0.96\n", + " stupa 50 0.88 0.88\n", + " submarine 50 0.72 0.92\n", + " suit 50 0.4 0.78\n", + " sundial 50 0.58 0.74\n", + " sunglass 50 0.14 0.58\n", + " sunglasses 50 0.28 0.58\n", + " sunscreen 50 0.32 0.7\n", + " suspension bridge 50 0.6 0.94\n", + " mop 50 0.74 0.92\n", + " sweatshirt 50 0.28 0.66\n", + " swimsuit 50 0.52 0.82\n", + " swing 50 0.76 0.84\n", + " switch 50 0.56 0.76\n", + " syringe 50 0.62 0.82\n", + " table lamp 50 0.6 0.88\n", + " tank 50 0.8 0.96\n", + " tape player 50 0.46 0.76\n", + " teapot 50 0.84 1\n", + " teddy bear 50 0.82 0.94\n", + " television 50 0.6 0.9\n", + " tennis ball 50 0.7 0.94\n", + " thatched roof 50 0.88 0.9\n", + " front curtain 50 0.8 0.92\n", + " thimble 50 0.6 0.8\n", + " threshing machine 50 0.56 0.88\n", + " throne 50 0.72 0.82\n", + " tile roof 50 0.72 0.94\n", + " toaster 50 0.66 0.84\n", + " tobacco shop 50 0.42 0.7\n", + " toilet seat 50 0.62 0.88\n", + " torch 50 0.64 0.84\n", + " totem pole 50 0.92 0.98\n", + " tow truck 50 0.62 0.88\n", + " toy store 50 0.6 0.94\n", + " tractor 50 0.76 0.98\n", + " semi-trailer truck 50 0.78 0.92\n", + " tray 50 0.46 0.64\n", + " trench coat 50 0.54 0.72\n", + " tricycle 50 0.72 0.94\n", + " trimaran 50 0.7 0.98\n", + " tripod 50 0.58 0.86\n", + " triumphal arch 50 0.92 0.98\n", + " trolleybus 50 0.9 1\n", + " trombone 50 0.54 0.88\n", + " tub 50 0.24 0.82\n", + " turnstile 50 0.84 0.94\n", + " typewriter keyboard 50 0.68 0.98\n", + " umbrella 50 0.52 0.7\n", + " unicycle 50 0.74 0.96\n", + " upright piano 50 0.76 0.9\n", + " vacuum cleaner 50 0.62 0.9\n", + " vase 50 0.5 0.78\n", + " vault 50 0.76 0.92\n", + " velvet 50 0.2 0.42\n", + " vending machine 50 0.9 1\n", + " vestment 50 0.54 0.82\n", + " viaduct 50 0.78 0.86\n", + " violin 50 0.68 0.78\n", + " volleyball 50 0.86 1\n", + " waffle iron 50 0.72 0.88\n", + " wall clock 50 0.54 0.88\n", + " wallet 50 0.52 0.9\n", + " wardrobe 50 0.68 0.88\n", + " military aircraft 50 0.9 0.98\n", + " sink 50 0.72 0.96\n", + " washing machine 50 0.78 0.94\n", + " water bottle 50 0.54 0.74\n", + " water jug 50 0.22 0.74\n", + " water tower 50 0.9 0.96\n", + " whiskey jug 50 0.64 0.74\n", + " whistle 50 0.72 0.84\n", + " wig 50 0.84 0.9\n", + " window screen 50 0.68 0.8\n", + " window shade 50 0.52 0.76\n", + " Windsor tie 50 0.22 0.66\n", + " wine bottle 50 0.42 0.82\n", + " wing 50 0.54 0.96\n", + " wok 50 0.46 0.82\n", + " wooden spoon 50 0.58 0.8\n", + " wool 50 0.32 0.82\n", + " split-rail fence 50 0.74 0.9\n", + " shipwreck 50 0.84 0.96\n", + " yawl 50 0.78 0.96\n", + " yurt 50 0.84 1\n", + " website 50 0.98 1\n", + " comic book 50 0.62 0.9\n", + " crossword 50 0.84 0.88\n", + " traffic sign 50 0.78 0.9\n", + " traffic light 50 0.8 0.94\n", + " dust jacket 50 0.72 0.94\n", + " menu 50 0.82 0.96\n", + " plate 50 0.44 0.88\n", + " guacamole 50 0.8 0.92\n", + " consomme 50 0.54 0.88\n", + " hot pot 50 0.86 0.98\n", + " trifle 50 0.92 0.98\n", + " ice cream 50 0.68 0.94\n", + " ice pop 50 0.62 0.84\n", + " baguette 50 0.62 0.88\n", + " bagel 50 0.64 0.92\n", + " pretzel 50 0.72 0.88\n", + " cheeseburger 50 0.9 1\n", + " hot dog 50 0.74 0.94\n", + " mashed potato 50 0.74 0.9\n", + " cabbage 50 0.84 0.96\n", + " broccoli 50 0.9 0.96\n", + " cauliflower 50 0.82 1\n", + " zucchini 50 0.74 0.9\n", + " spaghetti squash 50 0.8 0.96\n", + " acorn squash 50 0.82 0.96\n", + " butternut squash 50 0.7 0.94\n", + " cucumber 50 0.6 0.96\n", + " artichoke 50 0.84 0.94\n", + " bell pepper 50 0.84 0.98\n", + " cardoon 50 0.88 0.94\n", + " mushroom 50 0.38 0.92\n", + " Granny Smith 50 0.9 0.96\n", + " strawberry 50 0.6 0.88\n", + " orange 50 0.7 0.92\n", + " lemon 50 0.78 0.98\n", + " fig 50 0.82 0.96\n", + " pineapple 50 0.86 0.96\n", + " banana 50 0.84 0.96\n", + " jackfruit 50 0.9 0.98\n", + " custard apple 50 0.86 0.96\n", + " pomegranate 50 0.82 0.98\n", + " hay 50 0.8 0.92\n", + " carbonara 50 0.88 0.94\n", + " chocolate syrup 50 0.46 0.84\n", + " dough 50 0.4 0.6\n", + " meatloaf 50 0.58 0.84\n", + " pizza 50 0.84 0.96\n", + " pot pie 50 0.68 0.9\n", + " burrito 50 0.8 0.98\n", + " red wine 50 0.54 0.82\n", + " espresso 50 0.64 0.88\n", + " cup 50 0.38 0.7\n", + " eggnog 50 0.38 0.7\n", + " alp 50 0.54 0.88\n", + " bubble 50 0.8 0.96\n", + " cliff 50 0.64 1\n", + " coral reef 50 0.72 0.96\n", + " geyser 50 0.94 1\n", + " lakeshore 50 0.54 0.88\n", + " promontory 50 0.58 0.94\n", + " shoal 50 0.6 0.96\n", + " seashore 50 0.44 0.78\n", + " valley 50 0.72 0.94\n", + " volcano 50 0.78 0.96\n", + " baseball player 50 0.72 0.94\n", + " bridegroom 50 0.72 0.88\n", + " scuba diver 50 0.8 1\n", + " rapeseed 50 0.94 0.98\n", + " daisy 50 0.96 0.98\n", + " yellow lady's slipper 50 1 1\n", + " corn 50 0.4 0.88\n", + " acorn 50 0.92 0.98\n", + " rose hip 50 0.92 0.98\n", + " horse chestnut seed 50 0.94 0.98\n", + " coral fungus 50 0.96 0.96\n", + " agaric 50 0.82 0.94\n", + " gyromitra 50 0.98 1\n", + " stinkhorn mushroom 50 0.8 0.94\n", + " earth star 50 0.98 1\n", + " hen-of-the-woods 50 0.8 0.96\n", + " bolete 50 0.74 0.94\n", + " ear 50 0.48 0.94\n", + " toilet paper 50 0.36 0.68\n", + "Speed: 0.1ms pre-process, 0.3ms inference, 0.0ms post-process per image at shape (1, 3, 224, 224)\n", + "Results saved to \u001B[1mruns/val-cls/exp\u001B[0m\n" + ] + } + ], + "source": [ + "# Validate YOLOv5s on Imagenet val\n", + "!python classify/val.py --weights yolov5s-cls.pt --data ../datasets/imagenet --img 224 --half" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZY2VXXXu74w5" + }, + "source": [ + "# 3. Train\n", + "\n", + "\n", + " \"Ultralytics\n", + "\n", + "

\n", + "\n", + "Train a YOLOv5s Classification model on the [Imagenette](https://image-net.org/) dataset with `--data imagenet`, starting from pretrained `--pretrained yolov5s-cls.pt`.\n", + "\n", + "- **Pretrained [Models](https://github.com/ultralytics/yolov5/tree/master/models)** are downloaded\n", + "automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases)\n", + "- **Training Results** are saved to `runs/train-cls/` with incrementing run directories, i.e. `runs/train-cls/exp2`, `runs/train-cls/exp3` etc.\n", + "

\n", + "\n", + "A **Mosaic Dataloader** is used for training which combines 4 images into 1 mosaic." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "i3oKtE4g-aNn" + }, + "outputs": [], + "source": [ + "# @title Select YOLOv5 🚀 logger {run: 'auto'}\n", + "logger = \"Comet\" # @param ['Comet', 'ClearML', 'TensorBoard']\n", + "\n", + "if logger == \"Comet\":\n", + " %pip install -q comet_ml\n", + " import comet_ml\n", + "\n", + " comet_ml.init()\n", + "elif logger == \"ClearML\":\n", + " %pip install -q clearml\n", + " import clearml\n", + "\n", + " clearml.browser_login()\n", + "elif logger == \"TensorBoard\":\n", + " %load_ext tensorboard\n", + " %tensorboard --logdir runs/train" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1NcFxRcFdJ_O", + "outputId": "77c8d487-16db-4073-b3ea-06cabf2e7766" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001B[34m\u001B[1mclassify/train: \u001B[0mmodel=yolov5s-cls.pt, data=imagenette160, epochs=5, batch_size=64, imgsz=224, nosave=False, cache=ram, device=, workers=8, project=runs/train-cls, name=exp, exist_ok=False, pretrained=True, optimizer=Adam, lr0=0.001, decay=5e-05, label_smoothing=0.1, cutoff=None, dropout=None, verbose=False, seed=0, local_rank=-1\n", + "\u001B[34m\u001B[1mgithub: \u001B[0mup to date with https://github.com/ultralytics/yolov5 ✅\n", + "YOLOv5 🚀 v7.0-3-g61ebf5e Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "\u001B[34m\u001B[1mTensorBoard: \u001B[0mStart with 'tensorboard --logdir runs/train-cls', view at http://localhost:6006/\n", + "\n", + "Dataset not found ⚠️, missing path /content/datasets/imagenette160, attempting download...\n", + "Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/imagenette160.zip to /content/datasets/imagenette160.zip...\n", + "100% 103M/103M [00:00<00:00, 347MB/s] \n", + "Unzipping /content/datasets/imagenette160.zip...\n", + "Dataset download success ✅ (3.3s), saved to \u001B[1m/content/datasets/imagenette160\u001B[0m\n", + "\n", + "\u001B[34m\u001B[1malbumentations: \u001B[0mRandomResizedCrop(p=1.0, height=224, width=224, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=1), HorizontalFlip(p=0.5), ColorJitter(p=0.5, brightness=[0.6, 1.4], contrast=[0.6, 1.4], saturation=[0.6, 1.4], hue=[0, 0]), Normalize(p=1.0, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0), ToTensorV2(always_apply=True, p=1.0, transpose_mask=False)\n", + "Model summary: 149 layers, 4185290 parameters, 4185290 gradients, 10.5 GFLOPs\n", + "\u001B[34m\u001B[1moptimizer:\u001B[0m Adam(lr=0.001) with parameter groups 32 weight(decay=0.0), 33 weight(decay=5e-05), 33 bias\n", + "Image sizes 224 train, 224 test\n", + "Using 1 dataloader workers\n", + "Logging results to \u001B[1mruns/train-cls/exp\u001B[0m\n", + "Starting yolov5s-cls.pt training on imagenette160 dataset with 10 classes for 5 epochs...\n", + "\n", + " Epoch GPU_mem train_loss val_loss top1_acc top5_acc\n", + " 1/5 1.47G 1.05 0.974 0.828 0.975: 100% 148/148 [00:38<00:00, 3.82it/s]\n", + " 2/5 1.73G 0.895 0.766 0.911 0.994: 100% 148/148 [00:36<00:00, 4.03it/s]\n", + " 3/5 1.73G 0.82 0.704 0.934 0.996: 100% 148/148 [00:35<00:00, 4.20it/s]\n", + " 4/5 1.73G 0.766 0.664 0.951 0.998: 100% 148/148 [00:36<00:00, 4.05it/s]\n", + " 5/5 1.73G 0.724 0.634 0.959 0.997: 100% 148/148 [00:37<00:00, 3.94it/s]\n", + "\n", + "Training complete (0.052 hours)\n", + "Results saved to \u001B[1mruns/train-cls/exp\u001B[0m\n", + "Predict: python classify/predict.py --weights runs/train-cls/exp/weights/best.pt --source im.jpg\n", + "Validate: python classify/val.py --weights runs/train-cls/exp/weights/best.pt --data /content/datasets/imagenette160\n", + "Export: python export.py --weights runs/train-cls/exp/weights/best.pt --include onnx\n", + "PyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', 'runs/train-cls/exp/weights/best.pt')\n", + "Visualize: https://netron.app\n", + "\n" + ] + } + ], + "source": [ + "# Train YOLOv5s Classification on Imagenette160 for 3 epochs\n", + "!python classify/train.py --model yolov5s-cls.pt --data imagenette160 --epochs 5 --img 224 --cache" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "15glLzbQx5u0" + }, + "source": [ + "# 4. Visualize" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nWOsI5wJR1o3" + }, + "source": [ + "## Comet Logging and Visualization 🌟 NEW\n", + "\n", + "[Comet](https://www.comet.com/site/lp/yolov5-with-comet/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=yolov5_colab) is now fully integrated with YOLOv5. Track and visualize model metrics in real time, save your hyperparameters, datasets, and model checkpoints, and visualize your model predictions with [Comet Custom Panels](https://www.comet.com/docs/v2/guides/comet-dashboard/code-panels/about-panels/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=yolov5_colab)! Comet makes sure you never lose track of your work and makes it easy to share results and collaborate across teams of all sizes!\n", + "\n", + "Getting started is easy:\n", + "```shell\n", + "pip install comet_ml # 1. install\n", + "export COMET_API_KEY= # 2. paste API key\n", + "python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. train\n", + "```\n", + "To learn more about all of the supported Comet features for this integration, check out the [Comet Tutorial](https://docs.ultralytics.com/yolov5/tutorials/comet_logging_integration). If you'd like to learn more about Comet, head over to our [documentation](https://www.comet.com/docs/v2/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=yolov5_colab). Get started by trying out the Comet Colab Notebook:\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1RG0WOQyxlDlo5Km8GogJpIEJlg_5lyYO?usp=sharing)\n", + "\n", + "\n", + "\"Comet" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Lay2WsTjNJzP" + }, + "source": [ + "## ClearML Logging and Automation 🌟 NEW\n", + "\n", + "[ClearML](https://cutt.ly/yolov5-notebook-clearml) is completely integrated into YOLOv5 to track your experimentation, manage dataset versions and even remotely execute training runs. To enable ClearML (check cells above):\n", + "\n", + "- `pip install clearml`\n", + "- run `clearml-init` to connect to a ClearML server (**deploy your own [open-source server](https://github.com/allegroai/clearml-server)**, or use our [free hosted server](https://cutt.ly/yolov5-notebook-clearml))\n", + "\n", + "You'll get all the great expected features from an experiment manager: live updates, model upload, experiment comparison etc. but ClearML also tracks uncommitted changes and installed packages for example. Thanks to that ClearML Tasks (which is what we call experiments) are also reproducible on different machines! With only 1 extra line, we can schedule a YOLOv5 training task on a queue to be executed by any number of ClearML Agents (workers).\n", + "\n", + "You can use ClearML Data to version your dataset and then pass it to YOLOv5 simply using its unique ID. This will help you keep track of your data without adding extra hassle. Explore the [ClearML Tutorial](https://docs.ultralytics.com/yolov5/tutorials/clearml_logging_integration) for details!\n", + "\n", + "\n", + "\"ClearML" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-WPvRbS5Swl6" + }, + "source": [ + "## Local Logging\n", + "\n", + "Training results are automatically logged with [Tensorboard](https://www.tensorflow.org/tensorboard) and [CSV](https://github.com/ultralytics/yolov5/pull/4148) loggers to `runs/train`, with a new experiment directory created for each new training as `runs/train/exp2`, `runs/train/exp3`, etc.\n", + "\n", + "This directory contains train and val statistics, mosaics, labels, predictions and augmentated mosaics, as well as metrics and charts including precision-recall (PR) curves and confusion matrices. \n", + "\n", + "\"Local\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zelyeqbyt3GD" + }, + "source": [ + "# Environments\n", + "\n", + "YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including [CUDA](https://developer.nvidia.com/cuda)/[CUDNN](https://developer.nvidia.com/cudnn), [Python](https://www.python.org/) and [PyTorch](https://pytorch.org/) preinstalled):\n", + "\n", + "- **Notebooks** with free GPU: \"Run \"Open \"Open\n", + "- **Google Cloud** Deep Learning VM. See [GCP Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/google_cloud_quickstart_tutorial/)\n", + "- **Amazon** Deep Learning AMI. See [AWS Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/aws_quickstart_tutorial/)\n", + "- **Docker Image**. See [Docker Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/docker_image_quickstart_tutorial/) \"Docker\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6Qu7Iesl0p54" + }, + "source": [ + "# Status\n", + "\n", + "![YOLOv5 CI](https://github.com/ultralytics/yolov3/actions/workflows/ci-testing.yml/badge.svg)\n", + "\n", + "If this badge is green, all [YOLOv3 GitHub Actions](https://github.com/ultralytics/yolov3/actions) Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training ([train.py](https://github.com/ultralytics/yolov5/blob/master/train.py)), testing ([val.py](https://github.com/ultralytics/yolov5/blob/master/val.py)), inference ([detect.py](https://github.com/ultralytics/yolov5/blob/master/detect.py)) and export ([export.py](https://github.com/ultralytics/yolov5/blob/master/export.py)) on macOS, Windows, and Ubuntu every 24 hours and on every commit.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IEijrePND_2I" + }, + "source": [ + "# Appendix\n", + "\n", + "Additional content below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GMusP4OAxFu6" + }, + "outputs": [], + "source": [ + "# YOLOv5 PyTorch HUB Inference (DetectionModels only)\n", + "\n", + "model = torch.hub.load(\"ultralytics/yolov5\", \"yolov5s\") # yolov5n - yolov5x6 or custom\n", + "im = \"https://ultralytics.com/images/zidane.jpg\" # file, Path, PIL.Image, OpenCV, nparray, list\n", + "results = model(im) # inference\n", + "results.print() # or .show(), .save(), .crop(), .pandas(), etc." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "YOLOv5 Classification Tutorial", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/classify/val.py b/classify/val.py new file mode 100644 index 0000000000..f8079941cc --- /dev/null +++ b/classify/val.py @@ -0,0 +1,180 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Validate a trained YOLOv3 classification model on a classification dataset. + +Usage: + $ bash data/scripts/get_imagenet.sh --val # download ImageNet val split (6.3G, 50000 images) + $ python classify/val.py --weights yolov5m-cls.pt --data ../datasets/imagenet --img 224 # validate ImageNet + +Usage - formats: + $ python classify/val.py --weights yolov5s-cls.pt # PyTorch + yolov5s-cls.torchscript # TorchScript + yolov5s-cls.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s-cls_openvino_model # OpenVINO + yolov5s-cls.engine # TensorRT + yolov5s-cls.mlmodel # CoreML (macOS-only) + yolov5s-cls_saved_model # TensorFlow SavedModel + yolov5s-cls.pb # TensorFlow GraphDef + yolov5s-cls.tflite # TensorFlow Lite + yolov5s-cls_edgetpu.tflite # TensorFlow Edge TPU + yolov5s-cls_paddle_model # PaddlePaddle +""" + +import argparse +import os +import sys +from pathlib import Path + +import torch +from tqdm import tqdm + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from models.common import DetectMultiBackend +from utils.dataloaders import create_classification_dataloader +from utils.general import ( + LOGGER, + TQDM_BAR_FORMAT, + Profile, + check_img_size, + check_requirements, + colorstr, + increment_path, + print_args, +) +from utils.torch_utils import select_device, smart_inference_mode + + +@smart_inference_mode() +def run( + data=ROOT / "../datasets/mnist", # dataset dir + weights=ROOT / "yolov5s-cls.pt", # model.pt path(s) + batch_size=128, # batch size + imgsz=224, # inference size (pixels) + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + workers=8, # max dataloader workers (per RANK in DDP mode) + verbose=False, # verbose output + project=ROOT / "runs/val-cls", # save to project/name + name="exp", # save to project/name + exist_ok=False, # existing project/name ok, do not increment + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + model=None, + dataloader=None, + criterion=None, + pbar=None, +): + """Evaluate a YOLOv3 classification model on the specified dataset, providing accuracy metrics.""" + # Initialize/load model and set device + training = model is not None + if training: # called by train.py + device, pt, jit, engine = next(model.parameters()).device, True, False, False # get model device, PyTorch model + half &= device.type != "cpu" # half precision only supported on CUDA + model.half() if half else model.float() + else: # called directly + device = select_device(device, batch_size=batch_size) + + # Directories + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + save_dir.mkdir(parents=True, exist_ok=True) # make dir + + # Load model + model = DetectMultiBackend(weights, device=device, dnn=dnn, fp16=half) + stride, pt, jit, engine = model.stride, model.pt, model.jit, model.engine + imgsz = check_img_size(imgsz, s=stride) # check image size + half = model.fp16 # FP16 supported on limited backends with CUDA + if engine: + batch_size = model.batch_size + else: + device = model.device + if not (pt or jit): + batch_size = 1 # export.py models default to batch-size 1 + LOGGER.info(f"Forcing --batch-size 1 square inference (1,3,{imgsz},{imgsz}) for non-PyTorch models") + + # Dataloader + data = Path(data) + test_dir = data / "test" if (data / "test").exists() else data / "val" # data/test or data/val + dataloader = create_classification_dataloader( + path=test_dir, imgsz=imgsz, batch_size=batch_size, augment=False, rank=-1, workers=workers + ) + + model.eval() + pred, targets, loss, dt = [], [], 0, (Profile(), Profile(), Profile()) + n = len(dataloader) # number of batches + action = "validating" if dataloader.dataset.root.stem == "val" else "testing" + desc = f"{pbar.desc[:-36]}{action:>36}" if pbar else f"{action}" + bar = tqdm(dataloader, desc, n, not training, bar_format=TQDM_BAR_FORMAT, position=0) + with torch.cuda.amp.autocast(enabled=device.type != "cpu"): + for images, labels in bar: + with dt[0]: + images, labels = images.to(device, non_blocking=True), labels.to(device) + + with dt[1]: + y = model(images) + + with dt[2]: + pred.append(y.argsort(1, descending=True)[:, :5]) + targets.append(labels) + if criterion: + loss += criterion(y, labels) + + loss /= n + pred, targets = torch.cat(pred), torch.cat(targets) + correct = (targets[:, None] == pred).float() + acc = torch.stack((correct[:, 0], correct.max(1).values), dim=1) # (top1, top5) accuracy + top1, top5 = acc.mean(0).tolist() + + if pbar: + pbar.desc = f"{pbar.desc[:-36]}{loss:>12.3g}{top1:>12.3g}{top5:>12.3g}" + if verbose: # all classes + LOGGER.info(f"{'Class':>24}{'Images':>12}{'top1_acc':>12}{'top5_acc':>12}") + LOGGER.info(f"{'all':>24}{targets.shape[0]:>12}{top1:>12.3g}{top5:>12.3g}") + for i, c in model.names.items(): + acc_i = acc[targets == i] + top1i, top5i = acc_i.mean(0).tolist() + LOGGER.info(f"{c:>24}{acc_i.shape[0]:>12}{top1i:>12.3g}{top5i:>12.3g}") + + # Print results + t = tuple(x.t / len(dataloader.dataset.samples) * 1e3 for x in dt) # speeds per image + shape = (1, 3, imgsz, imgsz) + LOGGER.info(f"Speed: %.1fms pre-process, %.1fms inference, %.1fms post-process per image at shape {shape}" % t) + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}") + + return top1, top5, loss + + +def parse_opt(): + """Parses command-line options for model configuration and returns an argparse.Namespace of options.""" + parser = argparse.ArgumentParser() + parser.add_argument("--data", type=str, default=ROOT / "../datasets/mnist", help="dataset path") + parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov5s-cls.pt", help="model.pt path(s)") + parser.add_argument("--batch-size", type=int, default=128, help="batch size") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=224, help="inference size (pixels)") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--verbose", nargs="?", const=True, default=True, help="verbose output") + parser.add_argument("--project", default=ROOT / "runs/val-cls", help="save to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") + opt = parser.parse_args() + print_args(vars(opt)) + return opt + + +def main(opt): + """Executes the main pipeline, checks and installs requirements, then runs inference or training based on provided + options. + """ + check_requirements(ROOT / "requirements.txt", exclude=("tensorboard", "thop")) + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/data/5k.shapes b/data/5k.shapes deleted file mode 100644 index d4d57b67e9..0000000000 --- a/data/5k.shapes +++ /dev/null @@ -1,5000 +0,0 @@ -640 480 -640 480 -428 640 -640 480 -640 480 -640 407 -640 480 -640 427 -500 343 -621 640 -480 640 -640 427 -424 640 -640 480 -640 424 -640 480 -640 427 -500 375 -640 480 -640 479 -427 640 -640 480 -640 425 -640 480 -400 338 -480 640 -640 428 -640 640 -640 338 -640 480 -640 427 -640 384 -480 640 -640 480 -640 426 -425 640 -512 640 -640 415 -640 480 -640 319 -640 426 -640 427 -640 364 -640 480 -480 640 -558 640 -640 528 -612 612 -481 640 -640 427 -640 360 -457 640 -640 427 -480 640 -459 640 -640 425 -640 521 -640 424 -640 513 -480 640 -640 346 -640 361 -640 427 -500 332 -640 427 -640 427 -640 443 -500 333 -640 427 -640 480 -640 430 -640 428 -640 337 -640 640 -640 480 -480 640 -424 640 -640 640 -500 331 -640 427 -500 375 -640 480 -480 640 -426 640 -500 476 -427 640 -640 446 -640 427 -640 424 -532 640 -640 572 -640 320 -640 424 -500 375 -640 427 -500 395 -480 640 -333 500 -640 360 -640 319 -640 480 -640 427 -640 425 -640 480 -640 428 -640 480 -427 640 -480 640 -640 480 -640 426 -640 427 -500 333 -375 500 -640 480 -640 457 -640 480 -640 425 -612 612 -640 480 -640 427 -640 480 -640 426 -640 640 -640 451 -500 500 -427 640 -640 478 -640 480 -640 480 -640 427 -640 427 -640 481 -640 427 -427 640 -480 640 -640 480 -513 640 -640 408 -640 426 -379 640 -640 440 -640 425 -424 640 -640 427 -480 640 -640 359 -640 427 -427 640 -512 640 -461 640 -478 640 -640 480 -427 640 -640 427 -493 640 -500 347 -500 403 -640 525 -640 478 -640 371 -640 406 -640 480 -333 500 -640 480 -500 334 -531 640 -640 480 -500 375 -640 480 -640 480 -479 640 -500 375 -426 640 -500 375 -640 404 -640 425 -640 427 -640 480 -500 333 -640 480 -640 480 -500 375 -480 640 -640 425 -480 640 -640 457 -640 480 -640 640 -640 414 -500 375 -480 640 -426 640 -640 427 -482 640 -333 500 -500 362 -640 427 -640 427 -640 478 -640 480 -640 424 -640 480 -480 640 -640 480 -612 612 -480 640 -375 500 -640 480 -480 640 -400 515 -640 524 -640 480 -500 426 -640 426 -426 640 -640 428 -640 427 -640 427 -612 612 -640 427 -640 426 -640 426 -480 640 -427 640 -640 427 -640 626 -500 375 -640 427 -459 640 -500 413 -640 426 -640 480 -640 278 -640 480 -640 480 -640 426 -640 480 -480 640 -640 383 -640 480 -640 480 -481 640 -480 640 -640 480 -619 640 -640 483 -640 480 -640 368 -500 375 -459 640 -480 640 -427 640 -426 640 -640 480 -500 375 -640 424 -375 500 -640 427 -427 640 -427 640 -640 480 -640 427 -640 426 -333 640 -360 640 -640 383 -427 640 -640 390 -640 640 -500 378 -426 640 -640 322 -334 640 -375 500 -640 480 -426 640 -640 426 -500 375 -426 640 -612 612 -458 640 -480 640 -427 640 -640 419 -500 375 -427 640 -345 500 -500 333 -640 480 -640 480 -640 480 -640 550 -640 480 -480 640 -427 640 -640 480 -480 640 -500 375 -612 612 -375 500 -640 480 -640 427 -640 360 -480 640 -600 550 -639 640 -425 640 -640 480 -612 612 -576 640 -500 375 -512 640 -640 360 -640 480 -640 426 -640 426 -612 612 -640 480 -640 427 -427 640 -640 451 -640 480 -640 480 -640 415 -426 640 -640 426 -640 448 -640 480 -500 375 -640 480 -480 640 -640 427 -640 407 -640 528 -640 519 -640 431 -478 640 -640 427 -640 427 -500 500 -640 427 -640 427 -640 413 -640 478 -500 375 -640 424 -640 480 -640 388 -640 480 -500 375 -640 428 -426 640 -473 640 -480 640 -640 347 -640 478 -640 480 -500 379 -640 426 -640 437 -640 427 -640 427 -640 480 -480 640 -426 640 -425 500 -500 333 -500 500 -640 480 -640 428 -640 480 -640 396 -500 480 -640 427 -640 418 -640 480 -640 426 -333 500 -640 426 -640 480 -640 480 -640 424 -472 640 -425 640 -640 401 -640 624 -612 612 -640 426 -640 428 -640 425 -640 480 -500 374 -640 480 -480 640 -427 640 -640 301 -640 480 -640 480 -480 640 -480 640 -500 375 -640 480 -640 480 -640 427 -640 512 -640 373 -480 640 -500 333 -480 640 -640 427 -500 372 -640 480 -640 480 -375 500 -640 360 -640 428 -612 612 -640 480 -480 640 -640 427 -427 640 -500 375 -640 360 -480 640 -640 480 -480 640 -640 480 -480 640 -640 425 -480 640 -640 470 -491 640 -640 426 -612 612 -640 480 -640 428 -480 320 -640 427 -640 480 -640 480 -640 427 -640 480 -640 362 -640 415 -334 500 -640 640 -640 554 -640 427 -640 427 -640 480 -640 426 -640 365 -640 574 -465 640 -424 640 -640 480 -640 427 -425 640 -640 428 -426 640 -640 480 -640 480 -478 640 -640 480 -640 425 -480 640 -640 428 -480 640 -640 427 -480 640 -640 428 -640 426 -345 415 -640 427 -640 480 -640 419 -640 478 -456 640 -640 427 -640 193 -640 360 -500 375 -640 480 -640 458 -480 640 -612 612 -640 478 -640 480 -480 640 -640 426 -640 427 -480 640 -640 481 -640 427 -375 500 -500 375 -640 427 -640 425 -640 360 -500 343 -640 427 -640 480 -640 391 -634 640 -640 425 -500 429 -333 500 -426 640 -640 480 -640 428 -640 547 -375 500 -432 354 -640 480 -640 480 -500 334 -640 480 -375 500 -640 480 -640 427 -360 640 -640 480 -640 426 -640 480 -640 427 -640 483 -640 480 -640 480 -640 425 -450 303 -640 480 -640 334 -640 425 -401 640 -640 427 -500 375 -640 424 -640 338 -640 561 -266 640 -640 428 -640 459 -375 500 -400 300 -640 480 -640 480 -640 427 -480 640 -375 500 -640 480 -640 480 -640 480 -480 640 -424 640 -480 640 -426 640 -640 429 -640 480 -424 640 -640 480 -640 480 -640 426 -640 307 -500 375 -640 390 -640 480 -465 640 -640 480 -640 480 -480 640 -640 424 -480 640 -640 360 -640 480 -640 427 -640 439 -640 427 -640 453 -640 480 -480 640 -640 433 -640 480 -640 478 -640 480 -500 436 -426 640 -640 360 -612 612 -640 480 -612 612 -640 425 -430 640 -640 480 -480 640 -500 500 -640 263 -640 480 -640 427 -640 478 -640 418 -640 378 -640 427 -640 512 -512 640 -640 505 -481 640 -640 426 -480 640 -500 375 -640 426 -640 478 -640 425 -370 500 -500 333 -640 427 -383 640 -640 427 -640 480 -500 375 -500 375 -478 640 -500 379 -427 640 -640 480 -480 640 -438 640 -640 480 -375 500 -431 640 -500 281 -500 311 -500 400 -640 427 -640 427 -640 480 -640 426 -640 480 -427 640 -478 640 -480 640 -640 428 -640 478 -640 480 -640 480 -640 483 -428 500 -640 428 -640 427 -640 426 -640 425 -640 427 -500 375 -640 480 -640 480 -640 640 -640 457 -640 428 -640 480 -480 640 -640 480 -640 499 -480 640 -640 480 -640 359 -500 333 -480 640 -427 640 -375 500 -640 480 -480 640 -640 480 -480 640 -640 480 -640 480 -640 360 -640 360 -640 480 -640 438 -426 640 -480 640 -640 480 -375 500 -640 480 -640 480 -500 333 -640 640 -479 640 -640 360 -640 427 -640 245 -640 480 -612 612 -640 601 -640 454 -640 427 -640 480 -448 336 -640 480 -640 604 -640 480 -500 333 -640 480 -640 427 -640 480 -500 333 -640 480 -480 640 -640 424 -640 424 -640 480 -500 332 -480 640 -640 427 -480 640 -640 403 -609 640 -640 480 -640 480 -412 500 -640 425 -640 428 -640 427 -500 336 -640 474 -640 480 -640 428 -500 375 -640 480 -640 480 -640 366 -480 640 -640 481 -640 480 -375 500 -640 480 -480 640 -640 424 -640 425 -344 500 -500 375 -640 480 -640 487 -640 389 -640 427 -500 375 -640 426 -640 426 -500 375 -640 447 -504 640 -426 640 -640 480 -640 480 -480 640 -640 428 -640 427 -640 427 -640 480 -640 425 -640 427 -640 429 -357 500 -640 480 -640 480 -447 640 -500 357 -479 640 -640 483 -480 640 -640 425 -426 640 -640 426 -640 428 -427 640 -639 640 -640 427 -640 355 -640 480 -640 414 -360 640 -640 427 -640 480 -424 640 -640 413 -500 338 -640 423 -480 640 -338 500 -640 439 -640 425 -640 428 -265 500 -640 427 -640 595 -640 480 -640 400 -639 640 -640 640 -500 400 -500 375 -640 434 -640 480 -480 640 -640 480 -640 400 -500 375 -640 427 -640 430 -640 480 -640 480 -640 640 -640 480 -640 590 -640 480 -640 426 -500 326 -640 427 -640 480 -600 400 -640 392 -640 480 -640 480 -640 360 -640 480 -640 425 -612 612 -240 320 -480 640 -480 640 -500 375 -640 427 -640 480 -375 500 -640 427 -640 429 -500 375 -428 640 -500 487 -640 480 -640 427 -640 533 -640 640 -640 480 -500 326 -640 480 -640 427 -640 480 -426 640 -640 480 -640 480 -480 640 -640 491 -640 427 -500 333 -500 375 -472 640 -506 640 -640 425 -500 375 -640 426 -432 640 -640 426 -333 500 -500 357 -640 461 -375 500 -640 438 -640 427 -500 332 -640 375 -640 480 -500 333 -640 480 -612 612 -640 427 -640 428 -640 480 -640 423 -640 480 -640 426 -640 426 -640 548 -640 480 -640 427 -427 640 -640 427 -640 428 -640 478 -640 480 -457 640 -640 459 -640 480 -640 435 -400 267 -640 480 -611 640 -640 480 -640 427 -640 480 -640 480 -640 429 -640 427 -640 480 -500 333 -480 640 -480 640 -427 640 -427 640 -480 640 -640 384 -640 427 -426 640 -640 360 -640 573 -578 640 -640 480 -640 426 -480 640 -640 429 -640 480 -640 426 -480 640 -334 500 -640 427 -640 347 -640 481 -640 427 -640 480 -427 640 -640 480 -640 480 -640 480 -640 480 -500 400 -640 480 -640 426 -640 425 -425 640 -427 640 -640 480 -425 640 -480 640 -640 484 -480 640 -640 426 -640 427 -640 425 -640 640 -640 480 -426 640 -640 429 -480 640 -640 427 -480 640 -640 427 -640 480 -426 640 -640 480 -640 426 -640 425 -426 640 -640 470 -640 480 -640 360 -640 480 -640 480 -640 480 -500 281 -640 480 -640 427 -640 427 -640 427 -640 423 -640 425 -640 427 -500 333 -480 640 -457 640 -640 427 -640 480 -425 640 -600 448 -640 425 -640 480 -640 480 -480 640 -640 425 -640 426 -640 427 -640 361 -640 480 -500 375 -640 487 -480 640 -500 375 -640 426 -500 375 -500 396 -500 332 -375 500 -640 400 -640 480 -480 640 -640 424 -640 480 -427 640 -368 640 -640 425 -640 428 -612 612 -480 640 -640 282 -640 428 -500 342 -640 440 -500 334 -640 426 -500 333 -640 427 -640 428 -500 333 -640 640 -500 374 -640 426 -640 425 -429 640 -640 433 -480 640 -640 490 -500 400 -640 480 -640 360 -640 480 -612 612 -640 393 -640 480 -480 640 -480 640 -640 426 -428 640 -640 456 -640 470 -420 266 -640 426 -480 640 -640 427 -640 640 -640 426 -506 640 -640 478 -640 425 -640 480 -640 480 -640 480 -640 512 -500 475 -612 612 -640 640 -480 640 -640 427 -640 427 -640 460 -613 640 -480 640 -480 640 -640 314 -640 480 -480 640 -640 424 -640 427 -640 480 -640 480 -458 640 -640 427 -640 443 -640 428 -640 427 -424 640 -640 427 -426 640 -640 457 -427 640 -640 427 -640 480 -480 640 -640 480 -335 500 -480 640 -640 425 -640 360 -429 640 -640 425 -640 427 -640 394 -491 640 -640 480 -640 480 -429 640 -640 484 -640 458 -333 500 -640 480 -480 640 -388 640 -640 425 -640 480 -640 427 -640 427 -640 480 -500 333 -640 428 -640 480 -640 479 -640 513 -425 640 -500 334 -375 500 -427 640 -480 640 -640 549 -640 480 -640 480 -640 428 -358 500 -640 428 -480 640 -480 640 -640 403 -640 361 -640 424 -640 359 -408 408 -640 374 -283 500 -640 427 -640 321 -640 424 -640 480 -500 357 -640 480 -640 426 -427 640 -640 480 -640 427 -640 416 -640 426 -640 480 -426 640 -640 480 -640 480 -375 500 -640 284 -640 424 -640 480 -640 480 -640 480 -640 366 -640 526 -480 640 -480 640 -460 640 -640 480 -640 302 -640 428 -640 428 -640 359 -612 612 -500 281 -640 427 -640 427 -640 480 -640 480 -640 427 -640 427 -478 640 -500 333 -640 360 -640 429 -640 480 -366 640 -424 640 -640 359 -500 338 -640 427 -640 427 -640 354 -640 480 -640 424 -478 640 -640 360 -427 640 -427 640 -428 640 -427 640 -640 423 -640 388 -431 640 -491 640 -640 426 -640 428 -640 427 -640 480 -640 360 -640 428 -427 640 -333 500 -640 480 -431 640 -640 426 -640 426 -640 427 -640 423 -425 640 -480 640 -640 480 -396 640 -640 480 -640 427 -640 504 -640 426 -480 640 -375 500 -427 640 -428 640 -640 480 -640 360 -640 424 -640 428 -479 640 -640 360 -426 640 -427 640 -640 512 -640 426 -640 520 -480 640 -500 333 -500 352 -640 473 -426 640 -640 427 -640 427 -640 480 -500 375 -640 427 -640 412 -640 480 -500 333 -640 404 -640 426 -500 375 -509 640 -640 480 -640 371 -500 375 -640 480 -640 436 -640 298 -640 480 -640 480 -640 427 -640 425 -640 428 -640 480 -640 426 -640 427 -640 539 -640 480 -427 640 -425 640 -640 360 -640 480 -640 480 -640 427 -612 612 -640 427 -480 640 -640 349 -375 500 -640 480 -640 441 -379 640 -500 375 -640 480 -640 426 -612 612 -640 427 -480 640 -613 449 -640 640 -640 549 -640 424 -640 480 -500 332 -500 333 -640 352 -640 427 -480 640 -640 480 -640 480 -640 480 -612 612 -426 640 -640 353 -426 640 -640 428 -640 488 -427 640 -640 480 -385 640 -375 500 -424 640 -500 333 -640 476 -640 479 -386 640 -640 480 -486 500 -640 360 -640 427 -640 480 -640 478 -640 480 -640 480 -640 480 -640 480 -500 399 -500 375 -640 427 -640 426 -640 501 -374 500 -640 480 -640 427 -640 427 -457 640 -457 640 -427 640 -640 427 -640 427 -500 375 -427 640 -640 480 -640 416 -640 464 -500 375 -640 480 -640 480 -640 480 -640 480 -640 423 -480 640 -640 427 -640 360 -640 360 -428 640 -503 640 -640 428 -640 427 -640 427 -500 333 -426 640 -429 640 -427 640 -640 400 -500 332 -480 640 -500 266 -500 357 -360 640 -640 427 -427 640 -640 480 -640 425 -612 612 -424 640 -640 427 -427 640 -640 426 -640 640 -640 480 -640 428 -500 375 -612 612 -500 333 -640 426 -640 480 -500 333 -640 428 -640 428 -480 640 -640 512 -640 365 -375 500 -640 427 -640 229 -640 480 -640 480 -640 480 -640 440 -640 428 -640 427 -480 640 -428 640 -500 375 -640 422 -640 427 -480 640 -480 640 -640 427 -500 375 -640 427 -587 640 -640 427 -500 400 -640 492 -500 375 -640 360 -427 640 -480 640 -640 478 -640 427 -480 640 -640 480 -640 425 -640 480 -640 427 -640 427 -640 427 -640 383 -640 364 -640 480 -640 349 -480 640 -640 426 -640 480 -335 500 -640 480 -640 480 -640 427 -640 480 -640 480 -478 640 -640 426 -640 426 -640 427 -640 480 -640 426 -427 640 -426 640 -640 480 -640 436 -426 640 -427 640 -425 640 -640 427 -640 406 -640 480 -612 612 -640 426 -425 640 -480 640 -480 640 -640 493 -375 500 -640 422 -640 426 -361 640 -640 427 -640 427 -640 504 -640 428 -640 480 -640 510 -640 480 -640 514 -640 424 -640 480 -480 640 -640 427 -640 480 -640 426 -640 480 -640 427 -640 432 -427 640 -640 439 -640 512 -640 480 -488 364 -427 640 -640 349 -375 500 -640 426 -640 427 -480 640 -500 332 -640 480 -640 424 -640 480 -333 500 -500 351 -640 480 -640 480 -640 480 -640 428 -640 428 -427 640 -640 427 -640 480 -426 640 -640 425 -640 512 -640 480 -478 640 -640 480 -640 501 -640 427 -460 500 -500 322 -640 480 -640 480 -480 640 -640 480 -500 333 -640 424 -640 424 -612 612 -640 426 -640 480 -640 480 -640 500 -427 640 -640 427 -500 375 -640 480 -500 354 -400 302 -480 640 -640 427 -512 640 -387 640 -640 457 -426 640 -640 427 -640 480 -640 427 -480 640 -640 427 -480 640 -640 480 -640 426 -640 640 -426 640 -425 640 -640 436 -640 358 -640 426 -640 480 -612 612 -480 640 -640 480 -640 355 -500 333 -573 640 -640 360 -640 426 -640 480 -640 480 -640 426 -640 480 -426 640 -640 480 -640 427 -640 427 -640 427 -640 426 -612 612 -480 640 -640 425 -640 480 -500 355 -640 380 -640 427 -353 500 -640 427 -427 640 -640 426 -640 480 -640 427 -640 418 -478 640 -640 425 -500 399 -640 480 -640 427 -600 402 -500 330 -640 425 -640 428 -640 427 -480 640 -509 640 -640 429 -458 640 -480 640 -640 425 -640 427 -640 427 -640 425 -640 427 -612 612 -500 381 -640 426 -427 640 -640 480 -640 478 -640 480 -640 480 -640 480 -640 480 -427 640 -480 640 -640 640 -640 361 -480 640 -640 480 -640 427 -640 408 -640 480 -640 480 -480 640 -480 640 -640 572 -640 440 -640 480 -500 346 -640 636 -500 334 -640 498 -640 426 -424 640 -640 480 -426 640 -500 333 -480 640 -353 480 -500 375 -640 373 -640 426 -480 640 -640 424 -640 480 -640 425 -500 335 -500 333 -640 478 -640 451 -480 640 -640 427 -383 640 -474 640 -640 360 -640 427 -426 640 -640 427 -500 431 -640 427 -640 480 -500 375 -640 480 -640 480 -640 480 -640 480 -640 480 -640 426 -640 480 -640 425 -518 640 -640 424 -640 430 -480 640 -640 425 -500 375 -375 500 -500 375 -480 320 -640 426 -640 480 -375 500 -500 375 -478 640 -612 612 -640 437 -640 425 -640 424 -640 480 -640 574 -640 427 -500 333 -399 640 -640 480 -427 640 -640 462 -480 640 -640 426 -640 429 -640 360 -640 458 -640 427 -640 603 -640 480 -640 384 -427 640 -375 500 -513 640 -640 496 -640 478 -640 480 -640 480 -500 375 -640 426 -480 640 -640 480 -640 426 -640 427 -640 478 -640 640 -640 427 -640 608 -640 480 -639 640 -427 640 -640 343 -640 479 -640 640 -427 640 -640 398 -480 640 -640 432 -426 640 -500 375 -480 640 -640 480 -640 480 -480 640 -640 480 -500 375 -640 425 -640 480 -500 335 -500 375 -591 640 -640 427 -640 428 -427 640 -426 640 -640 425 -600 420 -423 640 -640 478 -500 404 -640 426 -552 346 -640 431 -640 229 -640 427 -640 480 -640 480 -500 375 -500 316 -439 500 -480 640 -640 427 -427 640 -480 640 -640 424 -640 480 -640 480 -640 480 -429 640 -640 427 -640 426 -640 480 -426 640 -640 480 -640 438 -640 427 -640 480 -640 429 -425 640 -500 375 -500 375 -640 480 -480 640 -640 424 -500 375 -640 480 -426 640 -640 451 -640 480 -640 480 -640 575 -480 640 -640 451 -640 425 -640 401 -640 457 -424 640 -640 480 -332 500 -323 640 -640 480 -640 480 -480 640 -640 289 -640 480 -640 426 -640 457 -640 480 -640 426 -640 480 -640 444 -640 480 -480 640 -427 640 -640 480 -640 480 -640 471 -480 640 -640 427 -525 525 -375 500 -640 348 -500 334 -640 480 -500 375 -425 640 -640 425 -640 427 -640 480 -640 427 -640 428 -500 391 -640 480 -640 427 -640 427 -640 480 -640 359 -640 640 -500 333 -640 426 -640 442 -612 612 -640 427 -457 640 -640 427 -640 512 -640 614 -640 361 -640 480 -500 375 -640 428 -640 480 -500 391 -640 425 -500 375 -640 428 -640 425 -612 612 -640 480 -640 628 -640 528 -640 425 -640 480 -640 480 -640 478 -480 640 -427 640 -427 640 -640 451 -427 640 -640 480 -640 427 -640 480 -640 480 -640 427 -640 424 -640 480 -640 455 -640 480 -640 428 -336 500 -640 480 -480 640 -500 383 -459 640 -640 427 -640 456 -375 500 -640 480 -500 375 -500 281 -640 425 -480 640 -640 424 -640 361 -507 640 -334 500 -640 480 -500 400 -640 427 -640 426 -640 426 -640 319 -480 640 -420 640 -640 427 -480 640 -640 427 -427 640 -500 375 -640 640 -640 480 -320 480 -640 361 -500 400 -640 427 -500 376 -429 640 -500 381 -640 427 -640 426 -640 563 -640 480 -640 480 -640 429 -640 512 -640 480 -500 375 -640 480 -640 426 -424 640 -480 640 -544 640 -612 612 -640 480 -640 427 -500 333 -640 427 -640 480 -500 357 -339 500 -640 425 -640 406 -640 480 -500 370 -640 480 -640 484 -640 316 -640 480 -640 426 -480 640 -425 640 -640 427 -480 640 -640 480 -640 425 -480 640 -640 321 -640 436 -480 640 -640 480 -640 426 -640 480 -640 507 -640 480 -640 469 -500 333 -640 426 -640 480 -640 478 -640 426 -640 427 -640 425 -640 453 -640 427 -427 640 -480 360 -640 427 -500 332 -640 427 -375 500 -640 480 -500 334 -600 402 -640 480 -500 375 -480 640 -320 240 -640 427 -640 480 -640 480 -480 640 -640 427 -640 480 -640 427 -500 375 -640 427 -640 480 -477 640 -612 612 -640 481 -640 488 -480 640 -640 427 -640 480 -500 375 -640 425 -640 480 -640 455 -640 480 -500 332 -640 480 -500 375 -640 427 -640 427 -640 480 -640 480 -640 282 -335 500 -500 375 -640 427 -640 480 -640 480 -640 480 -640 480 -427 640 -333 500 -640 426 -640 351 -640 425 -478 640 -400 346 -500 393 -500 375 -640 511 -500 375 -480 640 -640 427 -640 426 -640 426 -640 480 -427 640 -640 427 -640 427 -640 640 -640 480 -640 427 -640 427 -640 340 -428 640 -640 233 -640 524 -385 289 -640 427 -640 640 -640 435 -360 450 -338 450 -640 351 -457 640 -500 375 -640 427 -640 427 -640 363 -640 426 -640 480 -640 444 -640 638 -640 383 -385 308 -375 500 -426 640 -640 550 -480 640 -448 336 -640 426 -640 427 -480 640 -640 420 -640 640 -640 523 -640 383 -500 377 -640 427 -375 500 -640 232 -427 640 -478 640 -640 424 -481 640 -640 427 -640 480 -500 332 -640 426 -640 480 -427 640 -500 337 -640 476 -640 480 -640 480 -428 640 -640 480 -500 375 -640 313 -640 426 -640 425 -640 480 -640 426 -375 500 -426 640 -640 480 -500 333 -500 375 -612 612 -500 227 -640 478 -640 428 -640 427 -640 425 -428 640 -500 375 -640 427 -500 333 -640 480 -480 640 -480 640 -640 425 -640 428 -640 480 -640 480 -480 640 -640 428 -640 428 -640 480 -640 427 -480 640 -640 480 -640 427 -496 640 -480 640 -640 583 -480 640 -640 332 -427 640 -480 640 -640 480 -640 426 -473 640 -299 300 -640 360 -640 427 -640 480 -640 466 -640 480 -426 640 -500 333 -640 480 -457 640 -480 640 -640 480 -480 640 -640 480 -640 480 -640 479 -640 640 -640 480 -640 457 -640 426 -640 426 -640 361 -480 640 -640 640 -640 424 -640 384 -500 410 -640 426 -500 375 -500 375 -640 480 -426 640 -500 334 -640 480 -500 371 -640 428 -640 427 -640 427 -640 480 -640 480 -640 480 -640 425 -640 480 -500 375 -640 480 -561 640 -500 333 -640 480 -427 640 -640 427 -640 427 -640 426 -640 480 -500 375 -640 480 -640 427 -639 640 -375 500 -424 640 -640 514 -375 500 -640 427 -640 479 -335 500 -640 472 -500 375 -500 375 -427 640 -500 375 -612 612 -640 478 -418 640 -640 318 -640 294 -640 462 -480 640 -500 375 -640 461 -640 393 -640 480 -640 360 -375 500 -480 640 -640 480 -640 427 -640 455 -640 325 -640 480 -640 480 -430 640 -480 640 -500 375 -640 342 -640 480 -640 426 -458 640 -500 375 -413 640 -640 427 -640 393 -640 409 -640 414 -640 480 -640 426 -640 425 -640 480 -640 480 -640 494 -640 427 -480 640 -640 481 -375 500 -640 427 -640 427 -427 640 -500 333 -640 484 -640 480 -612 612 -480 640 -480 640 -640 426 -640 427 -640 480 -640 368 -407 640 -480 640 -334 500 -500 375 -375 500 -640 428 -424 640 -640 425 -640 427 -640 425 -480 640 -480 640 -640 424 -480 640 -640 426 -386 640 -640 480 -640 640 -640 640 -480 640 -640 427 -640 428 -500 332 -640 478 -640 427 -375 500 -640 480 -640 480 -500 375 -640 480 -640 470 -480 640 -480 640 -640 427 -440 330 -640 480 -640 366 -640 359 -500 340 -640 480 -640 479 -500 333 -430 430 -553 371 -500 375 -640 513 -640 426 -640 511 -375 500 -429 640 -640 427 -274 500 -640 424 -640 480 -640 428 -500 375 -640 458 -640 480 -640 221 -428 640 -480 640 -640 425 -500 375 -425 640 -267 400 -640 427 -640 427 -640 424 -480 640 -640 480 -640 480 -480 640 -640 428 -426 640 -500 375 -640 480 -480 640 -500 334 -640 454 -584 640 -480 384 -640 427 -640 480 -480 640 -640 425 -480 640 -640 480 -640 612 -500 333 -333 500 -640 480 -640 427 -640 480 -480 640 -640 425 -640 480 -640 427 -640 480 -640 436 -640 426 -640 480 -600 402 -640 451 -427 640 -640 422 -640 427 -640 424 -640 480 -640 640 -640 480 -512 640 -640 480 -500 334 -480 640 -640 427 -640 427 -500 375 -480 640 -640 480 -640 512 -640 320 -640 427 -640 427 -612 612 -640 480 -375 500 -427 640 -429 640 -428 640 -640 480 -640 427 -480 640 -640 395 -640 454 -478 640 -640 431 -640 480 -428 640 -640 338 -500 333 -426 640 -640 427 -426 640 -640 427 -418 640 -640 425 -480 640 -640 425 -640 426 -640 360 -120 120 -500 335 -640 426 -640 426 -640 480 -638 640 -640 427 -480 640 -480 640 -500 375 -427 640 -640 503 -640 428 -640 308 -640 480 -640 480 -640 480 -480 640 -533 640 -640 481 -500 333 -500 375 -640 426 -640 425 -640 467 -640 480 -640 426 -427 640 -640 428 -640 480 -640 480 -640 480 -640 363 -375 500 -427 640 -640 425 -426 640 -480 640 -426 640 -640 480 -640 430 -640 300 -640 427 -375 500 -640 428 -375 500 -455 310 -640 427 -500 459 -640 481 -478 640 -640 480 -480 640 -640 480 -500 375 -640 480 -640 426 -640 480 -640 427 -640 480 -640 457 -425 640 -640 480 -640 406 -640 480 -480 640 -500 375 -500 388 -640 480 -448 640 -640 480 -434 640 -640 426 -500 333 -500 326 -640 480 -640 480 -640 480 -640 425 -640 480 -640 427 -640 426 -640 361 -640 480 -640 519 -500 375 -640 480 -500 375 -382 500 -640 480 -640 480 -640 428 -640 480 -612 612 -333 500 -640 512 -612 612 -612 612 -500 375 -640 480 -640 480 -640 349 -413 500 -640 480 -640 425 -640 390 -640 426 -640 359 -335 500 -640 640 -426 640 -640 468 -640 513 -640 465 -640 480 -500 375 -456 640 -480 640 -640 480 -640 480 -426 640 -500 250 -503 640 -500 375 -640 311 -640 460 -480 640 -640 480 -512 640 -480 640 -427 640 -534 640 -480 640 -480 640 -640 425 -480 640 -617 640 -640 427 -640 480 -478 640 -640 480 -640 305 -500 375 -640 425 -640 428 -640 480 -500 281 -480 640 -512 640 -480 360 -640 466 -480 640 -612 612 -640 480 -640 480 -333 500 -640 427 -640 480 -427 640 -640 480 -640 640 -640 480 -640 427 -640 474 -375 500 -640 480 -600 402 -640 480 -640 480 -640 427 -640 480 -500 375 -640 480 -500 375 -635 514 -448 640 -640 435 -428 640 -426 640 -612 612 -500 411 -640 480 -381 500 -640 480 -427 640 -480 640 -640 429 -640 480 -375 500 -640 480 -640 428 -480 640 -480 640 -640 512 -425 640 -478 640 -500 375 -500 375 -403 403 -427 640 -640 360 -480 640 -500 333 -640 360 -640 480 -640 426 -375 500 -500 348 -640 423 -375 500 -640 307 -428 640 -640 480 -640 480 -640 480 -640 418 -375 500 -640 427 -428 640 -640 427 -640 361 -500 375 -640 427 -640 480 -640 427 -425 640 -640 292 -640 360 -640 480 -500 375 -640 480 -500 485 -640 424 -640 480 -640 480 -640 428 -480 640 -640 436 -640 480 -428 640 -640 424 -457 640 -500 332 -640 480 -429 640 -640 429 -428 640 -640 429 -640 426 -640 640 -640 426 -480 640 -640 467 -640 427 -640 480 -500 333 -640 427 -500 338 -640 480 -326 500 -640 465 -640 480 -640 480 -640 423 -640 428 -500 333 -457 640 -375 500 -640 427 -640 425 -640 480 -640 427 -640 428 -500 462 -640 347 -640 400 -480 640 -640 427 -640 427 -640 480 -375 500 -640 475 -403 303 -428 640 -640 480 -640 293 -640 427 -427 640 -640 450 -640 480 -480 640 -640 480 -640 427 -612 612 -640 360 -500 357 -480 640 -640 480 -640 443 -481 640 -640 480 -640 428 -427 640 -640 427 -612 612 -480 640 -425 640 -333 500 -640 427 -640 480 -640 427 -640 424 -640 427 -640 480 -500 400 -500 332 -640 480 -500 375 -500 400 -500 375 -427 640 -443 640 -427 640 -480 640 -640 427 -640 478 -640 480 -640 480 -640 427 -640 425 -640 425 -640 480 -640 408 -480 640 -640 480 -640 480 -612 612 -500 333 -640 420 -480 640 -640 355 -640 480 -640 424 -500 375 -640 480 -640 320 -640 427 -640 480 -427 640 -320 240 -500 333 -389 640 -640 457 -480 640 -427 640 -500 375 -428 640 -640 427 -427 640 -640 425 -640 427 -640 427 -640 408 -640 512 -640 426 -640 426 -640 471 -640 428 -500 375 -640 429 -640 480 -640 480 -500 375 -640 489 -640 425 -640 427 -640 365 -640 480 -479 640 -500 375 -640 427 -640 427 -640 424 -640 480 -640 480 -640 640 -640 460 -640 640 -500 375 -480 640 -426 640 -500 375 -640 524 -640 480 -484 640 -339 329 -640 424 -640 478 -640 432 -640 427 -500 375 -640 426 -473 640 -640 624 -429 640 -480 640 -640 400 -472 640 -506 640 -480 640 -300 500 -375 500 -640 480 -612 612 -640 426 -426 640 -640 480 -640 480 -640 480 -640 427 -379 640 -332 500 -500 333 -640 480 -640 359 -640 333 -640 428 -500 333 -640 480 -640 426 -640 427 -640 368 -640 640 -500 332 -640 428 -640 480 -640 480 -480 640 -640 640 -640 505 -640 400 -480 640 -640 359 -640 480 -640 427 -640 640 -640 427 -640 480 -447 640 -640 480 -500 375 -427 640 -427 640 -426 640 -640 480 -640 360 -500 334 -612 612 -640 480 -640 427 -640 493 -390 500 -427 640 -640 425 -500 303 -640 480 -612 612 -429 640 -640 466 -427 640 -640 480 -640 480 -640 457 -640 427 -617 640 -640 429 -639 640 -640 427 -640 486 -640 271 -480 640 -500 375 -640 427 -480 640 -640 425 -427 640 -640 427 -640 479 -512 640 -434 640 -640 480 -640 480 -478 640 -640 427 -480 640 -640 431 -640 480 -640 427 -612 612 -427 640 -640 427 -640 428 -500 375 -500 375 -640 427 -640 480 -640 427 -500 344 -640 480 -640 480 -640 360 -461 640 -640 428 -427 640 -640 480 -640 366 -375 500 -499 500 -640 425 -640 427 -640 427 -640 425 -500 384 -640 427 -640 480 -640 640 -480 640 -484 640 -640 480 -640 424 -640 427 -426 640 -427 640 -640 424 -640 480 -640 480 -640 480 -613 640 -640 493 -640 427 -480 640 -480 640 -640 426 -640 425 -500 375 -640 480 -500 375 -640 480 -640 478 -480 640 -640 480 -640 480 -480 640 -480 640 -640 480 -640 427 -640 480 -640 458 -640 480 -640 480 -500 333 -640 425 -640 480 -640 427 -500 375 -480 640 -585 640 -480 640 -500 375 -480 640 -427 640 -500 375 -640 640 -500 375 -640 426 -500 375 -640 480 -640 329 -640 427 -427 640 -640 480 -640 286 -640 427 -640 593 -441 640 -640 640 -640 480 -500 367 -480 640 -417 640 -500 375 -640 480 -426 640 -640 454 -427 640 -586 640 -640 480 -427 640 -640 384 -640 427 -640 480 -427 640 -640 450 -640 480 -539 640 -640 427 -429 640 -500 333 -640 503 -640 427 -480 640 -500 333 -394 500 -640 427 -424 640 -640 480 -640 480 -640 426 -640 425 -500 336 -480 640 -612 612 -429 640 -640 478 -640 511 -500 333 -640 427 -640 480 -480 640 -375 500 -640 443 -640 468 -640 427 -480 640 -544 640 -640 424 -640 480 -500 344 -480 640 -640 428 -640 480 -611 640 -640 434 -640 360 -640 471 -640 343 -640 426 -640 497 -640 480 -427 640 -640 480 -640 477 -640 480 -640 480 -640 424 -375 500 -640 427 -640 480 -480 640 -640 424 -640 480 -500 375 -500 334 -640 425 -640 399 -640 425 -640 416 -640 360 -640 480 -640 480 -640 427 -640 480 -640 426 -500 333 -480 640 -640 309 -640 480 -500 379 -428 640 -640 480 -640 478 -640 326 -640 300 -640 480 -640 480 -640 480 -500 350 -640 448 -480 640 -427 640 -500 375 -640 480 -481 640 -640 427 -640 412 -640 427 -640 427 -640 480 -640 427 -500 375 -333 500 -640 427 -640 426 -640 360 -500 439 -640 426 -640 441 -640 427 -640 480 -427 640 -427 640 -500 333 -427 640 -640 480 -640 567 -640 360 -640 373 -640 425 -320 240 -640 480 -427 640 -640 480 -640 427 -480 640 -500 375 -640 424 -425 640 -640 478 -640 480 -427 640 -640 399 -558 640 -426 640 -640 427 -359 640 -640 480 -500 375 -640 480 -640 447 -640 512 -640 480 -640 480 -612 612 -612 612 -640 588 -640 480 -640 427 -640 439 -640 480 -426 640 -640 480 -480 640 -427 640 -640 424 -500 319 -375 500 -640 427 -640 427 -640 480 -640 478 -640 480 -480 640 -640 480 -640 428 -480 640 -640 426 -375 500 -640 478 -279 430 -512 640 -640 267 -640 640 -640 427 -640 457 -427 640 -640 317 -640 481 -480 640 -500 400 -640 480 -480 640 -640 426 -640 427 -375 500 -640 429 -640 480 -375 500 -640 427 -500 375 -640 428 -500 333 -479 640 -333 500 -640 427 -612 612 -640 480 -480 640 -640 640 -640 511 -640 480 -640 480 -640 428 -428 640 -640 480 -640 427 -640 479 -640 458 -640 480 -640 428 -640 427 -640 427 -500 500 -640 427 -640 481 -640 425 -640 638 -640 449 -426 640 -640 480 -640 427 -640 428 -500 281 -640 428 -640 428 -640 480 -500 375 -500 333 -640 427 -500 375 -500 375 -640 427 -640 428 -428 640 -640 427 -640 404 -480 640 -500 333 -640 429 -640 480 -480 640 -427 640 -640 480 -640 426 -454 640 -413 640 -500 375 -640 427 -640 480 -375 500 -640 480 -640 427 -640 480 -640 444 -640 480 -480 640 -640 236 -480 640 -640 428 -640 428 -640 363 -640 480 -640 427 -640 480 -640 480 -395 640 -640 337 -640 427 -640 427 -640 426 -640 414 -640 425 -640 368 -640 427 -500 315 -640 480 -555 640 -500 333 -640 427 -500 334 -485 640 -640 428 -640 480 -640 428 -640 428 -433 640 -640 426 -640 427 -510 640 -640 480 -480 640 -640 480 -640 480 -640 480 -640 470 -640 427 -640 480 -640 426 -640 522 -640 426 -640 426 -640 427 -425 640 -640 483 -640 427 -640 388 -426 640 -424 640 -360 640 -640 428 -640 480 -640 360 -640 515 -640 512 -640 452 -480 640 -427 640 -640 480 -640 480 -640 480 -640 480 -503 640 -480 640 -640 428 -500 331 -427 640 -640 427 -640 480 -640 428 -612 612 -640 480 -640 428 -426 640 -640 538 -500 337 -640 423 -640 480 -640 480 -427 640 -640 480 -500 375 -640 480 -640 480 -640 480 -640 480 -612 612 -640 406 -640 592 -500 330 -640 480 -640 480 -631 640 -500 375 -427 640 -640 480 -640 428 -640 430 -500 332 -640 480 -640 361 -460 640 -640 512 -425 640 -480 640 -640 480 -640 480 -640 480 -500 370 -640 425 -640 360 -640 263 -640 427 -640 427 -640 640 -640 427 -428 640 -640 427 -480 640 -612 612 -333 500 -640 427 -480 640 -640 640 -612 612 -640 480 -640 480 -640 428 -375 500 -640 456 -640 521 -640 427 -640 480 -427 640 -500 343 -640 640 -480 640 -640 480 -480 640 -640 480 -640 480 -481 640 -640 480 -427 369 -640 480 -426 640 -640 480 -500 375 -640 481 -480 640 -600 450 -500 375 -640 480 -640 427 -435 500 -640 427 -640 480 -423 640 -640 480 -640 427 -500 338 -480 640 -640 420 -500 333 -640 425 -640 427 -500 374 -640 480 -640 427 -500 333 -612 612 -640 480 -640 447 -240 320 -640 480 -640 480 -640 427 -640 427 -640 480 -427 640 -640 427 -500 375 -640 505 -640 457 -640 428 -640 480 -337 500 -640 542 -483 640 -640 360 -640 380 -640 428 -424 640 -427 640 -612 612 -500 471 -640 480 -512 640 -640 429 -640 428 -640 640 -640 426 -612 612 -640 427 -500 375 -640 447 -427 640 -640 640 -402 640 -640 480 -640 478 -500 375 -640 285 -506 640 -640 480 -640 425 -640 480 -640 563 -500 375 -640 427 -640 427 -480 640 -640 480 -480 640 -425 640 -500 375 -640 389 -640 480 -640 417 -640 270 -640 427 -500 333 -640 480 -640 480 -568 640 -640 427 -640 480 -640 360 -500 400 -640 425 -640 457 -426 640 -640 480 -640 428 -640 426 -640 426 -640 426 -640 427 -640 617 -500 333 -640 427 -640 426 -500 333 -640 427 -640 480 -640 480 -640 480 -640 426 -428 640 -640 480 -640 428 -640 403 -640 427 -459 500 -640 428 -500 334 -640 480 -640 468 -640 426 -640 477 -510 640 -375 500 -484 640 -640 552 -375 500 -500 375 -640 427 -640 480 -640 426 -480 640 -640 425 -640 437 -640 428 -640 480 -640 480 -640 480 -640 429 -640 427 -640 480 -333 500 -640 398 -612 612 -640 428 -640 427 -508 640 -429 640 -640 427 -500 333 -480 640 -640 480 -640 425 -640 427 -640 480 -427 640 -640 425 -480 640 -544 640 -640 640 -428 640 -640 427 -640 450 -640 425 -375 500 -640 482 -640 426 -519 640 -640 480 -500 375 -640 428 -500 375 -640 360 -640 427 -640 480 -500 375 -375 500 -640 425 -640 362 -401 500 -640 480 -640 427 -640 426 -640 480 -427 640 -640 512 -640 424 -640 480 -480 640 -427 640 -640 428 -640 428 -640 478 -480 640 -640 427 -640 480 -334 500 -640 480 -640 427 -640 241 -480 640 -640 427 -640 427 -640 480 -640 424 -640 548 -427 640 -425 640 -427 640 -640 426 -640 432 -427 640 -640 530 -283 424 -640 480 -640 480 -640 553 -640 442 -373 500 -482 640 -640 480 -640 480 -375 500 -640 360 -640 427 -640 480 -640 427 -640 480 -640 480 -640 427 -427 640 -369 500 -500 375 -640 480 -480 640 -424 640 -640 360 -640 427 -640 479 -480 640 -429 640 -640 480 -640 428 -640 480 -454 640 -428 640 -427 640 -480 640 -428 640 -640 360 -640 480 -426 640 -526 640 -480 640 -640 480 -640 480 -500 333 -640 428 -640 480 -640 640 -640 480 -640 480 -500 375 -640 480 -640 452 -640 473 -640 626 -481 640 -500 375 -640 480 -412 640 -640 427 -500 375 -640 478 -457 640 -640 427 -640 480 -640 427 -640 480 -640 403 -640 561 -500 375 -640 424 -640 480 -640 427 -427 640 -640 480 -425 640 -612 612 -640 427 -500 500 -640 480 -640 427 -640 480 -640 424 -640 480 -640 320 -640 480 -640 425 -375 500 -640 428 -640 427 -640 427 -640 478 -480 640 -640 480 -640 426 -640 427 -612 612 -640 480 -640 480 -500 333 -640 427 -427 640 -640 480 -427 640 -640 478 -640 428 -480 640 -640 425 -478 640 -640 480 -640 426 -480 640 -500 456 -640 428 -640 428 -640 426 -500 375 -640 428 -640 425 -640 360 -640 427 -426 640 -500 486 -640 480 -640 427 -513 640 -480 640 -476 640 -625 426 -640 360 -640 640 -640 427 -640 427 -457 640 -500 375 -640 425 -640 426 -612 612 -428 640 -500 333 -640 427 -470 640 -500 333 -341 500 -640 480 -640 480 -640 427 -640 480 -640 432 -640 426 -640 480 -427 640 -640 480 -640 480 -494 640 -640 424 -375 500 -640 427 -502 640 -434 640 -612 612 -500 375 -640 480 -640 480 -640 480 -375 500 -640 429 -640 480 -640 427 -500 375 -375 500 -640 486 -500 375 -640 427 -640 427 -640 400 -640 480 -424 640 -640 640 -478 640 -640 478 -500 311 -640 400 -640 480 -640 427 -612 612 -640 480 -640 429 -640 427 -480 640 -640 480 -500 375 -640 640 -640 479 -500 375 -640 480 -640 480 -640 427 -640 480 -640 436 -640 480 -640 480 -640 480 -640 480 -375 500 -332 500 -480 640 -640 427 -428 640 -640 480 -640 481 -640 480 -640 428 -640 277 -478 640 -640 396 -427 640 -640 480 -640 426 -640 480 -385 289 -484 640 -612 612 -640 480 -426 640 -640 425 -640 427 -640 427 -640 426 -640 427 -488 640 -346 500 -640 427 -640 480 -640 480 -335 500 -500 333 -640 428 -427 640 -426 640 -640 554 -427 640 -640 426 -640 427 -640 448 -640 480 -640 480 -640 480 -640 480 -640 480 -640 425 -640 480 -640 424 -480 640 -640 425 -480 640 -640 473 -427 640 -640 425 -480 640 -640 457 -640 428 -640 427 -480 640 -640 427 -640 461 -640 425 -500 374 -640 426 -490 640 -640 427 -480 640 -500 375 -640 427 -500 400 -640 480 -640 480 -640 511 -640 480 -640 480 -640 480 -640 427 -640 455 -640 480 -640 604 -640 425 -640 480 -640 427 -640 361 -480 640 -500 373 -640 480 -640 427 -612 612 -640 399 -640 640 -640 640 -480 640 -640 426 -640 427 -317 500 -500 375 -480 640 -640 480 -333 500 -640 480 -640 428 -640 480 -640 480 -640 360 -640 480 -640 488 -640 424 -480 640 -639 640 -640 429 -640 480 -286 409 -640 480 -640 430 -480 640 -604 640 -375 500 -640 425 -500 335 -500 375 -640 480 -640 480 -640 636 -500 191 -640 426 -640 640 -640 480 -640 427 -640 322 -640 425 -640 426 -478 640 -640 480 -500 375 -480 640 -640 427 -640 480 -612 612 -333 500 -640 428 -640 640 -640 425 -612 612 -640 360 -640 424 -640 480 -480 640 -640 400 -640 427 -500 333 -640 480 -500 375 -640 480 -640 475 -600 400 -640 426 -480 640 -480 640 -427 640 -640 427 -500 375 -427 640 -640 356 -500 333 -426 640 -640 480 -640 311 -640 480 -640 480 -640 427 -375 500 -640 360 -640 427 -640 480 -640 427 -640 480 -500 381 -333 500 -500 485 -640 480 -640 480 -640 428 -480 640 -640 427 -640 480 -640 480 -640 427 -446 640 -496 500 -500 375 -640 640 -640 427 -640 424 -640 480 -640 480 -640 473 -413 500 -640 442 -640 427 -500 332 -640 480 -640 513 -640 480 -640 554 -640 480 -640 464 -640 480 -640 427 -640 494 -612 612 -312 504 -640 480 -480 640 -640 396 -334 500 -640 480 -500 375 -640 427 -640 480 -375 500 -640 480 -640 454 -640 427 -640 444 -640 426 -375 500 -428 640 -500 375 -640 428 -293 448 -640 478 -424 640 -640 480 -640 431 -640 640 -640 424 -640 480 -425 640 -640 427 -640 424 -640 480 -500 375 -640 426 -640 480 -427 640 -500 287 -336 500 -640 426 -640 428 -640 480 -500 375 -640 425 -640 402 -640 480 -640 480 -640 480 -640 427 -640 427 -533 640 -640 480 -640 427 -426 640 -640 608 -640 427 -426 640 -640 427 -500 333 -600 400 -640 480 -399 500 -640 480 -375 500 -478 640 -640 425 -640 480 -640 425 -480 640 -640 480 -640 516 -500 375 -640 426 -409 500 -429 640 -640 424 -332 500 -500 400 -640 433 -640 581 -640 425 -492 640 -480 640 -303 640 -428 640 -640 427 -640 427 -640 427 -640 427 -640 427 -640 427 -640 458 -640 480 -500 281 -640 427 -427 640 -640 557 -591 640 -640 379 -640 426 -480 640 -640 427 -480 640 -375 500 -640 491 -640 480 -480 640 -640 480 -640 480 -640 427 -640 427 -427 640 -612 612 -500 298 -640 427 -640 480 -640 480 -640 428 -640 418 -540 640 -640 488 -640 480 -640 399 -640 427 -640 426 -640 512 -640 428 -640 428 -640 480 -360 640 -640 428 -480 640 -500 376 -375 500 -629 489 -640 580 -640 480 -640 335 -394 500 -640 480 -640 480 -640 480 -640 428 -640 480 -640 538 -480 640 -640 428 -640 427 -640 480 -640 427 -640 480 -480 640 -640 427 -485 640 -478 640 -640 428 -640 428 -640 427 -640 376 -640 423 -426 640 -640 425 -640 427 -640 427 -427 640 -640 425 -612 612 -500 375 -478 640 -500 334 -480 640 -640 480 -640 480 -640 418 -500 375 -640 427 -640 424 -640 480 -640 480 -392 500 -640 427 -500 500 -640 640 -640 483 -640 424 -640 426 -640 480 -360 640 -480 640 -640 429 -640 489 -640 427 -427 640 -640 374 -640 426 -480 640 -500 375 -427 640 -640 485 -640 427 -640 427 -640 480 -640 341 -640 480 -500 375 -640 427 -640 480 -631 640 -640 428 -480 640 -425 640 -640 427 -480 640 -640 480 -424 640 -640 360 -640 480 -500 375 -640 427 -427 640 -640 425 -414 500 -480 640 -640 426 -334 500 -375 500 -640 428 -640 478 -480 640 -640 425 -480 640 -426 640 -640 425 -640 480 -640 441 -512 640 -612 612 -430 640 -640 569 -480 640 -640 427 -640 426 -333 500 -640 480 -640 427 -640 480 -640 600 -640 427 -480 640 -640 427 -640 426 -640 458 -640 431 -640 427 -640 426 -426 640 -640 640 -640 480 -640 426 -640 426 -500 345 -500 375 -640 480 -500 333 -640 480 -640 640 -640 559 -640 427 -640 427 -500 333 -640 480 -640 480 -593 640 -500 447 -640 483 -640 427 -480 640 -500 371 -640 320 -640 480 -640 428 -640 480 -640 427 -640 425 -429 640 -640 266 -640 470 -640 360 -427 640 -430 640 -640 426 -426 640 -640 426 -640 450 -480 640 -427 640 -640 480 -500 333 -427 640 -640 427 -425 640 -640 480 -612 612 -640 427 -512 640 -640 480 -640 427 -640 480 -640 367 -439 640 -428 640 -640 360 -480 640 -427 640 -640 538 -640 480 -640 428 -640 425 -640 428 -640 408 -640 453 -640 440 -640 428 -612 612 -640 427 -640 640 -640 480 -640 428 -640 480 -427 640 -640 424 -640 427 -500 375 -426 640 -500 334 -480 640 -640 427 -480 640 -424 640 -640 427 -479 640 -480 640 -640 426 -480 640 -500 375 -500 356 -331 500 -500 334 -500 281 -426 640 -365 480 -480 640 -640 480 -500 366 -640 469 -640 427 -606 640 -640 607 -429 640 -354 500 -640 480 -640 426 -640 424 -640 479 -417 500 -640 480 -639 640 -640 427 -640 426 -640 640 -640 480 -480 640 -640 480 -332 500 -640 428 -640 428 -500 375 -640 480 -640 427 -640 425 -480 640 -480 640 -640 480 -640 427 -500 334 -480 640 -640 480 -640 513 -480 640 -640 427 -640 427 -500 375 -480 640 -427 640 -640 427 -480 640 -640 480 -640 480 -500 375 -640 427 -500 375 -500 375 -478 640 -480 640 -426 640 -612 612 -640 427 -640 521 -640 480 -640 427 -640 424 -259 500 -640 480 -640 480 -640 480 -640 429 -500 412 -640 426 -332 500 -480 640 -640 480 -640 426 -640 457 -640 480 -640 480 -640 207 -480 640 -480 640 -480 640 -640 468 -640 458 -457 640 -640 427 -640 480 -640 480 -511 640 -480 640 -500 490 -640 471 -640 480 -435 500 -640 428 -500 375 -640 437 -640 480 -640 427 -427 640 -640 480 -640 480 -500 333 -640 480 -640 427 -640 480 -640 426 -418 640 -640 480 -640 480 -480 640 -640 425 -640 424 -640 405 -640 427 -640 428 -640 480 -427 640 -427 640 -640 540 -640 496 -480 640 -640 427 -640 428 -429 640 -640 447 -500 375 -427 640 -640 480 -423 640 -640 480 -640 480 -639 640 -640 426 -426 640 -640 481 -425 640 -469 640 -426 640 -427 640 -640 360 -500 375 -640 480 -480 640 -640 389 -640 480 -640 433 -640 427 -640 421 -640 427 -640 425 -640 478 -500 375 -640 425 -640 427 -427 640 -288 352 -500 375 -427 640 -640 480 -500 375 -640 478 -640 427 -640 480 -426 640 -528 640 -640 429 -640 427 -640 478 -480 640 -640 426 -500 375 -427 640 -480 640 -449 640 -640 480 -640 480 -640 426 -640 480 -453 640 -640 480 -500 332 -640 475 -640 428 -640 480 -640 505 -480 640 -500 375 -500 375 -640 427 -640 426 -640 480 -428 640 -640 554 -480 640 -500 363 -480 204 -640 427 -480 640 -612 612 -640 425 -640 480 -427 640 -640 480 -356 500 -500 375 -640 480 -500 497 -429 640 -640 480 -480 640 -500 375 -640 427 -427 640 -640 466 -640 436 -640 480 -427 640 -480 640 -394 640 -393 640 -500 191 -640 457 -640 550 -640 411 -488 640 -640 320 -640 480 -621 640 -640 428 -425 640 -500 333 -640 480 -640 425 -640 427 -640 401 -640 480 -500 375 -374 640 -640 427 -640 480 -640 427 -640 446 -640 480 -640 427 -640 480 -427 640 -640 425 -640 480 -339 500 -640 391 -500 375 -640 427 -480 640 -640 283 -640 640 -640 428 -338 500 -640 427 -640 640 -426 640 -640 480 -640 480 -640 404 -640 480 -640 427 -640 427 -640 426 -640 480 -640 425 -500 334 -640 424 -640 426 -640 361 -640 360 -640 480 -640 427 -640 480 -640 428 -640 596 -640 426 -640 480 -500 355 -456 640 -640 425 -640 480 -640 427 -640 480 -530 640 -640 425 -375 500 -475 640 -640 481 -640 426 -640 425 -425 640 -640 428 -640 387 -480 640 -640 427 -640 427 -640 576 -640 427 -640 480 -640 480 -359 640 -640 480 -500 400 -500 374 -480 640 -480 640 -640 389 -640 456 -427 640 -640 480 -640 427 -612 612 -500 375 -640 427 -640 480 -640 640 -640 480 -500 339 -640 480 -640 427 -640 427 -500 243 -640 459 -426 640 -425 640 -640 360 -511 640 -640 414 -640 480 -640 426 -640 361 -640 253 -640 428 -640 459 -640 480 -480 360 -640 547 -500 376 -640 480 -640 480 -426 640 -480 640 -428 640 -640 428 -640 480 -480 640 -640 426 -640 426 -640 427 -640 360 -640 425 -640 427 -640 427 -640 477 -481 640 -500 333 -640 424 -640 480 -640 427 -408 500 -640 379 -480 640 -640 480 -640 509 -372 500 -640 414 -500 500 -640 428 -640 426 -500 375 -480 640 -612 612 -640 426 -640 480 -640 427 -640 480 -640 480 -640 480 -426 640 -500 375 -640 480 -640 388 -427 640 -640 430 -640 480 -640 427 -500 375 -640 424 -640 478 -425 640 -640 480 -612 612 -335 500 -640 428 -480 640 -640 480 -481 640 -640 425 -640 436 -640 512 -640 640 -640 424 -640 480 -427 640 -640 480 -640 480 -640 480 -640 469 -640 428 -640 427 -640 480 -640 479 -640 480 -640 285 -424 640 -480 640 -640 360 -640 480 -612 612 -640 480 -500 375 -428 640 -640 480 -640 427 -640 424 -427 640 -640 480 -640 480 -500 376 -640 425 -640 480 -640 426 -478 640 -500 375 -500 426 -640 480 -478 640 -427 640 -640 427 -640 480 -480 384 -428 640 -640 638 -500 375 -640 427 -640 400 -640 415 -500 334 -640 480 -480 640 -480 640 -640 480 -640 427 -500 375 -640 480 -500 375 -640 428 -640 480 -640 360 -500 375 -428 640 -640 360 -640 480 -427 640 -640 400 -640 429 -640 480 -640 480 -640 416 -426 640 -640 480 -640 383 -426 640 -640 428 -640 480 -640 478 -640 480 -640 480 -503 640 -333 500 -640 574 -480 640 -500 375 -640 480 -375 500 -480 640 -640 480 -375 500 -640 480 -640 639 -640 427 -428 640 -640 429 -480 640 -640 512 -640 427 -428 640 -480 640 -640 639 -640 427 -640 480 -640 400 -424 640 -640 424 -500 419 -640 480 -427 640 -640 477 -640 425 -640 419 -500 375 -640 480 -500 374 -640 480 -426 640 -425 640 -640 426 -640 427 -500 333 -375 500 -480 640 -640 426 -640 427 -640 427 -640 521 -640 427 -640 427 -640 427 -500 333 -640 393 -469 640 -427 640 -640 427 -480 640 -640 480 -500 375 -640 427 -640 427 -427 640 -640 480 -612 612 -640 428 -640 480 -500 375 -640 480 -640 640 -418 640 -640 457 -640 480 -375 500 -640 480 -640 480 -640 480 -426 640 -480 640 -480 640 -480 640 -480 640 -480 640 -640 427 -640 498 -640 480 -500 371 -640 480 -556 640 -490 350 -640 427 -640 443 -480 640 -416 640 -640 384 -640 321 -480 640 -480 640 -640 425 -640 480 -640 496 -513 640 -640 478 -640 480 -640 480 diff --git a/data/5k.txt b/data/5k.txt deleted file mode 100644 index ad8c50511e..0000000000 --- a/data/5k.txt +++ /dev/null @@ -1,5000 +0,0 @@ -../coco/images/val2014/COCO_val2014_000000000164.jpg -../coco/images/val2014/COCO_val2014_000000000192.jpg -../coco/images/val2014/COCO_val2014_000000000283.jpg -../coco/images/val2014/COCO_val2014_000000000397.jpg -../coco/images/val2014/COCO_val2014_000000000589.jpg -../coco/images/val2014/COCO_val2014_000000000599.jpg -../coco/images/val2014/COCO_val2014_000000000711.jpg -../coco/images/val2014/COCO_val2014_000000000757.jpg -../coco/images/val2014/COCO_val2014_000000000764.jpg -../coco/images/val2014/COCO_val2014_000000000872.jpg -../coco/images/val2014/COCO_val2014_000000001063.jpg -../coco/images/val2014/COCO_val2014_000000001554.jpg -../coco/images/val2014/COCO_val2014_000000001667.jpg -../coco/images/val2014/COCO_val2014_000000001700.jpg -../coco/images/val2014/COCO_val2014_000000001869.jpg -../coco/images/val2014/COCO_val2014_000000002124.jpg -../coco/images/val2014/COCO_val2014_000000002261.jpg -../coco/images/val2014/COCO_val2014_000000002621.jpg -../coco/images/val2014/COCO_val2014_000000002684.jpg -../coco/images/val2014/COCO_val2014_000000002764.jpg -../coco/images/val2014/COCO_val2014_000000002894.jpg -../coco/images/val2014/COCO_val2014_000000002972.jpg -../coco/images/val2014/COCO_val2014_000000003035.jpg -../coco/images/val2014/COCO_val2014_000000003084.jpg -../coco/images/val2014/COCO_val2014_000000003103.jpg -../coco/images/val2014/COCO_val2014_000000003109.jpg -../coco/images/val2014/COCO_val2014_000000003134.jpg -../coco/images/val2014/COCO_val2014_000000003209.jpg -../coco/images/val2014/COCO_val2014_000000003244.jpg -../coco/images/val2014/COCO_val2014_000000003326.jpg -../coco/images/val2014/COCO_val2014_000000003337.jpg -../coco/images/val2014/COCO_val2014_000000003661.jpg -../coco/images/val2014/COCO_val2014_000000003711.jpg -../coco/images/val2014/COCO_val2014_000000003779.jpg -../coco/images/val2014/COCO_val2014_000000003865.jpg -../coco/images/val2014/COCO_val2014_000000004079.jpg -../coco/images/val2014/COCO_val2014_000000004092.jpg -../coco/images/val2014/COCO_val2014_000000004283.jpg -../coco/images/val2014/COCO_val2014_000000004296.jpg -../coco/images/val2014/COCO_val2014_000000004392.jpg -../coco/images/val2014/COCO_val2014_000000004742.jpg -../coco/images/val2014/COCO_val2014_000000004754.jpg -../coco/images/val2014/COCO_val2014_000000004764.jpg -../coco/images/val2014/COCO_val2014_000000005038.jpg -../coco/images/val2014/COCO_val2014_000000005060.jpg -../coco/images/val2014/COCO_val2014_000000005124.jpg -../coco/images/val2014/COCO_val2014_000000005178.jpg -../coco/images/val2014/COCO_val2014_000000005205.jpg -../coco/images/val2014/COCO_val2014_000000005443.jpg -../coco/images/val2014/COCO_val2014_000000005652.jpg -../coco/images/val2014/COCO_val2014_000000005723.jpg -../coco/images/val2014/COCO_val2014_000000005804.jpg -../coco/images/val2014/COCO_val2014_000000006074.jpg -../coco/images/val2014/COCO_val2014_000000006091.jpg -../coco/images/val2014/COCO_val2014_000000006153.jpg -../coco/images/val2014/COCO_val2014_000000006213.jpg -../coco/images/val2014/COCO_val2014_000000006497.jpg -../coco/images/val2014/COCO_val2014_000000006789.jpg -../coco/images/val2014/COCO_val2014_000000006847.jpg -../coco/images/val2014/COCO_val2014_000000007241.jpg -../coco/images/val2014/COCO_val2014_000000007256.jpg -../coco/images/val2014/COCO_val2014_000000007281.jpg -../coco/images/val2014/COCO_val2014_000000007795.jpg -../coco/images/val2014/COCO_val2014_000000007867.jpg -../coco/images/val2014/COCO_val2014_000000007873.jpg -../coco/images/val2014/COCO_val2014_000000007899.jpg -../coco/images/val2014/COCO_val2014_000000008010.jpg -../coco/images/val2014/COCO_val2014_000000008179.jpg -../coco/images/val2014/COCO_val2014_000000008190.jpg -../coco/images/val2014/COCO_val2014_000000008204.jpg -../coco/images/val2014/COCO_val2014_000000008350.jpg -../coco/images/val2014/COCO_val2014_000000008493.jpg -../coco/images/val2014/COCO_val2014_000000008853.jpg -../coco/images/val2014/COCO_val2014_000000009105.jpg -../coco/images/val2014/COCO_val2014_000000009156.jpg -../coco/images/val2014/COCO_val2014_000000009217.jpg -../coco/images/val2014/COCO_val2014_000000009270.jpg -../coco/images/val2014/COCO_val2014_000000009286.jpg -../coco/images/val2014/COCO_val2014_000000009548.jpg -../coco/images/val2014/COCO_val2014_000000009553.jpg -../coco/images/val2014/COCO_val2014_000000009727.jpg -../coco/images/val2014/COCO_val2014_000000009908.jpg -../coco/images/val2014/COCO_val2014_000000010114.jpg -../coco/images/val2014/COCO_val2014_000000010249.jpg -../coco/images/val2014/COCO_val2014_000000010395.jpg -../coco/images/val2014/COCO_val2014_000000010400.jpg -../coco/images/val2014/COCO_val2014_000000010463.jpg -../coco/images/val2014/COCO_val2014_000000010613.jpg -../coco/images/val2014/COCO_val2014_000000010764.jpg -../coco/images/val2014/COCO_val2014_000000010779.jpg -../coco/images/val2014/COCO_val2014_000000010928.jpg -../coco/images/val2014/COCO_val2014_000000011099.jpg -../coco/images/val2014/COCO_val2014_000000011181.jpg -../coco/images/val2014/COCO_val2014_000000011184.jpg -../coco/images/val2014/COCO_val2014_000000011197.jpg -../coco/images/val2014/COCO_val2014_000000011320.jpg -../coco/images/val2014/COCO_val2014_000000011721.jpg -../coco/images/val2014/COCO_val2014_000000011813.jpg -../coco/images/val2014/COCO_val2014_000000012014.jpg -../coco/images/val2014/COCO_val2014_000000012047.jpg -../coco/images/val2014/COCO_val2014_000000012085.jpg -../coco/images/val2014/COCO_val2014_000000012115.jpg -../coco/images/val2014/COCO_val2014_000000012166.jpg -../coco/images/val2014/COCO_val2014_000000012230.jpg -../coco/images/val2014/COCO_val2014_000000012370.jpg -../coco/images/val2014/COCO_val2014_000000012375.jpg -../coco/images/val2014/COCO_val2014_000000012448.jpg -../coco/images/val2014/COCO_val2014_000000012543.jpg -../coco/images/val2014/COCO_val2014_000000012744.jpg -../coco/images/val2014/COCO_val2014_000000012897.jpg -../coco/images/val2014/COCO_val2014_000000012966.jpg -../coco/images/val2014/COCO_val2014_000000012993.jpg -../coco/images/val2014/COCO_val2014_000000013004.jpg -../coco/images/val2014/COCO_val2014_000000013333.jpg -../coco/images/val2014/COCO_val2014_000000013357.jpg -../coco/images/val2014/COCO_val2014_000000013774.jpg -../coco/images/val2014/COCO_val2014_000000014029.jpg -../coco/images/val2014/COCO_val2014_000000014056.jpg -../coco/images/val2014/COCO_val2014_000000014108.jpg -../coco/images/val2014/COCO_val2014_000000014135.jpg -../coco/images/val2014/COCO_val2014_000000014226.jpg -../coco/images/val2014/COCO_val2014_000000014306.jpg -../coco/images/val2014/COCO_val2014_000000014591.jpg -../coco/images/val2014/COCO_val2014_000000014629.jpg -../coco/images/val2014/COCO_val2014_000000014756.jpg -../coco/images/val2014/COCO_val2014_000000014874.jpg -../coco/images/val2014/COCO_val2014_000000014990.jpg -../coco/images/val2014/COCO_val2014_000000015386.jpg -../coco/images/val2014/COCO_val2014_000000015559.jpg -../coco/images/val2014/COCO_val2014_000000015599.jpg -../coco/images/val2014/COCO_val2014_000000015709.jpg -../coco/images/val2014/COCO_val2014_000000015735.jpg -../coco/images/val2014/COCO_val2014_000000015751.jpg -../coco/images/val2014/COCO_val2014_000000015883.jpg -../coco/images/val2014/COCO_val2014_000000015953.jpg -../coco/images/val2014/COCO_val2014_000000015956.jpg -../coco/images/val2014/COCO_val2014_000000015968.jpg -../coco/images/val2014/COCO_val2014_000000015987.jpg -../coco/images/val2014/COCO_val2014_000000016030.jpg -../coco/images/val2014/COCO_val2014_000000016076.jpg -../coco/images/val2014/COCO_val2014_000000016228.jpg -../coco/images/val2014/COCO_val2014_000000016241.jpg -../coco/images/val2014/COCO_val2014_000000016257.jpg -../coco/images/val2014/COCO_val2014_000000016327.jpg -../coco/images/val2014/COCO_val2014_000000016410.jpg -../coco/images/val2014/COCO_val2014_000000016574.jpg -../coco/images/val2014/COCO_val2014_000000016716.jpg -../coco/images/val2014/COCO_val2014_000000016928.jpg -../coco/images/val2014/COCO_val2014_000000016995.jpg -../coco/images/val2014/COCO_val2014_000000017235.jpg -../coco/images/val2014/COCO_val2014_000000017379.jpg -../coco/images/val2014/COCO_val2014_000000017667.jpg -../coco/images/val2014/COCO_val2014_000000017755.jpg -../coco/images/val2014/COCO_val2014_000000018295.jpg -../coco/images/val2014/COCO_val2014_000000018358.jpg -../coco/images/val2014/COCO_val2014_000000018476.jpg -../coco/images/val2014/COCO_val2014_000000018750.jpg -../coco/images/val2014/COCO_val2014_000000018783.jpg -../coco/images/val2014/COCO_val2014_000000019025.jpg -../coco/images/val2014/COCO_val2014_000000019042.jpg -../coco/images/val2014/COCO_val2014_000000019129.jpg -../coco/images/val2014/COCO_val2014_000000019176.jpg -../coco/images/val2014/COCO_val2014_000000019491.jpg -../coco/images/val2014/COCO_val2014_000000019890.jpg -../coco/images/val2014/COCO_val2014_000000019923.jpg -../coco/images/val2014/COCO_val2014_000000020001.jpg -../coco/images/val2014/COCO_val2014_000000020038.jpg -../coco/images/val2014/COCO_val2014_000000020175.jpg -../coco/images/val2014/COCO_val2014_000000020268.jpg -../coco/images/val2014/COCO_val2014_000000020273.jpg -../coco/images/val2014/COCO_val2014_000000020349.jpg -../coco/images/val2014/COCO_val2014_000000020553.jpg -../coco/images/val2014/COCO_val2014_000000020788.jpg -../coco/images/val2014/COCO_val2014_000000020912.jpg -../coco/images/val2014/COCO_val2014_000000020947.jpg -../coco/images/val2014/COCO_val2014_000000020972.jpg -../coco/images/val2014/COCO_val2014_000000021161.jpg -../coco/images/val2014/COCO_val2014_000000021483.jpg -../coco/images/val2014/COCO_val2014_000000021588.jpg -../coco/images/val2014/COCO_val2014_000000021639.jpg -../coco/images/val2014/COCO_val2014_000000021644.jpg -../coco/images/val2014/COCO_val2014_000000021645.jpg -../coco/images/val2014/COCO_val2014_000000021671.jpg -../coco/images/val2014/COCO_val2014_000000021746.jpg -../coco/images/val2014/COCO_val2014_000000021839.jpg -../coco/images/val2014/COCO_val2014_000000022002.jpg -../coco/images/val2014/COCO_val2014_000000022129.jpg -../coco/images/val2014/COCO_val2014_000000022191.jpg -../coco/images/val2014/COCO_val2014_000000022215.jpg -../coco/images/val2014/COCO_val2014_000000022341.jpg -../coco/images/val2014/COCO_val2014_000000022492.jpg -../coco/images/val2014/COCO_val2014_000000022563.jpg -../coco/images/val2014/COCO_val2014_000000022660.jpg -../coco/images/val2014/COCO_val2014_000000022705.jpg -../coco/images/val2014/COCO_val2014_000000023017.jpg -../coco/images/val2014/COCO_val2014_000000023309.jpg -../coco/images/val2014/COCO_val2014_000000023411.jpg -../coco/images/val2014/COCO_val2014_000000023754.jpg -../coco/images/val2014/COCO_val2014_000000023802.jpg -../coco/images/val2014/COCO_val2014_000000023981.jpg -../coco/images/val2014/COCO_val2014_000000023995.jpg -../coco/images/val2014/COCO_val2014_000000024112.jpg -../coco/images/val2014/COCO_val2014_000000024247.jpg -../coco/images/val2014/COCO_val2014_000000024396.jpg -../coco/images/val2014/COCO_val2014_000000024776.jpg -../coco/images/val2014/COCO_val2014_000000024924.jpg -../coco/images/val2014/COCO_val2014_000000025096.jpg -../coco/images/val2014/COCO_val2014_000000025191.jpg -../coco/images/val2014/COCO_val2014_000000025252.jpg -../coco/images/val2014/COCO_val2014_000000025293.jpg -../coco/images/val2014/COCO_val2014_000000025360.jpg -../coco/images/val2014/COCO_val2014_000000025595.jpg -../coco/images/val2014/COCO_val2014_000000025685.jpg -../coco/images/val2014/COCO_val2014_000000025807.jpg -../coco/images/val2014/COCO_val2014_000000025864.jpg -../coco/images/val2014/COCO_val2014_000000025989.jpg -../coco/images/val2014/COCO_val2014_000000026026.jpg -../coco/images/val2014/COCO_val2014_000000026430.jpg -../coco/images/val2014/COCO_val2014_000000026432.jpg -../coco/images/val2014/COCO_val2014_000000026534.jpg -../coco/images/val2014/COCO_val2014_000000026560.jpg -../coco/images/val2014/COCO_val2014_000000026564.jpg -../coco/images/val2014/COCO_val2014_000000026671.jpg -../coco/images/val2014/COCO_val2014_000000026690.jpg -../coco/images/val2014/COCO_val2014_000000026734.jpg -../coco/images/val2014/COCO_val2014_000000026799.jpg -../coco/images/val2014/COCO_val2014_000000026907.jpg -../coco/images/val2014/COCO_val2014_000000026908.jpg -../coco/images/val2014/COCO_val2014_000000026946.jpg -../coco/images/val2014/COCO_val2014_000000027530.jpg -../coco/images/val2014/COCO_val2014_000000027610.jpg -../coco/images/val2014/COCO_val2014_000000027620.jpg -../coco/images/val2014/COCO_val2014_000000027787.jpg -../coco/images/val2014/COCO_val2014_000000027789.jpg -../coco/images/val2014/COCO_val2014_000000027874.jpg -../coco/images/val2014/COCO_val2014_000000027946.jpg -../coco/images/val2014/COCO_val2014_000000027975.jpg -../coco/images/val2014/COCO_val2014_000000028022.jpg -../coco/images/val2014/COCO_val2014_000000028039.jpg -../coco/images/val2014/COCO_val2014_000000028273.jpg -../coco/images/val2014/COCO_val2014_000000028540.jpg -../coco/images/val2014/COCO_val2014_000000028702.jpg -../coco/images/val2014/COCO_val2014_000000028820.jpg -../coco/images/val2014/COCO_val2014_000000028874.jpg -../coco/images/val2014/COCO_val2014_000000029019.jpg -../coco/images/val2014/COCO_val2014_000000029030.jpg -../coco/images/val2014/COCO_val2014_000000029170.jpg -../coco/images/val2014/COCO_val2014_000000029308.jpg -../coco/images/val2014/COCO_val2014_000000029393.jpg -../coco/images/val2014/COCO_val2014_000000029524.jpg -../coco/images/val2014/COCO_val2014_000000029577.jpg -../coco/images/val2014/COCO_val2014_000000029648.jpg -../coco/images/val2014/COCO_val2014_000000029656.jpg -../coco/images/val2014/COCO_val2014_000000029697.jpg -../coco/images/val2014/COCO_val2014_000000029709.jpg -../coco/images/val2014/COCO_val2014_000000029719.jpg -../coco/images/val2014/COCO_val2014_000000030034.jpg -../coco/images/val2014/COCO_val2014_000000030062.jpg -../coco/images/val2014/COCO_val2014_000000030383.jpg -../coco/images/val2014/COCO_val2014_000000030470.jpg -../coco/images/val2014/COCO_val2014_000000030548.jpg -../coco/images/val2014/COCO_val2014_000000030668.jpg -../coco/images/val2014/COCO_val2014_000000030793.jpg -../coco/images/val2014/COCO_val2014_000000030843.jpg -../coco/images/val2014/COCO_val2014_000000030998.jpg -../coco/images/val2014/COCO_val2014_000000031151.jpg -../coco/images/val2014/COCO_val2014_000000031164.jpg -../coco/images/val2014/COCO_val2014_000000031176.jpg -../coco/images/val2014/COCO_val2014_000000031247.jpg -../coco/images/val2014/COCO_val2014_000000031392.jpg -../coco/images/val2014/COCO_val2014_000000031521.jpg -../coco/images/val2014/COCO_val2014_000000031542.jpg -../coco/images/val2014/COCO_val2014_000000031817.jpg -../coco/images/val2014/COCO_val2014_000000032081.jpg -../coco/images/val2014/COCO_val2014_000000032193.jpg -../coco/images/val2014/COCO_val2014_000000032331.jpg -../coco/images/val2014/COCO_val2014_000000032464.jpg -../coco/images/val2014/COCO_val2014_000000032510.jpg -../coco/images/val2014/COCO_val2014_000000032524.jpg -../coco/images/val2014/COCO_val2014_000000032625.jpg -../coco/images/val2014/COCO_val2014_000000032677.jpg -../coco/images/val2014/COCO_val2014_000000032715.jpg -../coco/images/val2014/COCO_val2014_000000032947.jpg -../coco/images/val2014/COCO_val2014_000000032964.jpg -../coco/images/val2014/COCO_val2014_000000033006.jpg -../coco/images/val2014/COCO_val2014_000000033055.jpg -../coco/images/val2014/COCO_val2014_000000033158.jpg -../coco/images/val2014/COCO_val2014_000000033243.jpg -../coco/images/val2014/COCO_val2014_000000033345.jpg -../coco/images/val2014/COCO_val2014_000000033499.jpg -../coco/images/val2014/COCO_val2014_000000033561.jpg -../coco/images/val2014/COCO_val2014_000000033830.jpg -../coco/images/val2014/COCO_val2014_000000033835.jpg -../coco/images/val2014/COCO_val2014_000000033924.jpg -../coco/images/val2014/COCO_val2014_000000034056.jpg -../coco/images/val2014/COCO_val2014_000000034114.jpg -../coco/images/val2014/COCO_val2014_000000034137.jpg -../coco/images/val2014/COCO_val2014_000000034183.jpg -../coco/images/val2014/COCO_val2014_000000034193.jpg -../coco/images/val2014/COCO_val2014_000000034299.jpg -../coco/images/val2014/COCO_val2014_000000034452.jpg -../coco/images/val2014/COCO_val2014_000000034689.jpg -../coco/images/val2014/COCO_val2014_000000034877.jpg -../coco/images/val2014/COCO_val2014_000000034892.jpg -../coco/images/val2014/COCO_val2014_000000034930.jpg -../coco/images/val2014/COCO_val2014_000000035012.jpg -../coco/images/val2014/COCO_val2014_000000035222.jpg -../coco/images/val2014/COCO_val2014_000000035326.jpg -../coco/images/val2014/COCO_val2014_000000035368.jpg -../coco/images/val2014/COCO_val2014_000000035474.jpg -../coco/images/val2014/COCO_val2014_000000035498.jpg -../coco/images/val2014/COCO_val2014_000000035738.jpg -../coco/images/val2014/COCO_val2014_000000035826.jpg -../coco/images/val2014/COCO_val2014_000000035940.jpg -../coco/images/val2014/COCO_val2014_000000035966.jpg -../coco/images/val2014/COCO_val2014_000000036049.jpg -../coco/images/val2014/COCO_val2014_000000036252.jpg -../coco/images/val2014/COCO_val2014_000000036508.jpg -../coco/images/val2014/COCO_val2014_000000036522.jpg -../coco/images/val2014/COCO_val2014_000000036539.jpg -../coco/images/val2014/COCO_val2014_000000036563.jpg -../coco/images/val2014/COCO_val2014_000000037038.jpg -../coco/images/val2014/COCO_val2014_000000037629.jpg -../coco/images/val2014/COCO_val2014_000000037675.jpg -../coco/images/val2014/COCO_val2014_000000037846.jpg -../coco/images/val2014/COCO_val2014_000000037865.jpg -../coco/images/val2014/COCO_val2014_000000037907.jpg -../coco/images/val2014/COCO_val2014_000000037988.jpg -../coco/images/val2014/COCO_val2014_000000038031.jpg -../coco/images/val2014/COCO_val2014_000000038190.jpg -../coco/images/val2014/COCO_val2014_000000038252.jpg -../coco/images/val2014/COCO_val2014_000000038296.jpg -../coco/images/val2014/COCO_val2014_000000038465.jpg -../coco/images/val2014/COCO_val2014_000000038488.jpg -../coco/images/val2014/COCO_val2014_000000038531.jpg -../coco/images/val2014/COCO_val2014_000000038539.jpg -../coco/images/val2014/COCO_val2014_000000038645.jpg -../coco/images/val2014/COCO_val2014_000000038685.jpg -../coco/images/val2014/COCO_val2014_000000038825.jpg -../coco/images/val2014/COCO_val2014_000000039322.jpg -../coco/images/val2014/COCO_val2014_000000039480.jpg -../coco/images/val2014/COCO_val2014_000000039697.jpg -../coco/images/val2014/COCO_val2014_000000039731.jpg -../coco/images/val2014/COCO_val2014_000000039743.jpg -../coco/images/val2014/COCO_val2014_000000039785.jpg -../coco/images/val2014/COCO_val2014_000000039961.jpg -../coco/images/val2014/COCO_val2014_000000040426.jpg -../coco/images/val2014/COCO_val2014_000000040485.jpg -../coco/images/val2014/COCO_val2014_000000040681.jpg -../coco/images/val2014/COCO_val2014_000000040686.jpg -../coco/images/val2014/COCO_val2014_000000040886.jpg -../coco/images/val2014/COCO_val2014_000000041119.jpg -../coco/images/val2014/COCO_val2014_000000041147.jpg -../coco/images/val2014/COCO_val2014_000000041322.jpg -../coco/images/val2014/COCO_val2014_000000041373.jpg -../coco/images/val2014/COCO_val2014_000000041550.jpg -../coco/images/val2014/COCO_val2014_000000041635.jpg -../coco/images/val2014/COCO_val2014_000000041867.jpg -../coco/images/val2014/COCO_val2014_000000041872.jpg -../coco/images/val2014/COCO_val2014_000000041924.jpg -../coco/images/val2014/COCO_val2014_000000042137.jpg -../coco/images/val2014/COCO_val2014_000000042279.jpg -../coco/images/val2014/COCO_val2014_000000042492.jpg -../coco/images/val2014/COCO_val2014_000000042576.jpg -../coco/images/val2014/COCO_val2014_000000042661.jpg -../coco/images/val2014/COCO_val2014_000000042743.jpg -../coco/images/val2014/COCO_val2014_000000042805.jpg -../coco/images/val2014/COCO_val2014_000000042837.jpg -../coco/images/val2014/COCO_val2014_000000043165.jpg -../coco/images/val2014/COCO_val2014_000000043218.jpg -../coco/images/val2014/COCO_val2014_000000043261.jpg -../coco/images/val2014/COCO_val2014_000000043404.jpg -../coco/images/val2014/COCO_val2014_000000043542.jpg -../coco/images/val2014/COCO_val2014_000000043605.jpg -../coco/images/val2014/COCO_val2014_000000043614.jpg -../coco/images/val2014/COCO_val2014_000000043673.jpg -../coco/images/val2014/COCO_val2014_000000043816.jpg -../coco/images/val2014/COCO_val2014_000000043850.jpg -../coco/images/val2014/COCO_val2014_000000044220.jpg -../coco/images/val2014/COCO_val2014_000000044269.jpg -../coco/images/val2014/COCO_val2014_000000044309.jpg -../coco/images/val2014/COCO_val2014_000000044478.jpg -../coco/images/val2014/COCO_val2014_000000044536.jpg -../coco/images/val2014/COCO_val2014_000000044559.jpg -../coco/images/val2014/COCO_val2014_000000044575.jpg -../coco/images/val2014/COCO_val2014_000000044612.jpg -../coco/images/val2014/COCO_val2014_000000044677.jpg -../coco/images/val2014/COCO_val2014_000000044699.jpg -../coco/images/val2014/COCO_val2014_000000044823.jpg -../coco/images/val2014/COCO_val2014_000000044989.jpg -../coco/images/val2014/COCO_val2014_000000045094.jpg -../coco/images/val2014/COCO_val2014_000000045176.jpg -../coco/images/val2014/COCO_val2014_000000045197.jpg -../coco/images/val2014/COCO_val2014_000000045367.jpg -../coco/images/val2014/COCO_val2014_000000045392.jpg -../coco/images/val2014/COCO_val2014_000000045433.jpg -../coco/images/val2014/COCO_val2014_000000045463.jpg -../coco/images/val2014/COCO_val2014_000000045550.jpg -../coco/images/val2014/COCO_val2014_000000045574.jpg -../coco/images/val2014/COCO_val2014_000000045627.jpg -../coco/images/val2014/COCO_val2014_000000045685.jpg -../coco/images/val2014/COCO_val2014_000000045728.jpg -../coco/images/val2014/COCO_val2014_000000046252.jpg -../coco/images/val2014/COCO_val2014_000000046269.jpg -../coco/images/val2014/COCO_val2014_000000046329.jpg -../coco/images/val2014/COCO_val2014_000000046805.jpg -../coco/images/val2014/COCO_val2014_000000046869.jpg -../coco/images/val2014/COCO_val2014_000000046919.jpg -../coco/images/val2014/COCO_val2014_000000046924.jpg -../coco/images/val2014/COCO_val2014_000000047008.jpg -../coco/images/val2014/COCO_val2014_000000047131.jpg -../coco/images/val2014/COCO_val2014_000000047226.jpg -../coco/images/val2014/COCO_val2014_000000047263.jpg -../coco/images/val2014/COCO_val2014_000000047395.jpg -../coco/images/val2014/COCO_val2014_000000047552.jpg -../coco/images/val2014/COCO_val2014_000000047570.jpg -../coco/images/val2014/COCO_val2014_000000047720.jpg -../coco/images/val2014/COCO_val2014_000000047775.jpg -../coco/images/val2014/COCO_val2014_000000047886.jpg -../coco/images/val2014/COCO_val2014_000000048504.jpg -../coco/images/val2014/COCO_val2014_000000048564.jpg -../coco/images/val2014/COCO_val2014_000000048668.jpg -../coco/images/val2014/COCO_val2014_000000048731.jpg -../coco/images/val2014/COCO_val2014_000000048739.jpg -../coco/images/val2014/COCO_val2014_000000048791.jpg -../coco/images/val2014/COCO_val2014_000000048840.jpg -../coco/images/val2014/COCO_val2014_000000048905.jpg -../coco/images/val2014/COCO_val2014_000000048910.jpg -../coco/images/val2014/COCO_val2014_000000048924.jpg -../coco/images/val2014/COCO_val2014_000000048956.jpg -../coco/images/val2014/COCO_val2014_000000049075.jpg -../coco/images/val2014/COCO_val2014_000000049236.jpg -../coco/images/val2014/COCO_val2014_000000049676.jpg -../coco/images/val2014/COCO_val2014_000000049881.jpg -../coco/images/val2014/COCO_val2014_000000049985.jpg -../coco/images/val2014/COCO_val2014_000000050100.jpg -../coco/images/val2014/COCO_val2014_000000050145.jpg -../coco/images/val2014/COCO_val2014_000000050177.jpg -../coco/images/val2014/COCO_val2014_000000050324.jpg -../coco/images/val2014/COCO_val2014_000000050331.jpg -../coco/images/val2014/COCO_val2014_000000050481.jpg -../coco/images/val2014/COCO_val2014_000000050485.jpg -../coco/images/val2014/COCO_val2014_000000050493.jpg -../coco/images/val2014/COCO_val2014_000000050746.jpg -../coco/images/val2014/COCO_val2014_000000050844.jpg -../coco/images/val2014/COCO_val2014_000000050896.jpg -../coco/images/val2014/COCO_val2014_000000051249.jpg -../coco/images/val2014/COCO_val2014_000000051250.jpg -../coco/images/val2014/COCO_val2014_000000051289.jpg -../coco/images/val2014/COCO_val2014_000000051314.jpg -../coco/images/val2014/COCO_val2014_000000051339.jpg -../coco/images/val2014/COCO_val2014_000000051461.jpg -../coco/images/val2014/COCO_val2014_000000051476.jpg -../coco/images/val2014/COCO_val2014_000000052005.jpg -../coco/images/val2014/COCO_val2014_000000052020.jpg -../coco/images/val2014/COCO_val2014_000000052290.jpg -../coco/images/val2014/COCO_val2014_000000052314.jpg -../coco/images/val2014/COCO_val2014_000000052425.jpg -../coco/images/val2014/COCO_val2014_000000052575.jpg -../coco/images/val2014/COCO_val2014_000000052871.jpg -../coco/images/val2014/COCO_val2014_000000052982.jpg -../coco/images/val2014/COCO_val2014_000000053139.jpg -../coco/images/val2014/COCO_val2014_000000053183.jpg -../coco/images/val2014/COCO_val2014_000000053263.jpg -../coco/images/val2014/COCO_val2014_000000053491.jpg -../coco/images/val2014/COCO_val2014_000000053503.jpg -../coco/images/val2014/COCO_val2014_000000053580.jpg -../coco/images/val2014/COCO_val2014_000000053616.jpg -../coco/images/val2014/COCO_val2014_000000053907.jpg -../coco/images/val2014/COCO_val2014_000000053949.jpg -../coco/images/val2014/COCO_val2014_000000054301.jpg -../coco/images/val2014/COCO_val2014_000000054334.jpg -../coco/images/val2014/COCO_val2014_000000054490.jpg -../coco/images/val2014/COCO_val2014_000000054527.jpg -../coco/images/val2014/COCO_val2014_000000054533.jpg -../coco/images/val2014/COCO_val2014_000000054603.jpg -../coco/images/val2014/COCO_val2014_000000054643.jpg -../coco/images/val2014/COCO_val2014_000000054679.jpg -../coco/images/val2014/COCO_val2014_000000054723.jpg -../coco/images/val2014/COCO_val2014_000000054959.jpg -../coco/images/val2014/COCO_val2014_000000055167.jpg -../coco/images/val2014/COCO_val2014_000000056137.jpg -../coco/images/val2014/COCO_val2014_000000056326.jpg -../coco/images/val2014/COCO_val2014_000000056541.jpg -../coco/images/val2014/COCO_val2014_000000056562.jpg -../coco/images/val2014/COCO_val2014_000000056624.jpg -../coco/images/val2014/COCO_val2014_000000056633.jpg -../coco/images/val2014/COCO_val2014_000000056724.jpg -../coco/images/val2014/COCO_val2014_000000056739.jpg -../coco/images/val2014/COCO_val2014_000000057027.jpg -../coco/images/val2014/COCO_val2014_000000057091.jpg -../coco/images/val2014/COCO_val2014_000000057095.jpg -../coco/images/val2014/COCO_val2014_000000057100.jpg -../coco/images/val2014/COCO_val2014_000000057149.jpg -../coco/images/val2014/COCO_val2014_000000057238.jpg -../coco/images/val2014/COCO_val2014_000000057359.jpg -../coco/images/val2014/COCO_val2014_000000057454.jpg -../coco/images/val2014/COCO_val2014_000000058001.jpg -../coco/images/val2014/COCO_val2014_000000058157.jpg -../coco/images/val2014/COCO_val2014_000000058223.jpg -../coco/images/val2014/COCO_val2014_000000058232.jpg -../coco/images/val2014/COCO_val2014_000000058344.jpg -../coco/images/val2014/COCO_val2014_000000058522.jpg -../coco/images/val2014/COCO_val2014_000000058636.jpg -../coco/images/val2014/COCO_val2014_000000058800.jpg -../coco/images/val2014/COCO_val2014_000000058949.jpg -../coco/images/val2014/COCO_val2014_000000059009.jpg -../coco/images/val2014/COCO_val2014_000000059202.jpg -../coco/images/val2014/COCO_val2014_000000059393.jpg -../coco/images/val2014/COCO_val2014_000000059652.jpg -../coco/images/val2014/COCO_val2014_000000060010.jpg -../coco/images/val2014/COCO_val2014_000000060049.jpg -../coco/images/val2014/COCO_val2014_000000060126.jpg -../coco/images/val2014/COCO_val2014_000000060128.jpg -../coco/images/val2014/COCO_val2014_000000060448.jpg -../coco/images/val2014/COCO_val2014_000000060548.jpg -../coco/images/val2014/COCO_val2014_000000060677.jpg -../coco/images/val2014/COCO_val2014_000000060760.jpg -../coco/images/val2014/COCO_val2014_000000060823.jpg -../coco/images/val2014/COCO_val2014_000000060859.jpg -../coco/images/val2014/COCO_val2014_000000060899.jpg -../coco/images/val2014/COCO_val2014_000000061171.jpg -../coco/images/val2014/COCO_val2014_000000061503.jpg -../coco/images/val2014/COCO_val2014_000000061520.jpg -../coco/images/val2014/COCO_val2014_000000061531.jpg -../coco/images/val2014/COCO_val2014_000000061564.jpg -../coco/images/val2014/COCO_val2014_000000061658.jpg -../coco/images/val2014/COCO_val2014_000000061693.jpg -../coco/images/val2014/COCO_val2014_000000061717.jpg -../coco/images/val2014/COCO_val2014_000000061836.jpg -../coco/images/val2014/COCO_val2014_000000062041.jpg -../coco/images/val2014/COCO_val2014_000000062060.jpg -../coco/images/val2014/COCO_val2014_000000062198.jpg -../coco/images/val2014/COCO_val2014_000000062200.jpg -../coco/images/val2014/COCO_val2014_000000062220.jpg -../coco/images/val2014/COCO_val2014_000000062623.jpg -../coco/images/val2014/COCO_val2014_000000062726.jpg -../coco/images/val2014/COCO_val2014_000000062875.jpg -../coco/images/val2014/COCO_val2014_000000063047.jpg -../coco/images/val2014/COCO_val2014_000000063114.jpg -../coco/images/val2014/COCO_val2014_000000063488.jpg -../coco/images/val2014/COCO_val2014_000000063671.jpg -../coco/images/val2014/COCO_val2014_000000063715.jpg -../coco/images/val2014/COCO_val2014_000000063804.jpg -../coco/images/val2014/COCO_val2014_000000063882.jpg -../coco/images/val2014/COCO_val2014_000000063939.jpg -../coco/images/val2014/COCO_val2014_000000063965.jpg -../coco/images/val2014/COCO_val2014_000000064155.jpg -../coco/images/val2014/COCO_val2014_000000064189.jpg -../coco/images/val2014/COCO_val2014_000000064196.jpg -../coco/images/val2014/COCO_val2014_000000064495.jpg -../coco/images/val2014/COCO_val2014_000000064610.jpg -../coco/images/val2014/COCO_val2014_000000064693.jpg -../coco/images/val2014/COCO_val2014_000000064746.jpg -../coco/images/val2014/COCO_val2014_000000064760.jpg -../coco/images/val2014/COCO_val2014_000000064796.jpg -../coco/images/val2014/COCO_val2014_000000064865.jpg -../coco/images/val2014/COCO_val2014_000000064915.jpg -../coco/images/val2014/COCO_val2014_000000065074.jpg -../coco/images/val2014/COCO_val2014_000000065124.jpg -../coco/images/val2014/COCO_val2014_000000065258.jpg -../coco/images/val2014/COCO_val2014_000000065267.jpg -../coco/images/val2014/COCO_val2014_000000065430.jpg -../coco/images/val2014/COCO_val2014_000000065465.jpg -../coco/images/val2014/COCO_val2014_000000065942.jpg -../coco/images/val2014/COCO_val2014_000000066001.jpg -../coco/images/val2014/COCO_val2014_000000066064.jpg -../coco/images/val2014/COCO_val2014_000000066072.jpg -../coco/images/val2014/COCO_val2014_000000066239.jpg -../coco/images/val2014/COCO_val2014_000000066243.jpg -../coco/images/val2014/COCO_val2014_000000066355.jpg -../coco/images/val2014/COCO_val2014_000000066412.jpg -../coco/images/val2014/COCO_val2014_000000066423.jpg -../coco/images/val2014/COCO_val2014_000000066427.jpg -../coco/images/val2014/COCO_val2014_000000066502.jpg -../coco/images/val2014/COCO_val2014_000000066519.jpg -../coco/images/val2014/COCO_val2014_000000066561.jpg -../coco/images/val2014/COCO_val2014_000000066700.jpg -../coco/images/val2014/COCO_val2014_000000066717.jpg -../coco/images/val2014/COCO_val2014_000000066879.jpg -../coco/images/val2014/COCO_val2014_000000067178.jpg -../coco/images/val2014/COCO_val2014_000000067207.jpg -../coco/images/val2014/COCO_val2014_000000067218.jpg -../coco/images/val2014/COCO_val2014_000000067412.jpg -../coco/images/val2014/COCO_val2014_000000067532.jpg -../coco/images/val2014/COCO_val2014_000000067590.jpg -../coco/images/val2014/COCO_val2014_000000067660.jpg -../coco/images/val2014/COCO_val2014_000000067686.jpg -../coco/images/val2014/COCO_val2014_000000067704.jpg -../coco/images/val2014/COCO_val2014_000000067776.jpg -../coco/images/val2014/COCO_val2014_000000067948.jpg -../coco/images/val2014/COCO_val2014_000000067953.jpg -../coco/images/val2014/COCO_val2014_000000068059.jpg -../coco/images/val2014/COCO_val2014_000000068204.jpg -../coco/images/val2014/COCO_val2014_000000068205.jpg -../coco/images/val2014/COCO_val2014_000000068409.jpg -../coco/images/val2014/COCO_val2014_000000068435.jpg -../coco/images/val2014/COCO_val2014_000000068520.jpg -../coco/images/val2014/COCO_val2014_000000068546.jpg -../coco/images/val2014/COCO_val2014_000000068674.jpg -../coco/images/val2014/COCO_val2014_000000068745.jpg -../coco/images/val2014/COCO_val2014_000000069009.jpg -../coco/images/val2014/COCO_val2014_000000069077.jpg -../coco/images/val2014/COCO_val2014_000000069196.jpg -../coco/images/val2014/COCO_val2014_000000069356.jpg -../coco/images/val2014/COCO_val2014_000000069568.jpg -../coco/images/val2014/COCO_val2014_000000069577.jpg -../coco/images/val2014/COCO_val2014_000000069698.jpg -../coco/images/val2014/COCO_val2014_000000070493.jpg -../coco/images/val2014/COCO_val2014_000000070896.jpg -../coco/images/val2014/COCO_val2014_000000071023.jpg -../coco/images/val2014/COCO_val2014_000000071123.jpg -../coco/images/val2014/COCO_val2014_000000071241.jpg -../coco/images/val2014/COCO_val2014_000000071301.jpg -../coco/images/val2014/COCO_val2014_000000071345.jpg -../coco/images/val2014/COCO_val2014_000000071451.jpg -../coco/images/val2014/COCO_val2014_000000071673.jpg -../coco/images/val2014/COCO_val2014_000000071826.jpg -../coco/images/val2014/COCO_val2014_000000071986.jpg -../coco/images/val2014/COCO_val2014_000000072004.jpg -../coco/images/val2014/COCO_val2014_000000072020.jpg -../coco/images/val2014/COCO_val2014_000000072052.jpg -../coco/images/val2014/COCO_val2014_000000072281.jpg -../coco/images/val2014/COCO_val2014_000000072368.jpg -../coco/images/val2014/COCO_val2014_000000072737.jpg -../coco/images/val2014/COCO_val2014_000000072797.jpg -../coco/images/val2014/COCO_val2014_000000072860.jpg -../coco/images/val2014/COCO_val2014_000000073009.jpg -../coco/images/val2014/COCO_val2014_000000073039.jpg -../coco/images/val2014/COCO_val2014_000000073239.jpg -../coco/images/val2014/COCO_val2014_000000073467.jpg -../coco/images/val2014/COCO_val2014_000000073491.jpg -../coco/images/val2014/COCO_val2014_000000073588.jpg -../coco/images/val2014/COCO_val2014_000000073729.jpg -../coco/images/val2014/COCO_val2014_000000073973.jpg -../coco/images/val2014/COCO_val2014_000000074037.jpg -../coco/images/val2014/COCO_val2014_000000074137.jpg -../coco/images/val2014/COCO_val2014_000000074268.jpg -../coco/images/val2014/COCO_val2014_000000074434.jpg -../coco/images/val2014/COCO_val2014_000000074789.jpg -../coco/images/val2014/COCO_val2014_000000074963.jpg -../coco/images/val2014/COCO_val2014_000000075033.jpg -../coco/images/val2014/COCO_val2014_000000075372.jpg -../coco/images/val2014/COCO_val2014_000000075527.jpg -../coco/images/val2014/COCO_val2014_000000075646.jpg -../coco/images/val2014/COCO_val2014_000000075713.jpg -../coco/images/val2014/COCO_val2014_000000075775.jpg -../coco/images/val2014/COCO_val2014_000000075786.jpg -../coco/images/val2014/COCO_val2014_000000075886.jpg -../coco/images/val2014/COCO_val2014_000000076087.jpg -../coco/images/val2014/COCO_val2014_000000076257.jpg -../coco/images/val2014/COCO_val2014_000000076521.jpg -../coco/images/val2014/COCO_val2014_000000076572.jpg -../coco/images/val2014/COCO_val2014_000000076844.jpg -../coco/images/val2014/COCO_val2014_000000077178.jpg -../coco/images/val2014/COCO_val2014_000000077181.jpg -../coco/images/val2014/COCO_val2014_000000077184.jpg -../coco/images/val2014/COCO_val2014_000000077396.jpg -../coco/images/val2014/COCO_val2014_000000077400.jpg -../coco/images/val2014/COCO_val2014_000000077415.jpg -../coco/images/val2014/COCO_val2014_000000078565.jpg -../coco/images/val2014/COCO_val2014_000000078701.jpg -../coco/images/val2014/COCO_val2014_000000078843.jpg -../coco/images/val2014/COCO_val2014_000000078929.jpg -../coco/images/val2014/COCO_val2014_000000079084.jpg -../coco/images/val2014/COCO_val2014_000000079188.jpg -../coco/images/val2014/COCO_val2014_000000079544.jpg -../coco/images/val2014/COCO_val2014_000000079566.jpg -../coco/images/val2014/COCO_val2014_000000079588.jpg -../coco/images/val2014/COCO_val2014_000000079689.jpg -../coco/images/val2014/COCO_val2014_000000080104.jpg -../coco/images/val2014/COCO_val2014_000000080172.jpg -../coco/images/val2014/COCO_val2014_000000080219.jpg -../coco/images/val2014/COCO_val2014_000000080300.jpg -../coco/images/val2014/COCO_val2014_000000080395.jpg -../coco/images/val2014/COCO_val2014_000000080522.jpg -../coco/images/val2014/COCO_val2014_000000080714.jpg -../coco/images/val2014/COCO_val2014_000000080737.jpg -../coco/images/val2014/COCO_val2014_000000080747.jpg -../coco/images/val2014/COCO_val2014_000000081000.jpg -../coco/images/val2014/COCO_val2014_000000081081.jpg -../coco/images/val2014/COCO_val2014_000000081100.jpg -../coco/images/val2014/COCO_val2014_000000081287.jpg -../coco/images/val2014/COCO_val2014_000000081394.jpg -../coco/images/val2014/COCO_val2014_000000081552.jpg -../coco/images/val2014/COCO_val2014_000000082157.jpg -../coco/images/val2014/COCO_val2014_000000082252.jpg -../coco/images/val2014/COCO_val2014_000000082259.jpg -../coco/images/val2014/COCO_val2014_000000082367.jpg -../coco/images/val2014/COCO_val2014_000000082431.jpg -../coco/images/val2014/COCO_val2014_000000082456.jpg -../coco/images/val2014/COCO_val2014_000000082794.jpg -../coco/images/val2014/COCO_val2014_000000082807.jpg -../coco/images/val2014/COCO_val2014_000000082846.jpg -../coco/images/val2014/COCO_val2014_000000082847.jpg -../coco/images/val2014/COCO_val2014_000000082889.jpg -../coco/images/val2014/COCO_val2014_000000082981.jpg -../coco/images/val2014/COCO_val2014_000000083036.jpg -../coco/images/val2014/COCO_val2014_000000083065.jpg -../coco/images/val2014/COCO_val2014_000000083142.jpg -../coco/images/val2014/COCO_val2014_000000083275.jpg -../coco/images/val2014/COCO_val2014_000000083557.jpg -../coco/images/val2014/COCO_val2014_000000084073.jpg -../coco/images/val2014/COCO_val2014_000000084447.jpg -../coco/images/val2014/COCO_val2014_000000084463.jpg -../coco/images/val2014/COCO_val2014_000000084592.jpg -../coco/images/val2014/COCO_val2014_000000084674.jpg -../coco/images/val2014/COCO_val2014_000000084762.jpg -../coco/images/val2014/COCO_val2014_000000084870.jpg -../coco/images/val2014/COCO_val2014_000000084929.jpg -../coco/images/val2014/COCO_val2014_000000084980.jpg -../coco/images/val2014/COCO_val2014_000000085101.jpg -../coco/images/val2014/COCO_val2014_000000085292.jpg -../coco/images/val2014/COCO_val2014_000000085353.jpg -../coco/images/val2014/COCO_val2014_000000085674.jpg -../coco/images/val2014/COCO_val2014_000000085813.jpg -../coco/images/val2014/COCO_val2014_000000086011.jpg -../coco/images/val2014/COCO_val2014_000000086133.jpg -../coco/images/val2014/COCO_val2014_000000086136.jpg -../coco/images/val2014/COCO_val2014_000000086215.jpg -../coco/images/val2014/COCO_val2014_000000086220.jpg -../coco/images/val2014/COCO_val2014_000000086249.jpg -../coco/images/val2014/COCO_val2014_000000086320.jpg -../coco/images/val2014/COCO_val2014_000000086357.jpg -../coco/images/val2014/COCO_val2014_000000086429.jpg -../coco/images/val2014/COCO_val2014_000000086467.jpg -../coco/images/val2014/COCO_val2014_000000086483.jpg -../coco/images/val2014/COCO_val2014_000000086646.jpg -../coco/images/val2014/COCO_val2014_000000086755.jpg -../coco/images/val2014/COCO_val2014_000000086839.jpg -../coco/images/val2014/COCO_val2014_000000086848.jpg -../coco/images/val2014/COCO_val2014_000000086877.jpg -../coco/images/val2014/COCO_val2014_000000087038.jpg -../coco/images/val2014/COCO_val2014_000000087244.jpg -../coco/images/val2014/COCO_val2014_000000087354.jpg -../coco/images/val2014/COCO_val2014_000000087387.jpg -../coco/images/val2014/COCO_val2014_000000087489.jpg -../coco/images/val2014/COCO_val2014_000000087503.jpg -../coco/images/val2014/COCO_val2014_000000087617.jpg -../coco/images/val2014/COCO_val2014_000000087638.jpg -../coco/images/val2014/COCO_val2014_000000087740.jpg -../coco/images/val2014/COCO_val2014_000000087875.jpg -../coco/images/val2014/COCO_val2014_000000088360.jpg -../coco/images/val2014/COCO_val2014_000000088507.jpg -../coco/images/val2014/COCO_val2014_000000088560.jpg -../coco/images/val2014/COCO_val2014_000000088846.jpg -../coco/images/val2014/COCO_val2014_000000088859.jpg -../coco/images/val2014/COCO_val2014_000000088902.jpg -../coco/images/val2014/COCO_val2014_000000089027.jpg -../coco/images/val2014/COCO_val2014_000000089258.jpg -../coco/images/val2014/COCO_val2014_000000089285.jpg -../coco/images/val2014/COCO_val2014_000000089359.jpg -../coco/images/val2014/COCO_val2014_000000089378.jpg -../coco/images/val2014/COCO_val2014_000000089391.jpg -../coco/images/val2014/COCO_val2014_000000089487.jpg -../coco/images/val2014/COCO_val2014_000000089618.jpg -../coco/images/val2014/COCO_val2014_000000089670.jpg -../coco/images/val2014/COCO_val2014_000000090003.jpg -../coco/images/val2014/COCO_val2014_000000090062.jpg -../coco/images/val2014/COCO_val2014_000000090155.jpg -../coco/images/val2014/COCO_val2014_000000090208.jpg -../coco/images/val2014/COCO_val2014_000000090351.jpg -../coco/images/val2014/COCO_val2014_000000090476.jpg -../coco/images/val2014/COCO_val2014_000000090594.jpg -../coco/images/val2014/COCO_val2014_000000090753.jpg -../coco/images/val2014/COCO_val2014_000000090754.jpg -../coco/images/val2014/COCO_val2014_000000090864.jpg -../coco/images/val2014/COCO_val2014_000000091079.jpg -../coco/images/val2014/COCO_val2014_000000091341.jpg -../coco/images/val2014/COCO_val2014_000000091402.jpg -../coco/images/val2014/COCO_val2014_000000091517.jpg -../coco/images/val2014/COCO_val2014_000000091520.jpg -../coco/images/val2014/COCO_val2014_000000091612.jpg -../coco/images/val2014/COCO_val2014_000000091716.jpg -../coco/images/val2014/COCO_val2014_000000091766.jpg -../coco/images/val2014/COCO_val2014_000000091857.jpg -../coco/images/val2014/COCO_val2014_000000091899.jpg -../coco/images/val2014/COCO_val2014_000000091912.jpg -../coco/images/val2014/COCO_val2014_000000092093.jpg -../coco/images/val2014/COCO_val2014_000000092124.jpg -../coco/images/val2014/COCO_val2014_000000092679.jpg -../coco/images/val2014/COCO_val2014_000000092683.jpg -../coco/images/val2014/COCO_val2014_000000092939.jpg -../coco/images/val2014/COCO_val2014_000000092985.jpg -../coco/images/val2014/COCO_val2014_000000093175.jpg -../coco/images/val2014/COCO_val2014_000000093236.jpg -../coco/images/val2014/COCO_val2014_000000093331.jpg -../coco/images/val2014/COCO_val2014_000000093434.jpg -../coco/images/val2014/COCO_val2014_000000093607.jpg -../coco/images/val2014/COCO_val2014_000000093806.jpg -../coco/images/val2014/COCO_val2014_000000093964.jpg -../coco/images/val2014/COCO_val2014_000000094012.jpg -../coco/images/val2014/COCO_val2014_000000094033.jpg -../coco/images/val2014/COCO_val2014_000000094046.jpg -../coco/images/val2014/COCO_val2014_000000094052.jpg -../coco/images/val2014/COCO_val2014_000000094055.jpg -../coco/images/val2014/COCO_val2014_000000094501.jpg -../coco/images/val2014/COCO_val2014_000000094619.jpg -../coco/images/val2014/COCO_val2014_000000094746.jpg -../coco/images/val2014/COCO_val2014_000000094795.jpg -../coco/images/val2014/COCO_val2014_000000094846.jpg -../coco/images/val2014/COCO_val2014_000000095062.jpg -../coco/images/val2014/COCO_val2014_000000095063.jpg -../coco/images/val2014/COCO_val2014_000000095227.jpg -../coco/images/val2014/COCO_val2014_000000095441.jpg -../coco/images/val2014/COCO_val2014_000000095551.jpg -../coco/images/val2014/COCO_val2014_000000095670.jpg -../coco/images/val2014/COCO_val2014_000000095770.jpg -../coco/images/val2014/COCO_val2014_000000096110.jpg -../coco/images/val2014/COCO_val2014_000000096288.jpg -../coco/images/val2014/COCO_val2014_000000096327.jpg -../coco/images/val2014/COCO_val2014_000000096351.jpg -../coco/images/val2014/COCO_val2014_000000096618.jpg -../coco/images/val2014/COCO_val2014_000000096654.jpg -../coco/images/val2014/COCO_val2014_000000096762.jpg -../coco/images/val2014/COCO_val2014_000000096769.jpg -../coco/images/val2014/COCO_val2014_000000096998.jpg -../coco/images/val2014/COCO_val2014_000000097017.jpg -../coco/images/val2014/COCO_val2014_000000097048.jpg -../coco/images/val2014/COCO_val2014_000000097080.jpg -../coco/images/val2014/COCO_val2014_000000097240.jpg -../coco/images/val2014/COCO_val2014_000000097479.jpg -../coco/images/val2014/COCO_val2014_000000097577.jpg -../coco/images/val2014/COCO_val2014_000000097610.jpg -../coco/images/val2014/COCO_val2014_000000097656.jpg -../coco/images/val2014/COCO_val2014_000000097667.jpg -../coco/images/val2014/COCO_val2014_000000097682.jpg -../coco/images/val2014/COCO_val2014_000000097748.jpg -../coco/images/val2014/COCO_val2014_000000097868.jpg -../coco/images/val2014/COCO_val2014_000000097899.jpg -../coco/images/val2014/COCO_val2014_000000098018.jpg -../coco/images/val2014/COCO_val2014_000000098043.jpg -../coco/images/val2014/COCO_val2014_000000098095.jpg -../coco/images/val2014/COCO_val2014_000000098194.jpg -../coco/images/val2014/COCO_val2014_000000098280.jpg -../coco/images/val2014/COCO_val2014_000000098283.jpg -../coco/images/val2014/COCO_val2014_000000098599.jpg -../coco/images/val2014/COCO_val2014_000000098872.jpg -../coco/images/val2014/COCO_val2014_000000099026.jpg -../coco/images/val2014/COCO_val2014_000000099260.jpg -../coco/images/val2014/COCO_val2014_000000099389.jpg -../coco/images/val2014/COCO_val2014_000000099707.jpg -../coco/images/val2014/COCO_val2014_000000099961.jpg -../coco/images/val2014/COCO_val2014_000000099996.jpg -../coco/images/val2014/COCO_val2014_000000100000.jpg -../coco/images/val2014/COCO_val2014_000000100006.jpg -../coco/images/val2014/COCO_val2014_000000100083.jpg -../coco/images/val2014/COCO_val2014_000000100166.jpg -../coco/images/val2014/COCO_val2014_000000100187.jpg -../coco/images/val2014/COCO_val2014_000000100245.jpg -../coco/images/val2014/COCO_val2014_000000100343.jpg -../coco/images/val2014/COCO_val2014_000000100428.jpg -../coco/images/val2014/COCO_val2014_000000100582.jpg -../coco/images/val2014/COCO_val2014_000000100723.jpg -../coco/images/val2014/COCO_val2014_000000100726.jpg -../coco/images/val2014/COCO_val2014_000000100909.jpg -../coco/images/val2014/COCO_val2014_000000101059.jpg -../coco/images/val2014/COCO_val2014_000000101145.jpg -../coco/images/val2014/COCO_val2014_000000101567.jpg -../coco/images/val2014/COCO_val2014_000000101623.jpg -../coco/images/val2014/COCO_val2014_000000101703.jpg -../coco/images/val2014/COCO_val2014_000000101884.jpg -../coco/images/val2014/COCO_val2014_000000101948.jpg -../coco/images/val2014/COCO_val2014_000000102331.jpg -../coco/images/val2014/COCO_val2014_000000102421.jpg -../coco/images/val2014/COCO_val2014_000000102439.jpg -../coco/images/val2014/COCO_val2014_000000102446.jpg -../coco/images/val2014/COCO_val2014_000000102461.jpg -../coco/images/val2014/COCO_val2014_000000102466.jpg -../coco/images/val2014/COCO_val2014_000000102478.jpg -../coco/images/val2014/COCO_val2014_000000102594.jpg -../coco/images/val2014/COCO_val2014_000000102598.jpg -../coco/images/val2014/COCO_val2014_000000102665.jpg -../coco/images/val2014/COCO_val2014_000000102707.jpg -../coco/images/val2014/COCO_val2014_000000102848.jpg -../coco/images/val2014/COCO_val2014_000000102906.jpg -../coco/images/val2014/COCO_val2014_000000103122.jpg -../coco/images/val2014/COCO_val2014_000000103255.jpg -../coco/images/val2014/COCO_val2014_000000103272.jpg -../coco/images/val2014/COCO_val2014_000000103379.jpg -../coco/images/val2014/COCO_val2014_000000103413.jpg -../coco/images/val2014/COCO_val2014_000000103431.jpg -../coco/images/val2014/COCO_val2014_000000103509.jpg -../coco/images/val2014/COCO_val2014_000000103538.jpg -../coco/images/val2014/COCO_val2014_000000103667.jpg -../coco/images/val2014/COCO_val2014_000000103747.jpg -../coco/images/val2014/COCO_val2014_000000103931.jpg -../coco/images/val2014/COCO_val2014_000000104002.jpg -../coco/images/val2014/COCO_val2014_000000104455.jpg -../coco/images/val2014/COCO_val2014_000000104486.jpg -../coco/images/val2014/COCO_val2014_000000104494.jpg -../coco/images/val2014/COCO_val2014_000000104495.jpg -../coco/images/val2014/COCO_val2014_000000104893.jpg -../coco/images/val2014/COCO_val2014_000000104965.jpg -../coco/images/val2014/COCO_val2014_000000105040.jpg -../coco/images/val2014/COCO_val2014_000000105102.jpg -../coco/images/val2014/COCO_val2014_000000105156.jpg -../coco/images/val2014/COCO_val2014_000000105264.jpg -../coco/images/val2014/COCO_val2014_000000105291.jpg -../coco/images/val2014/COCO_val2014_000000105367.jpg -../coco/images/val2014/COCO_val2014_000000105647.jpg -../coco/images/val2014/COCO_val2014_000000105668.jpg -../coco/images/val2014/COCO_val2014_000000105711.jpg -../coco/images/val2014/COCO_val2014_000000105866.jpg -../coco/images/val2014/COCO_val2014_000000105973.jpg -../coco/images/val2014/COCO_val2014_000000106096.jpg -../coco/images/val2014/COCO_val2014_000000106120.jpg -../coco/images/val2014/COCO_val2014_000000106314.jpg -../coco/images/val2014/COCO_val2014_000000106351.jpg -../coco/images/val2014/COCO_val2014_000000106641.jpg -../coco/images/val2014/COCO_val2014_000000106661.jpg -../coco/images/val2014/COCO_val2014_000000106757.jpg -../coco/images/val2014/COCO_val2014_000000106793.jpg -../coco/images/val2014/COCO_val2014_000000106849.jpg -../coco/images/val2014/COCO_val2014_000000107004.jpg -../coco/images/val2014/COCO_val2014_000000107123.jpg -../coco/images/val2014/COCO_val2014_000000107183.jpg -../coco/images/val2014/COCO_val2014_000000107227.jpg -../coco/images/val2014/COCO_val2014_000000107244.jpg -../coco/images/val2014/COCO_val2014_000000107304.jpg -../coco/images/val2014/COCO_val2014_000000107542.jpg -../coco/images/val2014/COCO_val2014_000000107741.jpg -../coco/images/val2014/COCO_val2014_000000107831.jpg -../coco/images/val2014/COCO_val2014_000000107839.jpg -../coco/images/val2014/COCO_val2014_000000108051.jpg -../coco/images/val2014/COCO_val2014_000000108152.jpg -../coco/images/val2014/COCO_val2014_000000108212.jpg -../coco/images/val2014/COCO_val2014_000000108380.jpg -../coco/images/val2014/COCO_val2014_000000108408.jpg -../coco/images/val2014/COCO_val2014_000000108531.jpg -../coco/images/val2014/COCO_val2014_000000108761.jpg -../coco/images/val2014/COCO_val2014_000000108864.jpg -../coco/images/val2014/COCO_val2014_000000109055.jpg -../coco/images/val2014/COCO_val2014_000000109092.jpg -../coco/images/val2014/COCO_val2014_000000109178.jpg -../coco/images/val2014/COCO_val2014_000000109216.jpg -../coco/images/val2014/COCO_val2014_000000109231.jpg -../coco/images/val2014/COCO_val2014_000000109308.jpg -../coco/images/val2014/COCO_val2014_000000109486.jpg -../coco/images/val2014/COCO_val2014_000000109819.jpg -../coco/images/val2014/COCO_val2014_000000109869.jpg -../coco/images/val2014/COCO_val2014_000000110313.jpg -../coco/images/val2014/COCO_val2014_000000110389.jpg -../coco/images/val2014/COCO_val2014_000000110562.jpg -../coco/images/val2014/COCO_val2014_000000110617.jpg -../coco/images/val2014/COCO_val2014_000000110638.jpg -../coco/images/val2014/COCO_val2014_000000110881.jpg -../coco/images/val2014/COCO_val2014_000000110884.jpg -../coco/images/val2014/COCO_val2014_000000110951.jpg -../coco/images/val2014/COCO_val2014_000000111004.jpg -../coco/images/val2014/COCO_val2014_000000111014.jpg -../coco/images/val2014/COCO_val2014_000000111024.jpg -../coco/images/val2014/COCO_val2014_000000111076.jpg -../coco/images/val2014/COCO_val2014_000000111179.jpg -../coco/images/val2014/COCO_val2014_000000111590.jpg -../coco/images/val2014/COCO_val2014_000000111593.jpg -../coco/images/val2014/COCO_val2014_000000111878.jpg -../coco/images/val2014/COCO_val2014_000000112298.jpg -../coco/images/val2014/COCO_val2014_000000112388.jpg -../coco/images/val2014/COCO_val2014_000000112394.jpg -../coco/images/val2014/COCO_val2014_000000112440.jpg -../coco/images/val2014/COCO_val2014_000000112751.jpg -../coco/images/val2014/COCO_val2014_000000112818.jpg -../coco/images/val2014/COCO_val2014_000000112820.jpg -../coco/images/val2014/COCO_val2014_000000112830.jpg -../coco/images/val2014/COCO_val2014_000000112928.jpg -../coco/images/val2014/COCO_val2014_000000113139.jpg -../coco/images/val2014/COCO_val2014_000000113173.jpg -../coco/images/val2014/COCO_val2014_000000113313.jpg -../coco/images/val2014/COCO_val2014_000000113440.jpg -../coco/images/val2014/COCO_val2014_000000113559.jpg -../coco/images/val2014/COCO_val2014_000000113570.jpg -../coco/images/val2014/COCO_val2014_000000113579.jpg -../coco/images/val2014/COCO_val2014_000000113590.jpg -../coco/images/val2014/COCO_val2014_000000113757.jpg -../coco/images/val2014/COCO_val2014_000000113977.jpg -../coco/images/val2014/COCO_val2014_000000114033.jpg -../coco/images/val2014/COCO_val2014_000000114055.jpg -../coco/images/val2014/COCO_val2014_000000114090.jpg -../coco/images/val2014/COCO_val2014_000000114147.jpg -../coco/images/val2014/COCO_val2014_000000114239.jpg -../coco/images/val2014/COCO_val2014_000000114503.jpg -../coco/images/val2014/COCO_val2014_000000114907.jpg -../coco/images/val2014/COCO_val2014_000000114926.jpg -../coco/images/val2014/COCO_val2014_000000115069.jpg -../coco/images/val2014/COCO_val2014_000000115070.jpg -../coco/images/val2014/COCO_val2014_000000115128.jpg -../coco/images/val2014/COCO_val2014_000000115870.jpg -../coco/images/val2014/COCO_val2014_000000115898.jpg -../coco/images/val2014/COCO_val2014_000000115930.jpg -../coco/images/val2014/COCO_val2014_000000116226.jpg -../coco/images/val2014/COCO_val2014_000000116556.jpg -../coco/images/val2014/COCO_val2014_000000116667.jpg -../coco/images/val2014/COCO_val2014_000000116696.jpg -../coco/images/val2014/COCO_val2014_000000116936.jpg -../coco/images/val2014/COCO_val2014_000000117014.jpg -../coco/images/val2014/COCO_val2014_000000117037.jpg -../coco/images/val2014/COCO_val2014_000000117125.jpg -../coco/images/val2014/COCO_val2014_000000117127.jpg -../coco/images/val2014/COCO_val2014_000000117191.jpg -../coco/images/val2014/COCO_val2014_000000117201.jpg -../coco/images/val2014/COCO_val2014_000000117237.jpg -../coco/images/val2014/COCO_val2014_000000117404.jpg -../coco/images/val2014/COCO_val2014_000000117527.jpg -../coco/images/val2014/COCO_val2014_000000117718.jpg -../coco/images/val2014/COCO_val2014_000000117725.jpg -../coco/images/val2014/COCO_val2014_000000117786.jpg -../coco/images/val2014/COCO_val2014_000000117899.jpg -../coco/images/val2014/COCO_val2014_000000118401.jpg -../coco/images/val2014/COCO_val2014_000000118546.jpg -../coco/images/val2014/COCO_val2014_000000118579.jpg -../coco/images/val2014/COCO_val2014_000000118740.jpg -../coco/images/val2014/COCO_val2014_000000118788.jpg -../coco/images/val2014/COCO_val2014_000000118956.jpg -../coco/images/val2014/COCO_val2014_000000119232.jpg -../coco/images/val2014/COCO_val2014_000000119233.jpg -../coco/images/val2014/COCO_val2014_000000119445.jpg -../coco/images/val2014/COCO_val2014_000000119617.jpg -../coco/images/val2014/COCO_val2014_000000119785.jpg -../coco/images/val2014/COCO_val2014_000000119964.jpg -../coco/images/val2014/COCO_val2014_000000120248.jpg -../coco/images/val2014/COCO_val2014_000000120380.jpg -../coco/images/val2014/COCO_val2014_000000120682.jpg -../coco/images/val2014/COCO_val2014_000000120767.jpg -../coco/images/val2014/COCO_val2014_000000120935.jpg -../coco/images/val2014/COCO_val2014_000000120964.jpg -../coco/images/val2014/COCO_val2014_000000121112.jpg -../coco/images/val2014/COCO_val2014_000000121417.jpg -../coco/images/val2014/COCO_val2014_000000121503.jpg -../coco/images/val2014/COCO_val2014_000000121591.jpg -../coco/images/val2014/COCO_val2014_000000121633.jpg -../coco/images/val2014/COCO_val2014_000000121817.jpg -../coco/images/val2014/COCO_val2014_000000121826.jpg -../coco/images/val2014/COCO_val2014_000000121849.jpg -../coco/images/val2014/COCO_val2014_000000122039.jpg -../coco/images/val2014/COCO_val2014_000000122166.jpg -../coco/images/val2014/COCO_val2014_000000122213.jpg -../coco/images/val2014/COCO_val2014_000000122229.jpg -../coco/images/val2014/COCO_val2014_000000122239.jpg -../coco/images/val2014/COCO_val2014_000000122266.jpg -../coco/images/val2014/COCO_val2014_000000122300.jpg -../coco/images/val2014/COCO_val2014_000000122458.jpg -../coco/images/val2014/COCO_val2014_000000122589.jpg -../coco/images/val2014/COCO_val2014_000000122678.jpg -../coco/images/val2014/COCO_val2014_000000122747.jpg -../coco/images/val2014/COCO_val2014_000000123070.jpg -../coco/images/val2014/COCO_val2014_000000123125.jpg -../coco/images/val2014/COCO_val2014_000000123220.jpg -../coco/images/val2014/COCO_val2014_000000123244.jpg -../coco/images/val2014/COCO_val2014_000000123469.jpg -../coco/images/val2014/COCO_val2014_000000123570.jpg -../coco/images/val2014/COCO_val2014_000000123622.jpg -../coco/images/val2014/COCO_val2014_000000123627.jpg -../coco/images/val2014/COCO_val2014_000000123867.jpg -../coco/images/val2014/COCO_val2014_000000123964.jpg -../coco/images/val2014/COCO_val2014_000000124013.jpg -../coco/images/val2014/COCO_val2014_000000124018.jpg -../coco/images/val2014/COCO_val2014_000000124072.jpg -../coco/images/val2014/COCO_val2014_000000124128.jpg -../coco/images/val2014/COCO_val2014_000000124157.jpg -../coco/images/val2014/COCO_val2014_000000124243.jpg -../coco/images/val2014/COCO_val2014_000000124246.jpg -../coco/images/val2014/COCO_val2014_000000124647.jpg -../coco/images/val2014/COCO_val2014_000000125051.jpg -../coco/images/val2014/COCO_val2014_000000125070.jpg -../coco/images/val2014/COCO_val2014_000000125072.jpg -../coco/images/val2014/COCO_val2014_000000125228.jpg -../coco/images/val2014/COCO_val2014_000000125286.jpg -../coco/images/val2014/COCO_val2014_000000125322.jpg -../coco/images/val2014/COCO_val2014_000000125476.jpg -../coco/images/val2014/COCO_val2014_000000125645.jpg -../coco/images/val2014/COCO_val2014_000000125815.jpg -../coco/images/val2014/COCO_val2014_000000125983.jpg -../coco/images/val2014/COCO_val2014_000000126064.jpg -../coco/images/val2014/COCO_val2014_000000126098.jpg -../coco/images/val2014/COCO_val2014_000000126216.jpg -../coco/images/val2014/COCO_val2014_000000126229.jpg -../coco/images/val2014/COCO_val2014_000000126253.jpg -../coco/images/val2014/COCO_val2014_000000126299.jpg -../coco/images/val2014/COCO_val2014_000000126833.jpg -../coco/images/val2014/COCO_val2014_000000126895.jpg -../coco/images/val2014/COCO_val2014_000000127135.jpg -../coco/images/val2014/COCO_val2014_000000127170.jpg -../coco/images/val2014/COCO_val2014_000000127192.jpg -../coco/images/val2014/COCO_val2014_000000127476.jpg -../coco/images/val2014/COCO_val2014_000000127496.jpg -../coco/images/val2014/COCO_val2014_000000127514.jpg -../coco/images/val2014/COCO_val2014_000000127520.jpg -../coco/images/val2014/COCO_val2014_000000127576.jpg -../coco/images/val2014/COCO_val2014_000000127775.jpg -../coco/images/val2014/COCO_val2014_000000127801.jpg -../coco/images/val2014/COCO_val2014_000000127955.jpg -../coco/images/val2014/COCO_val2014_000000128119.jpg -../coco/images/val2014/COCO_val2014_000000128644.jpg -../coco/images/val2014/COCO_val2014_000000128748.jpg -../coco/images/val2014/COCO_val2014_000000128849.jpg -../coco/images/val2014/COCO_val2014_000000129062.jpg -../coco/images/val2014/COCO_val2014_000000129362.jpg -../coco/images/val2014/COCO_val2014_000000129566.jpg -../coco/images/val2014/COCO_val2014_000000129735.jpg -../coco/images/val2014/COCO_val2014_000000130076.jpg -../coco/images/val2014/COCO_val2014_000000130516.jpg -../coco/images/val2014/COCO_val2014_000000130555.jpg -../coco/images/val2014/COCO_val2014_000000130579.jpg -../coco/images/val2014/COCO_val2014_000000130613.jpg -../coco/images/val2014/COCO_val2014_000000130651.jpg -../coco/images/val2014/COCO_val2014_000000130663.jpg -../coco/images/val2014/COCO_val2014_000000130699.jpg -../coco/images/val2014/COCO_val2014_000000130712.jpg -../coco/images/val2014/COCO_val2014_000000130849.jpg -../coco/images/val2014/COCO_val2014_000000131115.jpg -../coco/images/val2014/COCO_val2014_000000131138.jpg -../coco/images/val2014/COCO_val2014_000000131207.jpg -../coco/images/val2014/COCO_val2014_000000131276.jpg -../coco/images/val2014/COCO_val2014_000000131431.jpg -../coco/images/val2014/COCO_val2014_000000132001.jpg -../coco/images/val2014/COCO_val2014_000000132042.jpg -../coco/images/val2014/COCO_val2014_000000132143.jpg -../coco/images/val2014/COCO_val2014_000000132182.jpg -../coco/images/val2014/COCO_val2014_000000132223.jpg -../coco/images/val2014/COCO_val2014_000000132272.jpg -../coco/images/val2014/COCO_val2014_000000132375.jpg -../coco/images/val2014/COCO_val2014_000000132389.jpg -../coco/images/val2014/COCO_val2014_000000132510.jpg -../coco/images/val2014/COCO_val2014_000000132540.jpg -../coco/images/val2014/COCO_val2014_000000132686.jpg -../coco/images/val2014/COCO_val2014_000000132861.jpg -../coco/images/val2014/COCO_val2014_000000132992.jpg -../coco/images/val2014/COCO_val2014_000000133233.jpg -../coco/images/val2014/COCO_val2014_000000133237.jpg -../coco/images/val2014/COCO_val2014_000000133244.jpg -../coco/images/val2014/COCO_val2014_000000133251.jpg -../coco/images/val2014/COCO_val2014_000000133279.jpg -../coco/images/val2014/COCO_val2014_000000133485.jpg -../coco/images/val2014/COCO_val2014_000000133571.jpg -../coco/images/val2014/COCO_val2014_000000133611.jpg -../coco/images/val2014/COCO_val2014_000000133999.jpg -../coco/images/val2014/COCO_val2014_000000134001.jpg -../coco/images/val2014/COCO_val2014_000000134112.jpg -../coco/images/val2014/COCO_val2014_000000134133.jpg -../coco/images/val2014/COCO_val2014_000000134167.jpg -../coco/images/val2014/COCO_val2014_000000134198.jpg -../coco/images/val2014/COCO_val2014_000000134223.jpg -../coco/images/val2014/COCO_val2014_000000134537.jpg -../coco/images/val2014/COCO_val2014_000000134542.jpg -../coco/images/val2014/COCO_val2014_000000134935.jpg -../coco/images/val2014/COCO_val2014_000000135029.jpg -../coco/images/val2014/COCO_val2014_000000135266.jpg -../coco/images/val2014/COCO_val2014_000000135356.jpg -../coco/images/val2014/COCO_val2014_000000135579.jpg -../coco/images/val2014/COCO_val2014_000000135670.jpg -../coco/images/val2014/COCO_val2014_000000135671.jpg -../coco/images/val2014/COCO_val2014_000000135785.jpg -../coco/images/val2014/COCO_val2014_000000135900.jpg -../coco/images/val2014/COCO_val2014_000000135975.jpg -../coco/images/val2014/COCO_val2014_000000136008.jpg -../coco/images/val2014/COCO_val2014_000000136181.jpg -../coco/images/val2014/COCO_val2014_000000136285.jpg -../coco/images/val2014/COCO_val2014_000000136400.jpg -../coco/images/val2014/COCO_val2014_000000136458.jpg -../coco/images/val2014/COCO_val2014_000000136501.jpg -../coco/images/val2014/COCO_val2014_000000136552.jpg -../coco/images/val2014/COCO_val2014_000000136644.jpg -../coco/images/val2014/COCO_val2014_000000136718.jpg -../coco/images/val2014/COCO_val2014_000000136740.jpg -../coco/images/val2014/COCO_val2014_000000136780.jpg -../coco/images/val2014/COCO_val2014_000000136793.jpg -../coco/images/val2014/COCO_val2014_000000136870.jpg -../coco/images/val2014/COCO_val2014_000000136915.jpg -../coco/images/val2014/COCO_val2014_000000137211.jpg -../coco/images/val2014/COCO_val2014_000000137265.jpg -../coco/images/val2014/COCO_val2014_000000137271.jpg -../coco/images/val2014/COCO_val2014_000000137294.jpg -../coco/images/val2014/COCO_val2014_000000137300.jpg -../coco/images/val2014/COCO_val2014_000000137301.jpg -../coco/images/val2014/COCO_val2014_000000137395.jpg -../coco/images/val2014/COCO_val2014_000000137451.jpg -../coco/images/val2014/COCO_val2014_000000137507.jpg -../coco/images/val2014/COCO_val2014_000000137595.jpg -../coco/images/val2014/COCO_val2014_000000137658.jpg -../coco/images/val2014/COCO_val2014_000000137678.jpg -../coco/images/val2014/COCO_val2014_000000137727.jpg -../coco/images/val2014/COCO_val2014_000000137803.jpg -../coco/images/val2014/COCO_val2014_000000137993.jpg -../coco/images/val2014/COCO_val2014_000000138070.jpg -../coco/images/val2014/COCO_val2014_000000138075.jpg -../coco/images/val2014/COCO_val2014_000000138397.jpg -../coco/images/val2014/COCO_val2014_000000138517.jpg -../coco/images/val2014/COCO_val2014_000000138573.jpg -../coco/images/val2014/COCO_val2014_000000138589.jpg -../coco/images/val2014/COCO_val2014_000000138648.jpg -../coco/images/val2014/COCO_val2014_000000138814.jpg -../coco/images/val2014/COCO_val2014_000000138937.jpg -../coco/images/val2014/COCO_val2014_000000139140.jpg -../coco/images/val2014/COCO_val2014_000000139141.jpg -../coco/images/val2014/COCO_val2014_000000139260.jpg -../coco/images/val2014/COCO_val2014_000000139294.jpg -../coco/images/val2014/COCO_val2014_000000139436.jpg -../coco/images/val2014/COCO_val2014_000000139440.jpg -../coco/images/val2014/COCO_val2014_000000139623.jpg -../coco/images/val2014/COCO_val2014_000000139871.jpg -../coco/images/val2014/COCO_val2014_000000140006.jpg -../coco/images/val2014/COCO_val2014_000000140043.jpg -../coco/images/val2014/COCO_val2014_000000140068.jpg -../coco/images/val2014/COCO_val2014_000000140087.jpg -../coco/images/val2014/COCO_val2014_000000140197.jpg -../coco/images/val2014/COCO_val2014_000000140203.jpg -../coco/images/val2014/COCO_val2014_000000140388.jpg -../coco/images/val2014/COCO_val2014_000000140661.jpg -../coco/images/val2014/COCO_val2014_000000140664.jpg -../coco/images/val2014/COCO_val2014_000000140686.jpg -../coco/images/val2014/COCO_val2014_000000140696.jpg -../coco/images/val2014/COCO_val2014_000000140987.jpg -../coco/images/val2014/COCO_val2014_000000141197.jpg -../coco/images/val2014/COCO_val2014_000000141211.jpg -../coco/images/val2014/COCO_val2014_000000141509.jpg -../coco/images/val2014/COCO_val2014_000000141517.jpg -../coco/images/val2014/COCO_val2014_000000141574.jpg -../coco/images/val2014/COCO_val2014_000000141634.jpg -../coco/images/val2014/COCO_val2014_000000141673.jpg -../coco/images/val2014/COCO_val2014_000000141760.jpg -../coco/images/val2014/COCO_val2014_000000141795.jpg -../coco/images/val2014/COCO_val2014_000000141807.jpg -../coco/images/val2014/COCO_val2014_000000141849.jpg -../coco/images/val2014/COCO_val2014_000000142092.jpg -../coco/images/val2014/COCO_val2014_000000142189.jpg -../coco/images/val2014/COCO_val2014_000000142318.jpg -../coco/images/val2014/COCO_val2014_000000142537.jpg -../coco/images/val2014/COCO_val2014_000000142941.jpg -../coco/images/val2014/COCO_val2014_000000142949.jpg -../coco/images/val2014/COCO_val2014_000000143125.jpg -../coco/images/val2014/COCO_val2014_000000143143.jpg -../coco/images/val2014/COCO_val2014_000000143174.jpg -../coco/images/val2014/COCO_val2014_000000143217.jpg -../coco/images/val2014/COCO_val2014_000000143236.jpg -../coco/images/val2014/COCO_val2014_000000143479.jpg -../coco/images/val2014/COCO_val2014_000000143644.jpg -../coco/images/val2014/COCO_val2014_000000143653.jpg -../coco/images/val2014/COCO_val2014_000000143671.jpg -../coco/images/val2014/COCO_val2014_000000143737.jpg -../coco/images/val2014/COCO_val2014_000000143769.jpg -../coco/images/val2014/COCO_val2014_000000143792.jpg -../coco/images/val2014/COCO_val2014_000000143931.jpg -../coco/images/val2014/COCO_val2014_000000144003.jpg -../coco/images/val2014/COCO_val2014_000000144058.jpg -../coco/images/val2014/COCO_val2014_000000144200.jpg -../coco/images/val2014/COCO_val2014_000000144228.jpg -../coco/images/val2014/COCO_val2014_000000144539.jpg -../coco/images/val2014/COCO_val2014_000000144985.jpg -../coco/images/val2014/COCO_val2014_000000145093.jpg -../coco/images/val2014/COCO_val2014_000000145101.jpg -../coco/images/val2014/COCO_val2014_000000145227.jpg -../coco/images/val2014/COCO_val2014_000000145295.jpg -../coco/images/val2014/COCO_val2014_000000145408.jpg -../coco/images/val2014/COCO_val2014_000000145520.jpg -../coco/images/val2014/COCO_val2014_000000145597.jpg -../coco/images/val2014/COCO_val2014_000000145620.jpg -../coco/images/val2014/COCO_val2014_000000145750.jpg -../coco/images/val2014/COCO_val2014_000000145781.jpg -../coco/images/val2014/COCO_val2014_000000145824.jpg -../coco/images/val2014/COCO_val2014_000000145831.jpg -../coco/images/val2014/COCO_val2014_000000146193.jpg -../coco/images/val2014/COCO_val2014_000000146253.jpg -../coco/images/val2014/COCO_val2014_000000146570.jpg -../coco/images/val2014/COCO_val2014_000000146614.jpg -../coco/images/val2014/COCO_val2014_000000146627.jpg -../coco/images/val2014/COCO_val2014_000000146667.jpg -../coco/images/val2014/COCO_val2014_000000146730.jpg -../coco/images/val2014/COCO_val2014_000000146830.jpg -../coco/images/val2014/COCO_val2014_000000146837.jpg -../coco/images/val2014/COCO_val2014_000000146961.jpg -../coco/images/val2014/COCO_val2014_000000147030.jpg -../coco/images/val2014/COCO_val2014_000000147058.jpg -../coco/images/val2014/COCO_val2014_000000147101.jpg -../coco/images/val2014/COCO_val2014_000000147128.jpg -../coco/images/val2014/COCO_val2014_000000147409.jpg -../coco/images/val2014/COCO_val2014_000000147556.jpg -../coco/images/val2014/COCO_val2014_000000147921.jpg -../coco/images/val2014/COCO_val2014_000000148170.jpg -../coco/images/val2014/COCO_val2014_000000148188.jpg -../coco/images/val2014/COCO_val2014_000000148458.jpg -../coco/images/val2014/COCO_val2014_000000148542.jpg -../coco/images/val2014/COCO_val2014_000000148568.jpg -../coco/images/val2014/COCO_val2014_000000148719.jpg -../coco/images/val2014/COCO_val2014_000000148792.jpg -../coco/images/val2014/COCO_val2014_000000148955.jpg -../coco/images/val2014/COCO_val2014_000000149052.jpg -../coco/images/val2014/COCO_val2014_000000149268.jpg -../coco/images/val2014/COCO_val2014_000000149329.jpg -../coco/images/val2014/COCO_val2014_000000149469.jpg -../coco/images/val2014/COCO_val2014_000000149568.jpg -../coco/images/val2014/COCO_val2014_000000149767.jpg -../coco/images/val2014/COCO_val2014_000000149890.jpg -../coco/images/val2014/COCO_val2014_000000150026.jpg -../coco/images/val2014/COCO_val2014_000000150080.jpg -../coco/images/val2014/COCO_val2014_000000150267.jpg -../coco/images/val2014/COCO_val2014_000000150301.jpg -../coco/images/val2014/COCO_val2014_000000150317.jpg -../coco/images/val2014/COCO_val2014_000000150320.jpg -../coco/images/val2014/COCO_val2014_000000150417.jpg -../coco/images/val2014/COCO_val2014_000000150538.jpg -../coco/images/val2014/COCO_val2014_000000150763.jpg -../coco/images/val2014/COCO_val2014_000000150843.jpg -../coco/images/val2014/COCO_val2014_000000150874.jpg -../coco/images/val2014/COCO_val2014_000000150888.jpg -../coco/images/val2014/COCO_val2014_000000151005.jpg -../coco/images/val2014/COCO_val2014_000000151159.jpg -../coco/images/val2014/COCO_val2014_000000151558.jpg -../coco/images/val2014/COCO_val2014_000000151585.jpg -../coco/images/val2014/COCO_val2014_000000151657.jpg -../coco/images/val2014/COCO_val2014_000000151704.jpg -../coco/images/val2014/COCO_val2014_000000151733.jpg -../coco/images/val2014/COCO_val2014_000000151790.jpg -../coco/images/val2014/COCO_val2014_000000151911.jpg -../coco/images/val2014/COCO_val2014_000000151962.jpg -../coco/images/val2014/COCO_val2014_000000151970.jpg -../coco/images/val2014/COCO_val2014_000000151988.jpg -../coco/images/val2014/COCO_val2014_000000152000.jpg -../coco/images/val2014/COCO_val2014_000000152192.jpg -../coco/images/val2014/COCO_val2014_000000152208.jpg -../coco/images/val2014/COCO_val2014_000000152245.jpg -../coco/images/val2014/COCO_val2014_000000152330.jpg -../coco/images/val2014/COCO_val2014_000000152340.jpg -../coco/images/val2014/COCO_val2014_000000152499.jpg -../coco/images/val2014/COCO_val2014_000000152751.jpg -../coco/images/val2014/COCO_val2014_000000153011.jpg -../coco/images/val2014/COCO_val2014_000000153038.jpg -../coco/images/val2014/COCO_val2014_000000153061.jpg -../coco/images/val2014/COCO_val2014_000000153094.jpg -../coco/images/val2014/COCO_val2014_000000153231.jpg -../coco/images/val2014/COCO_val2014_000000153300.jpg -../coco/images/val2014/COCO_val2014_000000153486.jpg -../coco/images/val2014/COCO_val2014_000000153520.jpg -../coco/images/val2014/COCO_val2014_000000153563.jpg -../coco/images/val2014/COCO_val2014_000000153578.jpg -../coco/images/val2014/COCO_val2014_000000153697.jpg -../coco/images/val2014/COCO_val2014_000000153822.jpg -../coco/images/val2014/COCO_val2014_000000153896.jpg -../coco/images/val2014/COCO_val2014_000000154004.jpg -../coco/images/val2014/COCO_val2014_000000154053.jpg -../coco/images/val2014/COCO_val2014_000000154095.jpg -../coco/images/val2014/COCO_val2014_000000154363.jpg -../coco/images/val2014/COCO_val2014_000000154423.jpg -../coco/images/val2014/COCO_val2014_000000154520.jpg -../coco/images/val2014/COCO_val2014_000000154705.jpg -../coco/images/val2014/COCO_val2014_000000154854.jpg -../coco/images/val2014/COCO_val2014_000000155035.jpg -../coco/images/val2014/COCO_val2014_000000155087.jpg -../coco/images/val2014/COCO_val2014_000000155131.jpg -../coco/images/val2014/COCO_val2014_000000155142.jpg -../coco/images/val2014/COCO_val2014_000000155443.jpg -../coco/images/val2014/COCO_val2014_000000155671.jpg -../coco/images/val2014/COCO_val2014_000000155811.jpg -../coco/images/val2014/COCO_val2014_000000155861.jpg -../coco/images/val2014/COCO_val2014_000000156025.jpg -../coco/images/val2014/COCO_val2014_000000156292.jpg -../coco/images/val2014/COCO_val2014_000000156466.jpg -../coco/images/val2014/COCO_val2014_000000156636.jpg -../coco/images/val2014/COCO_val2014_000000156756.jpg -../coco/images/val2014/COCO_val2014_000000156834.jpg -../coco/images/val2014/COCO_val2014_000000156924.jpg -../coco/images/val2014/COCO_val2014_000000157109.jpg -../coco/images/val2014/COCO_val2014_000000157352.jpg -../coco/images/val2014/COCO_val2014_000000157365.jpg -../coco/images/val2014/COCO_val2014_000000157465.jpg -../coco/images/val2014/COCO_val2014_000000157592.jpg -../coco/images/val2014/COCO_val2014_000000157756.jpg -../coco/images/val2014/COCO_val2014_000000157938.jpg -../coco/images/val2014/COCO_val2014_000000158227.jpg -../coco/images/val2014/COCO_val2014_000000158272.jpg -../coco/images/val2014/COCO_val2014_000000158412.jpg -../coco/images/val2014/COCO_val2014_000000158494.jpg -../coco/images/val2014/COCO_val2014_000000158563.jpg -../coco/images/val2014/COCO_val2014_000000158583.jpg -../coco/images/val2014/COCO_val2014_000000158660.jpg -../coco/images/val2014/COCO_val2014_000000158795.jpg -../coco/images/val2014/COCO_val2014_000000158999.jpg -../coco/images/val2014/COCO_val2014_000000159269.jpg -../coco/images/val2014/COCO_val2014_000000159282.jpg -../coco/images/val2014/COCO_val2014_000000159377.jpg -../coco/images/val2014/COCO_val2014_000000159458.jpg -../coco/images/val2014/COCO_val2014_000000159606.jpg -../coco/images/val2014/COCO_val2014_000000159791.jpg -../coco/images/val2014/COCO_val2014_000000159981.jpg -../coco/images/val2014/COCO_val2014_000000160025.jpg -../coco/images/val2014/COCO_val2014_000000160185.jpg -../coco/images/val2014/COCO_val2014_000000160276.jpg -../coco/images/val2014/COCO_val2014_000000160345.jpg -../coco/images/val2014/COCO_val2014_000000160556.jpg -../coco/images/val2014/COCO_val2014_000000160580.jpg -../coco/images/val2014/COCO_val2014_000000160607.jpg -../coco/images/val2014/COCO_val2014_000000160772.jpg -../coco/images/val2014/COCO_val2014_000000160828.jpg -../coco/images/val2014/COCO_val2014_000000160886.jpg -../coco/images/val2014/COCO_val2014_000000160941.jpg -../coco/images/val2014/COCO_val2014_000000161044.jpg -../coco/images/val2014/COCO_val2014_000000161060.jpg -../coco/images/val2014/COCO_val2014_000000161185.jpg -../coco/images/val2014/COCO_val2014_000000161231.jpg -../coco/images/val2014/COCO_val2014_000000161308.jpg -../coco/images/val2014/COCO_val2014_000000161781.jpg -../coco/images/val2014/COCO_val2014_000000161799.jpg -../coco/images/val2014/COCO_val2014_000000161810.jpg -../coco/images/val2014/COCO_val2014_000000161820.jpg -../coco/images/val2014/COCO_val2014_000000161861.jpg -../coco/images/val2014/COCO_val2014_000000161875.jpg -../coco/images/val2014/COCO_val2014_000000161990.jpg -../coco/images/val2014/COCO_val2014_000000162280.jpg -../coco/images/val2014/COCO_val2014_000000162445.jpg -../coco/images/val2014/COCO_val2014_000000162459.jpg -../coco/images/val2014/COCO_val2014_000000162530.jpg -../coco/images/val2014/COCO_val2014_000000162561.jpg -../coco/images/val2014/COCO_val2014_000000162580.jpg -../coco/images/val2014/COCO_val2014_000000162855.jpg -../coco/images/val2014/COCO_val2014_000000163012.jpg -../coco/images/val2014/COCO_val2014_000000163020.jpg -../coco/images/val2014/COCO_val2014_000000163138.jpg -../coco/images/val2014/COCO_val2014_000000163219.jpg -../coco/images/val2014/COCO_val2014_000000163260.jpg -../coco/images/val2014/COCO_val2014_000000163290.jpg -../coco/images/val2014/COCO_val2014_000000163316.jpg -../coco/images/val2014/COCO_val2014_000000163543.jpg -../coco/images/val2014/COCO_val2014_000000163775.jpg -../coco/images/val2014/COCO_val2014_000000164121.jpg -../coco/images/val2014/COCO_val2014_000000164366.jpg -../coco/images/val2014/COCO_val2014_000000164420.jpg -../coco/images/val2014/COCO_val2014_000000164440.jpg -../coco/images/val2014/COCO_val2014_000000164568.jpg -../coco/images/val2014/COCO_val2014_000000164835.jpg -../coco/images/val2014/COCO_val2014_000000164983.jpg -../coco/images/val2014/COCO_val2014_000000165035.jpg -../coco/images/val2014/COCO_val2014_000000165056.jpg -../coco/images/val2014/COCO_val2014_000000165157.jpg -../coco/images/val2014/COCO_val2014_000000165172.jpg -../coco/images/val2014/COCO_val2014_000000165353.jpg -../coco/images/val2014/COCO_val2014_000000165522.jpg -../coco/images/val2014/COCO_val2014_000000165752.jpg -../coco/images/val2014/COCO_val2014_000000165937.jpg -../coco/images/val2014/COCO_val2014_000000166320.jpg -../coco/images/val2014/COCO_val2014_000000166557.jpg -../coco/images/val2014/COCO_val2014_000000166565.jpg -../coco/images/val2014/COCO_val2014_000000166642.jpg -../coco/images/val2014/COCO_val2014_000000166645.jpg -../coco/images/val2014/COCO_val2014_000000166896.jpg -../coco/images/val2014/COCO_val2014_000000167044.jpg -../coco/images/val2014/COCO_val2014_000000167128.jpg -../coco/images/val2014/COCO_val2014_000000167152.jpg -../coco/images/val2014/COCO_val2014_000000167452.jpg -../coco/images/val2014/COCO_val2014_000000167583.jpg -../coco/images/val2014/COCO_val2014_000000167598.jpg -../coco/images/val2014/COCO_val2014_000000168031.jpg -../coco/images/val2014/COCO_val2014_000000168129.jpg -../coco/images/val2014/COCO_val2014_000000168353.jpg -../coco/images/val2014/COCO_val2014_000000168367.jpg -../coco/images/val2014/COCO_val2014_000000168455.jpg -../coco/images/val2014/COCO_val2014_000000168832.jpg -../coco/images/val2014/COCO_val2014_000000168837.jpg -../coco/images/val2014/COCO_val2014_000000168909.jpg -../coco/images/val2014/COCO_val2014_000000169076.jpg -../coco/images/val2014/COCO_val2014_000000169226.jpg -../coco/images/val2014/COCO_val2014_000000169505.jpg -../coco/images/val2014/COCO_val2014_000000169700.jpg -../coco/images/val2014/COCO_val2014_000000169757.jpg -../coco/images/val2014/COCO_val2014_000000169800.jpg -../coco/images/val2014/COCO_val2014_000000170015.jpg -../coco/images/val2014/COCO_val2014_000000170072.jpg -../coco/images/val2014/COCO_val2014_000000170173.jpg -../coco/images/val2014/COCO_val2014_000000170190.jpg -../coco/images/val2014/COCO_val2014_000000170194.jpg -../coco/images/val2014/COCO_val2014_000000170208.jpg -../coco/images/val2014/COCO_val2014_000000170278.jpg -../coco/images/val2014/COCO_val2014_000000170346.jpg -../coco/images/val2014/COCO_val2014_000000170401.jpg -../coco/images/val2014/COCO_val2014_000000170411.jpg -../coco/images/val2014/COCO_val2014_000000170442.jpg -../coco/images/val2014/COCO_val2014_000000170739.jpg -../coco/images/val2014/COCO_val2014_000000170813.jpg -../coco/images/val2014/COCO_val2014_000000170914.jpg -../coco/images/val2014/COCO_val2014_000000170950.jpg -../coco/images/val2014/COCO_val2014_000000170955.jpg -../coco/images/val2014/COCO_val2014_000000171335.jpg -../coco/images/val2014/COCO_val2014_000000171483.jpg -../coco/images/val2014/COCO_val2014_000000171548.jpg -../coco/images/val2014/COCO_val2014_000000171733.jpg -../coco/images/val2014/COCO_val2014_000000171942.jpg -../coco/images/val2014/COCO_val2014_000000172087.jpg -../coco/images/val2014/COCO_val2014_000000172616.jpg -../coco/images/val2014/COCO_val2014_000000172710.jpg -../coco/images/val2014/COCO_val2014_000000172877.jpg -../coco/images/val2014/COCO_val2014_000000172935.jpg -../coco/images/val2014/COCO_val2014_000000172946.jpg -../coco/images/val2014/COCO_val2014_000000173081.jpg -../coco/images/val2014/COCO_val2014_000000173166.jpg -../coco/images/val2014/COCO_val2014_000000173401.jpg -../coco/images/val2014/COCO_val2014_000000173434.jpg -../coco/images/val2014/COCO_val2014_000000173533.jpg -../coco/images/val2014/COCO_val2014_000000173565.jpg -../coco/images/val2014/COCO_val2014_000000173693.jpg -../coco/images/val2014/COCO_val2014_000000173737.jpg -../coco/images/val2014/COCO_val2014_000000173832.jpg -../coco/images/val2014/COCO_val2014_000000173897.jpg -../coco/images/val2014/COCO_val2014_000000174018.jpg -../coco/images/val2014/COCO_val2014_000000174425.jpg -../coco/images/val2014/COCO_val2014_000000174679.jpg -../coco/images/val2014/COCO_val2014_000000174690.jpg -../coco/images/val2014/COCO_val2014_000000174904.jpg -../coco/images/val2014/COCO_val2014_000000175570.jpg -../coco/images/val2014/COCO_val2014_000000175612.jpg -../coco/images/val2014/COCO_val2014_000000175825.jpg -../coco/images/val2014/COCO_val2014_000000175908.jpg -../coco/images/val2014/COCO_val2014_000000175948.jpg -../coco/images/val2014/COCO_val2014_000000176288.jpg -../coco/images/val2014/COCO_val2014_000000176362.jpg -../coco/images/val2014/COCO_val2014_000000176606.jpg -../coco/images/val2014/COCO_val2014_000000176696.jpg -../coco/images/val2014/COCO_val2014_000000176701.jpg -../coco/images/val2014/COCO_val2014_000000176744.jpg -../coco/images/val2014/COCO_val2014_000000176828.jpg -../coco/images/val2014/COCO_val2014_000000176906.jpg -../coco/images/val2014/COCO_val2014_000000177069.jpg -../coco/images/val2014/COCO_val2014_000000177149.jpg -../coco/images/val2014/COCO_val2014_000000177166.jpg -../coco/images/val2014/COCO_val2014_000000177173.jpg -../coco/images/val2014/COCO_val2014_000000177375.jpg -../coco/images/val2014/COCO_val2014_000000177452.jpg -../coco/images/val2014/COCO_val2014_000000177575.jpg -../coco/images/val2014/COCO_val2014_000000177802.jpg -../coco/images/val2014/COCO_val2014_000000177838.jpg -../coco/images/val2014/COCO_val2014_000000177856.jpg -../coco/images/val2014/COCO_val2014_000000177953.jpg -../coco/images/val2014/COCO_val2014_000000178084.jpg -../coco/images/val2014/COCO_val2014_000000178671.jpg -../coco/images/val2014/COCO_val2014_000000178810.jpg -../coco/images/val2014/COCO_val2014_000000179069.jpg -../coco/images/val2014/COCO_val2014_000000179112.jpg -../coco/images/val2014/COCO_val2014_000000179200.jpg -../coco/images/val2014/COCO_val2014_000000179229.jpg -../coco/images/val2014/COCO_val2014_000000179273.jpg -../coco/images/val2014/COCO_val2014_000000179392.jpg -../coco/images/val2014/COCO_val2014_000000179430.jpg -../coco/images/val2014/COCO_val2014_000000179487.jpg -../coco/images/val2014/COCO_val2014_000000179500.jpg -../coco/images/val2014/COCO_val2014_000000179578.jpg -../coco/images/val2014/COCO_val2014_000000179611.jpg -../coco/images/val2014/COCO_val2014_000000179642.jpg -../coco/images/val2014/COCO_val2014_000000179765.jpg -../coco/images/val2014/COCO_val2014_000000179930.jpg -../coco/images/val2014/COCO_val2014_000000180011.jpg -../coco/images/val2014/COCO_val2014_000000180154.jpg -../coco/images/val2014/COCO_val2014_000000180289.jpg -../coco/images/val2014/COCO_val2014_000000180479.jpg -../coco/images/val2014/COCO_val2014_000000180541.jpg -../coco/images/val2014/COCO_val2014_000000180830.jpg -../coco/images/val2014/COCO_val2014_000000180917.jpg -../coco/images/val2014/COCO_val2014_000000181256.jpg -../coco/images/val2014/COCO_val2014_000000181296.jpg -../coco/images/val2014/COCO_val2014_000000181303.jpg -../coco/images/val2014/COCO_val2014_000000181359.jpg -../coco/images/val2014/COCO_val2014_000000181449.jpg -../coco/images/val2014/COCO_val2014_000000181485.jpg -../coco/images/val2014/COCO_val2014_000000181572.jpg -../coco/images/val2014/COCO_val2014_000000181586.jpg -../coco/images/val2014/COCO_val2014_000000181714.jpg -../coco/images/val2014/COCO_val2014_000000181745.jpg -../coco/images/val2014/COCO_val2014_000000181969.jpg -../coco/images/val2014/COCO_val2014_000000182021.jpg -../coco/images/val2014/COCO_val2014_000000182155.jpg -../coco/images/val2014/COCO_val2014_000000182240.jpg -../coco/images/val2014/COCO_val2014_000000182362.jpg -../coco/images/val2014/COCO_val2014_000000182369.jpg -../coco/images/val2014/COCO_val2014_000000182398.jpg -../coco/images/val2014/COCO_val2014_000000182483.jpg -../coco/images/val2014/COCO_val2014_000000182523.jpg -../coco/images/val2014/COCO_val2014_000000182681.jpg -../coco/images/val2014/COCO_val2014_000000182874.jpg -../coco/images/val2014/COCO_val2014_000000183187.jpg -../coco/images/val2014/COCO_val2014_000000183199.jpg -../coco/images/val2014/COCO_val2014_000000183217.jpg -../coco/images/val2014/COCO_val2014_000000183348.jpg -../coco/images/val2014/COCO_val2014_000000183359.jpg -../coco/images/val2014/COCO_val2014_000000183364.jpg -../coco/images/val2014/COCO_val2014_000000183469.jpg -../coco/images/val2014/COCO_val2014_000000183571.jpg -../coco/images/val2014/COCO_val2014_000000183701.jpg -../coco/images/val2014/COCO_val2014_000000183716.jpg -../coco/images/val2014/COCO_val2014_000000183843.jpg -../coco/images/val2014/COCO_val2014_000000184276.jpg -../coco/images/val2014/COCO_val2014_000000184359.jpg -../coco/images/val2014/COCO_val2014_000000184590.jpg -../coco/images/val2014/COCO_val2014_000000185095.jpg -../coco/images/val2014/COCO_val2014_000000185156.jpg -../coco/images/val2014/COCO_val2014_000000185303.jpg -../coco/images/val2014/COCO_val2014_000000185366.jpg -../coco/images/val2014/COCO_val2014_000000185397.jpg -../coco/images/val2014/COCO_val2014_000000185472.jpg -../coco/images/val2014/COCO_val2014_000000185559.jpg -../coco/images/val2014/COCO_val2014_000000185620.jpg -../coco/images/val2014/COCO_val2014_000000185621.jpg -../coco/images/val2014/COCO_val2014_000000185697.jpg -../coco/images/val2014/COCO_val2014_000000185721.jpg -../coco/images/val2014/COCO_val2014_000000185756.jpg -../coco/images/val2014/COCO_val2014_000000185802.jpg -../coco/images/val2014/COCO_val2014_000000185890.jpg -../coco/images/val2014/COCO_val2014_000000185916.jpg -../coco/images/val2014/COCO_val2014_000000185988.jpg -../coco/images/val2014/COCO_val2014_000000186079.jpg -../coco/images/val2014/COCO_val2014_000000186125.jpg -../coco/images/val2014/COCO_val2014_000000186413.jpg -../coco/images/val2014/COCO_val2014_000000186422.jpg -../coco/images/val2014/COCO_val2014_000000186637.jpg -../coco/images/val2014/COCO_val2014_000000186788.jpg -../coco/images/val2014/COCO_val2014_000000186873.jpg -../coco/images/val2014/COCO_val2014_000000186977.jpg -../coco/images/val2014/COCO_val2014_000000186991.jpg -../coco/images/val2014/COCO_val2014_000000187036.jpg -../coco/images/val2014/COCO_val2014_000000187054.jpg -../coco/images/val2014/COCO_val2014_000000187199.jpg -../coco/images/val2014/COCO_val2014_000000187236.jpg -../coco/images/val2014/COCO_val2014_000000187249.jpg -../coco/images/val2014/COCO_val2014_000000187349.jpg -../coco/images/val2014/COCO_val2014_000000187424.jpg -../coco/images/val2014/COCO_val2014_000000187513.jpg -../coco/images/val2014/COCO_val2014_000000187533.jpg -../coco/images/val2014/COCO_val2014_000000188084.jpg -../coco/images/val2014/COCO_val2014_000000188109.jpg -../coco/images/val2014/COCO_val2014_000000188132.jpg -../coco/images/val2014/COCO_val2014_000000188311.jpg -../coco/images/val2014/COCO_val2014_000000188346.jpg -../coco/images/val2014/COCO_val2014_000000188439.jpg -../coco/images/val2014/COCO_val2014_000000188460.jpg -../coco/images/val2014/COCO_val2014_000000188534.jpg -../coco/images/val2014/COCO_val2014_000000188592.jpg -../coco/images/val2014/COCO_val2014_000000188616.jpg -../coco/images/val2014/COCO_val2014_000000188667.jpg -../coco/images/val2014/COCO_val2014_000000188852.jpg -../coco/images/val2014/COCO_val2014_000000188918.jpg -../coco/images/val2014/COCO_val2014_000000188948.jpg -../coco/images/val2014/COCO_val2014_000000189067.jpg -../coco/images/val2014/COCO_val2014_000000189078.jpg -../coco/images/val2014/COCO_val2014_000000189203.jpg -../coco/images/val2014/COCO_val2014_000000189305.jpg -../coco/images/val2014/COCO_val2014_000000189365.jpg -../coco/images/val2014/COCO_val2014_000000189368.jpg -../coco/images/val2014/COCO_val2014_000000189371.jpg -../coco/images/val2014/COCO_val2014_000000189427.jpg -../coco/images/val2014/COCO_val2014_000000189436.jpg -../coco/images/val2014/COCO_val2014_000000189566.jpg -../coco/images/val2014/COCO_val2014_000000189634.jpg -../coco/images/val2014/COCO_val2014_000000189714.jpg -../coco/images/val2014/COCO_val2014_000000190204.jpg -../coco/images/val2014/COCO_val2014_000000190395.jpg -../coco/images/val2014/COCO_val2014_000000190432.jpg -../coco/images/val2014/COCO_val2014_000000190441.jpg -../coco/images/val2014/COCO_val2014_000000190546.jpg -../coco/images/val2014/COCO_val2014_000000190595.jpg -../coco/images/val2014/COCO_val2014_000000190700.jpg -../coco/images/val2014/COCO_val2014_000000190753.jpg -../coco/images/val2014/COCO_val2014_000000190767.jpg -../coco/images/val2014/COCO_val2014_000000190776.jpg -../coco/images/val2014/COCO_val2014_000000190841.jpg -../coco/images/val2014/COCO_val2014_000000190853.jpg -../coco/images/val2014/COCO_val2014_000000191013.jpg -../coco/images/val2014/COCO_val2014_000000191096.jpg -../coco/images/val2014/COCO_val2014_000000191117.jpg -../coco/images/val2014/COCO_val2014_000000191169.jpg -../coco/images/val2014/COCO_val2014_000000191296.jpg -../coco/images/val2014/COCO_val2014_000000191300.jpg -../coco/images/val2014/COCO_val2014_000000191390.jpg -../coco/images/val2014/COCO_val2014_000000191533.jpg -../coco/images/val2014/COCO_val2014_000000191761.jpg -../coco/images/val2014/COCO_val2014_000000191919.jpg -../coco/images/val2014/COCO_val2014_000000192007.jpg -../coco/images/val2014/COCO_val2014_000000192153.jpg -../coco/images/val2014/COCO_val2014_000000192154.jpg -../coco/images/val2014/COCO_val2014_000000192212.jpg -../coco/images/val2014/COCO_val2014_000000192440.jpg -../coco/images/val2014/COCO_val2014_000000192479.jpg -../coco/images/val2014/COCO_val2014_000000192607.jpg -../coco/images/val2014/COCO_val2014_000000192716.jpg -../coco/images/val2014/COCO_val2014_000000192730.jpg -../coco/images/val2014/COCO_val2014_000000192788.jpg -../coco/images/val2014/COCO_val2014_000000192817.jpg -../coco/images/val2014/COCO_val2014_000000192834.jpg -../coco/images/val2014/COCO_val2014_000000193015.jpg -../coco/images/val2014/COCO_val2014_000000193108.jpg -../coco/images/val2014/COCO_val2014_000000193245.jpg -../coco/images/val2014/COCO_val2014_000000193271.jpg -../coco/images/val2014/COCO_val2014_000000193332.jpg -../coco/images/val2014/COCO_val2014_000000193380.jpg -../coco/images/val2014/COCO_val2014_000000193405.jpg -../coco/images/val2014/COCO_val2014_000000193661.jpg -../coco/images/val2014/COCO_val2014_000000193798.jpg -../coco/images/val2014/COCO_val2014_000000193881.jpg -../coco/images/val2014/COCO_val2014_000000194158.jpg -../coco/images/val2014/COCO_val2014_000000194306.jpg -../coco/images/val2014/COCO_val2014_000000194704.jpg -../coco/images/val2014/COCO_val2014_000000194790.jpg -../coco/images/val2014/COCO_val2014_000000194875.jpg -../coco/images/val2014/COCO_val2014_000000195079.jpg -../coco/images/val2014/COCO_val2014_000000195267.jpg -../coco/images/val2014/COCO_val2014_000000195271.jpg -../coco/images/val2014/COCO_val2014_000000195281.jpg -../coco/images/val2014/COCO_val2014_000000195798.jpg -../coco/images/val2014/COCO_val2014_000000195851.jpg -../coco/images/val2014/COCO_val2014_000000195897.jpg -../coco/images/val2014/COCO_val2014_000000196085.jpg -../coco/images/val2014/COCO_val2014_000000196141.jpg -../coco/images/val2014/COCO_val2014_000000196295.jpg -../coco/images/val2014/COCO_val2014_000000196311.jpg -../coco/images/val2014/COCO_val2014_000000196313.jpg -../coco/images/val2014/COCO_val2014_000000196355.jpg -../coco/images/val2014/COCO_val2014_000000196415.jpg -../coco/images/val2014/COCO_val2014_000000196453.jpg -../coco/images/val2014/COCO_val2014_000000196681.jpg -../coco/images/val2014/COCO_val2014_000000196754.jpg -../coco/images/val2014/COCO_val2014_000000196798.jpg -../coco/images/val2014/COCO_val2014_000000196852.jpg -../coco/images/val2014/COCO_val2014_000000197022.jpg -../coco/images/val2014/COCO_val2014_000000197097.jpg -../coco/images/val2014/COCO_val2014_000000197191.jpg -../coco/images/val2014/COCO_val2014_000000197266.jpg -../coco/images/val2014/COCO_val2014_000000197278.jpg -../coco/images/val2014/COCO_val2014_000000197528.jpg -../coco/images/val2014/COCO_val2014_000000197609.jpg -../coco/images/val2014/COCO_val2014_000000197652.jpg -../coco/images/val2014/COCO_val2014_000000197683.jpg -../coco/images/val2014/COCO_val2014_000000197796.jpg -../coco/images/val2014/COCO_val2014_000000197918.jpg -../coco/images/val2014/COCO_val2014_000000198075.jpg -../coco/images/val2014/COCO_val2014_000000198139.jpg -../coco/images/val2014/COCO_val2014_000000198223.jpg -../coco/images/val2014/COCO_val2014_000000198367.jpg -../coco/images/val2014/COCO_val2014_000000198464.jpg -../coco/images/val2014/COCO_val2014_000000198495.jpg -../coco/images/val2014/COCO_val2014_000000198641.jpg -../coco/images/val2014/COCO_val2014_000000198645.jpg -../coco/images/val2014/COCO_val2014_000000198752.jpg -../coco/images/val2014/COCO_val2014_000000198805.jpg -../coco/images/val2014/COCO_val2014_000000198811.jpg -../coco/images/val2014/COCO_val2014_000000199125.jpg -../coco/images/val2014/COCO_val2014_000000199203.jpg -../coco/images/val2014/COCO_val2014_000000199358.jpg -../coco/images/val2014/COCO_val2014_000000199389.jpg -../coco/images/val2014/COCO_val2014_000000199437.jpg -../coco/images/val2014/COCO_val2014_000000199449.jpg -../coco/images/val2014/COCO_val2014_000000199481.jpg -../coco/images/val2014/COCO_val2014_000000199575.jpg -../coco/images/val2014/COCO_val2014_000000199602.jpg -../coco/images/val2014/COCO_val2014_000000199771.jpg -../coco/images/val2014/COCO_val2014_000000199951.jpg -../coco/images/val2014/COCO_val2014_000000200109.jpg -../coco/images/val2014/COCO_val2014_000000200252.jpg -../coco/images/val2014/COCO_val2014_000000200267.jpg -../coco/images/val2014/COCO_val2014_000000200296.jpg -../coco/images/val2014/COCO_val2014_000000200457.jpg -../coco/images/val2014/COCO_val2014_000000200572.jpg -../coco/images/val2014/COCO_val2014_000000200638.jpg -../coco/images/val2014/COCO_val2014_000000200667.jpg -../coco/images/val2014/COCO_val2014_000000200703.jpg -../coco/images/val2014/COCO_val2014_000000200720.jpg -../coco/images/val2014/COCO_val2014_000000200725.jpg -../coco/images/val2014/COCO_val2014_000000200739.jpg -../coco/images/val2014/COCO_val2014_000000201111.jpg -../coco/images/val2014/COCO_val2014_000000201220.jpg -../coco/images/val2014/COCO_val2014_000000201348.jpg -../coco/images/val2014/COCO_val2014_000000201452.jpg -../coco/images/val2014/COCO_val2014_000000201646.jpg -../coco/images/val2014/COCO_val2014_000000201676.jpg -../coco/images/val2014/COCO_val2014_000000201918.jpg -../coco/images/val2014/COCO_val2014_000000201934.jpg -../coco/images/val2014/COCO_val2014_000000201970.jpg -../coco/images/val2014/COCO_val2014_000000202138.jpg -../coco/images/val2014/COCO_val2014_000000202339.jpg -../coco/images/val2014/COCO_val2014_000000202503.jpg -../coco/images/val2014/COCO_val2014_000000202658.jpg -../coco/images/val2014/COCO_val2014_000000202797.jpg -../coco/images/val2014/COCO_val2014_000000202799.jpg -../coco/images/val2014/COCO_val2014_000000202944.jpg -../coco/images/val2014/COCO_val2014_000000203061.jpg -../coco/images/val2014/COCO_val2014_000000203095.jpg -../coco/images/val2014/COCO_val2014_000000203299.jpg -../coco/images/val2014/COCO_val2014_000000203382.jpg -../coco/images/val2014/COCO_val2014_000000203416.jpg -../coco/images/val2014/COCO_val2014_000000203460.jpg -../coco/images/val2014/COCO_val2014_000000203483.jpg -../coco/images/val2014/COCO_val2014_000000203661.jpg -../coco/images/val2014/COCO_val2014_000000203845.jpg -../coco/images/val2014/COCO_val2014_000000203846.jpg -../coco/images/val2014/COCO_val2014_000000204036.jpg -../coco/images/val2014/COCO_val2014_000000204098.jpg -../coco/images/val2014/COCO_val2014_000000204232.jpg -../coco/images/val2014/COCO_val2014_000000204256.jpg -../coco/images/val2014/COCO_val2014_000000204360.jpg -../coco/images/val2014/COCO_val2014_000000204448.jpg -../coco/images/val2014/COCO_val2014_000000204502.jpg -../coco/images/val2014/COCO_val2014_000000204935.jpg -../coco/images/val2014/COCO_val2014_000000205222.jpg -../coco/images/val2014/COCO_val2014_000000205251.jpg -../coco/images/val2014/COCO_val2014_000000205258.jpg -../coco/images/val2014/COCO_val2014_000000205289.jpg -../coco/images/val2014/COCO_val2014_000000205300.jpg -../coco/images/val2014/COCO_val2014_000000205409.jpg -../coco/images/val2014/COCO_val2014_000000205594.jpg -../coco/images/val2014/COCO_val2014_000000205605.jpg -../coco/images/val2014/COCO_val2014_000000205676.jpg -../coco/images/val2014/COCO_val2014_000000205776.jpg -../coco/images/val2014/COCO_val2014_000000205782.jpg -../coco/images/val2014/COCO_val2014_000000205911.jpg -../coco/images/val2014/COCO_val2014_000000206025.jpg -../coco/images/val2014/COCO_val2014_000000206027.jpg -../coco/images/val2014/COCO_val2014_000000206135.jpg -../coco/images/val2014/COCO_val2014_000000206271.jpg -../coco/images/val2014/COCO_val2014_000000206411.jpg -../coco/images/val2014/COCO_val2014_000000206770.jpg -../coco/images/val2014/COCO_val2014_000000206958.jpg -../coco/images/val2014/COCO_val2014_000000207041.jpg -../coco/images/val2014/COCO_val2014_000000207059.jpg -../coco/images/val2014/COCO_val2014_000000207060.jpg -../coco/images/val2014/COCO_val2014_000000207180.jpg -../coco/images/val2014/COCO_val2014_000000207205.jpg -../coco/images/val2014/COCO_val2014_000000207323.jpg -../coco/images/val2014/COCO_val2014_000000207507.jpg -../coco/images/val2014/COCO_val2014_000000207509.jpg -../coco/images/val2014/COCO_val2014_000000207585.jpg -../coco/images/val2014/COCO_val2014_000000207634.jpg -../coco/images/val2014/COCO_val2014_000000207670.jpg -../coco/images/val2014/COCO_val2014_000000207898.jpg -../coco/images/val2014/COCO_val2014_000000207925.jpg -../coco/images/val2014/COCO_val2014_000000208012.jpg -../coco/images/val2014/COCO_val2014_000000208283.jpg -../coco/images/val2014/COCO_val2014_000000208311.jpg -../coco/images/val2014/COCO_val2014_000000208376.jpg -../coco/images/val2014/COCO_val2014_000000208417.jpg -../coco/images/val2014/COCO_val2014_000000208524.jpg -../coco/images/val2014/COCO_val2014_000000208663.jpg -../coco/images/val2014/COCO_val2014_000000208793.jpg -../coco/images/val2014/COCO_val2014_000000209007.jpg -../coco/images/val2014/COCO_val2014_000000209015.jpg -../coco/images/val2014/COCO_val2014_000000209142.jpg -../coco/images/val2014/COCO_val2014_000000209162.jpg -../coco/images/val2014/COCO_val2014_000000209286.jpg -../coco/images/val2014/COCO_val2014_000000209441.jpg -../coco/images/val2014/COCO_val2014_000000209530.jpg -../coco/images/val2014/COCO_val2014_000000209733.jpg -../coco/images/val2014/COCO_val2014_000000209773.jpg -../coco/images/val2014/COCO_val2014_000000209808.jpg -../coco/images/val2014/COCO_val2014_000000209864.jpg -../coco/images/val2014/COCO_val2014_000000210299.jpg -../coco/images/val2014/COCO_val2014_000000210374.jpg -../coco/images/val2014/COCO_val2014_000000210408.jpg -../coco/images/val2014/COCO_val2014_000000210439.jpg -../coco/images/val2014/COCO_val2014_000000210457.jpg -../coco/images/val2014/COCO_val2014_000000210458.jpg -../coco/images/val2014/COCO_val2014_000000210520.jpg -../coco/images/val2014/COCO_val2014_000000210671.jpg -../coco/images/val2014/COCO_val2014_000000210749.jpg -../coco/images/val2014/COCO_val2014_000000210855.jpg -../coco/images/val2014/COCO_val2014_000000210883.jpg -../coco/images/val2014/COCO_val2014_000000211063.jpg -../coco/images/val2014/COCO_val2014_000000211163.jpg -../coco/images/val2014/COCO_val2014_000000211186.jpg -../coco/images/val2014/COCO_val2014_000000211192.jpg -../coco/images/val2014/COCO_val2014_000000211215.jpg -../coco/images/val2014/COCO_val2014_000000211498.jpg -../coco/images/val2014/COCO_val2014_000000211775.jpg -../coco/images/val2014/COCO_val2014_000000212054.jpg -../coco/images/val2014/COCO_val2014_000000212072.jpg -../coco/images/val2014/COCO_val2014_000000212077.jpg -../coco/images/val2014/COCO_val2014_000000212080.jpg -../coco/images/val2014/COCO_val2014_000000212166.jpg -../coco/images/val2014/COCO_val2014_000000212346.jpg -../coco/images/val2014/COCO_val2014_000000212470.jpg -../coco/images/val2014/COCO_val2014_000000212559.jpg -../coco/images/val2014/COCO_val2014_000000212647.jpg -../coco/images/val2014/COCO_val2014_000000212688.jpg -../coco/images/val2014/COCO_val2014_000000212739.jpg -../coco/images/val2014/COCO_val2014_000000212817.jpg -../coco/images/val2014/COCO_val2014_000000213033.jpg -../coco/images/val2014/COCO_val2014_000000213224.jpg -../coco/images/val2014/COCO_val2014_000000213359.jpg -../coco/images/val2014/COCO_val2014_000000213361.jpg -../coco/images/val2014/COCO_val2014_000000213434.jpg -../coco/images/val2014/COCO_val2014_000000213758.jpg -../coco/images/val2014/COCO_val2014_000000213830.jpg -../coco/images/val2014/COCO_val2014_000000213843.jpg -../coco/images/val2014/COCO_val2014_000000213961.jpg -../coco/images/val2014/COCO_val2014_000000214274.jpg -../coco/images/val2014/COCO_val2014_000000214306.jpg -../coco/images/val2014/COCO_val2014_000000214853.jpg -../coco/images/val2014/COCO_val2014_000000214961.jpg -../coco/images/val2014/COCO_val2014_000000215062.jpg -../coco/images/val2014/COCO_val2014_000000215255.jpg -../coco/images/val2014/COCO_val2014_000000215259.jpg -../coco/images/val2014/COCO_val2014_000000215394.jpg -../coco/images/val2014/COCO_val2014_000000215408.jpg -../coco/images/val2014/COCO_val2014_000000215471.jpg -../coco/images/val2014/COCO_val2014_000000215554.jpg -../coco/images/val2014/COCO_val2014_000000215565.jpg -../coco/images/val2014/COCO_val2014_000000215579.jpg -../coco/images/val2014/COCO_val2014_000000215708.jpg -../coco/images/val2014/COCO_val2014_000000215812.jpg -../coco/images/val2014/COCO_val2014_000000215826.jpg -../coco/images/val2014/COCO_val2014_000000216096.jpg -../coco/images/val2014/COCO_val2014_000000216198.jpg -../coco/images/val2014/COCO_val2014_000000216235.jpg -../coco/images/val2014/COCO_val2014_000000216581.jpg -../coco/images/val2014/COCO_val2014_000000216710.jpg -../coco/images/val2014/COCO_val2014_000000216837.jpg -../coco/images/val2014/COCO_val2014_000000216841.jpg -../coco/images/val2014/COCO_val2014_000000217016.jpg -../coco/images/val2014/COCO_val2014_000000217269.jpg -../coco/images/val2014/COCO_val2014_000000217285.jpg -../coco/images/val2014/COCO_val2014_000000217303.jpg -../coco/images/val2014/COCO_val2014_000000217562.jpg -../coco/images/val2014/COCO_val2014_000000217951.jpg -../coco/images/val2014/COCO_val2014_000000218220.jpg -../coco/images/val2014/COCO_val2014_000000218310.jpg -../coco/images/val2014/COCO_val2014_000000218404.jpg -../coco/images/val2014/COCO_val2014_000000218439.jpg -../coco/images/val2014/COCO_val2014_000000218678.jpg -../coco/images/val2014/COCO_val2014_000000218687.jpg -../coco/images/val2014/COCO_val2014_000000218926.jpg -../coco/images/val2014/COCO_val2014_000000218947.jpg -../coco/images/val2014/COCO_val2014_000000219075.jpg -../coco/images/val2014/COCO_val2014_000000219170.jpg -../coco/images/val2014/COCO_val2014_000000219393.jpg -../coco/images/val2014/COCO_val2014_000000219514.jpg -../coco/images/val2014/COCO_val2014_000000219578.jpg -../coco/images/val2014/COCO_val2014_000000219657.jpg -../coco/images/val2014/COCO_val2014_000000220041.jpg -../coco/images/val2014/COCO_val2014_000000220182.jpg -../coco/images/val2014/COCO_val2014_000000220215.jpg -../coco/images/val2014/COCO_val2014_000000220307.jpg -../coco/images/val2014/COCO_val2014_000000220511.jpg -../coco/images/val2014/COCO_val2014_000000220808.jpg -../coco/images/val2014/COCO_val2014_000000221000.jpg -../coco/images/val2014/COCO_val2014_000000221094.jpg -../coco/images/val2014/COCO_val2014_000000221155.jpg -../coco/images/val2014/COCO_val2014_000000221303.jpg -../coco/images/val2014/COCO_val2014_000000221561.jpg -../coco/images/val2014/COCO_val2014_000000221605.jpg -../coco/images/val2014/COCO_val2014_000000221620.jpg -../coco/images/val2014/COCO_val2014_000000221669.jpg -../coco/images/val2014/COCO_val2014_000000221708.jpg -../coco/images/val2014/COCO_val2014_000000221882.jpg -../coco/images/val2014/COCO_val2014_000000222043.jpg -../coco/images/val2014/COCO_val2014_000000222317.jpg -../coco/images/val2014/COCO_val2014_000000222407.jpg -../coco/images/val2014/COCO_val2014_000000222494.jpg -../coco/images/val2014/COCO_val2014_000000222863.jpg -../coco/images/val2014/COCO_val2014_000000222903.jpg -../coco/images/val2014/COCO_val2014_000000223032.jpg -../coco/images/val2014/COCO_val2014_000000223276.jpg -../coco/images/val2014/COCO_val2014_000000223289.jpg -../coco/images/val2014/COCO_val2014_000000223314.jpg -../coco/images/val2014/COCO_val2014_000000223414.jpg -../coco/images/val2014/COCO_val2014_000000223747.jpg -../coco/images/val2014/COCO_val2014_000000223777.jpg -../coco/images/val2014/COCO_val2014_000000223930.jpg -../coco/images/val2014/COCO_val2014_000000224093.jpg -../coco/images/val2014/COCO_val2014_000000224111.jpg -../coco/images/val2014/COCO_val2014_000000224222.jpg -../coco/images/val2014/COCO_val2014_000000224238.jpg -../coco/images/val2014/COCO_val2014_000000224523.jpg -../coco/images/val2014/COCO_val2014_000000224693.jpg -../coco/images/val2014/COCO_val2014_000000224724.jpg -../coco/images/val2014/COCO_val2014_000000224742.jpg -../coco/images/val2014/COCO_val2014_000000224848.jpg -../coco/images/val2014/COCO_val2014_000000225175.jpg -../coco/images/val2014/COCO_val2014_000000225312.jpg -../coco/images/val2014/COCO_val2014_000000225518.jpg -../coco/images/val2014/COCO_val2014_000000225537.jpg -../coco/images/val2014/COCO_val2014_000000225603.jpg -../coco/images/val2014/COCO_val2014_000000225867.jpg -../coco/images/val2014/COCO_val2014_000000225916.jpg -../coco/images/val2014/COCO_val2014_000000226154.jpg -../coco/images/val2014/COCO_val2014_000000226220.jpg -../coco/images/val2014/COCO_val2014_000000226408.jpg -../coco/images/val2014/COCO_val2014_000000226417.jpg -../coco/images/val2014/COCO_val2014_000000226419.jpg -../coco/images/val2014/COCO_val2014_000000226496.jpg -../coco/images/val2014/COCO_val2014_000000226498.jpg -../coco/images/val2014/COCO_val2014_000000226571.jpg -../coco/images/val2014/COCO_val2014_000000226579.jpg -../coco/images/val2014/COCO_val2014_000000226588.jpg -../coco/images/val2014/COCO_val2014_000000226662.jpg -../coco/images/val2014/COCO_val2014_000000226744.jpg -../coco/images/val2014/COCO_val2014_000000226848.jpg -../coco/images/val2014/COCO_val2014_000000226917.jpg -../coco/images/val2014/COCO_val2014_000000226967.jpg -../coco/images/val2014/COCO_val2014_000000227032.jpg -../coco/images/val2014/COCO_val2014_000000227048.jpg -../coco/images/val2014/COCO_val2014_000000227125.jpg -../coco/images/val2014/COCO_val2014_000000227220.jpg -../coco/images/val2014/COCO_val2014_000000227227.jpg -../coco/images/val2014/COCO_val2014_000000227413.jpg -../coco/images/val2014/COCO_val2014_000000227468.jpg -../coco/images/val2014/COCO_val2014_000000227511.jpg -../coco/images/val2014/COCO_val2014_000000227656.jpg -../coco/images/val2014/COCO_val2014_000000227709.jpg -../coco/images/val2014/COCO_val2014_000000227741.jpg -../coco/images/val2014/COCO_val2014_000000228011.jpg -../coco/images/val2014/COCO_val2014_000000228013.jpg -../coco/images/val2014/COCO_val2014_000000228197.jpg -../coco/images/val2014/COCO_val2014_000000228558.jpg -../coco/images/val2014/COCO_val2014_000000228746.jpg -../coco/images/val2014/COCO_val2014_000000228771.jpg -../coco/images/val2014/COCO_val2014_000000229000.jpg -../coco/images/val2014/COCO_val2014_000000229221.jpg -../coco/images/val2014/COCO_val2014_000000229234.jpg -../coco/images/val2014/COCO_val2014_000000229286.jpg -../coco/images/val2014/COCO_val2014_000000229383.jpg -../coco/images/val2014/COCO_val2014_000000229387.jpg -../coco/images/val2014/COCO_val2014_000000229553.jpg -../coco/images/val2014/COCO_val2014_000000229631.jpg -../coco/images/val2014/COCO_val2014_000000229713.jpg -../coco/images/val2014/COCO_val2014_000000230040.jpg -../coco/images/val2014/COCO_val2014_000000230265.jpg -../coco/images/val2014/COCO_val2014_000000230432.jpg -../coco/images/val2014/COCO_val2014_000000230450.jpg -../coco/images/val2014/COCO_val2014_000000230454.jpg -../coco/images/val2014/COCO_val2014_000000230615.jpg -../coco/images/val2014/COCO_val2014_000000230619.jpg -../coco/images/val2014/COCO_val2014_000000230679.jpg -../coco/images/val2014/COCO_val2014_000000230701.jpg -../coco/images/val2014/COCO_val2014_000000230739.jpg -../coco/images/val2014/COCO_val2014_000000230780.jpg -../coco/images/val2014/COCO_val2014_000000230964.jpg -../coco/images/val2014/COCO_val2014_000000231364.jpg -../coco/images/val2014/COCO_val2014_000000231450.jpg -../coco/images/val2014/COCO_val2014_000000231508.jpg -../coco/images/val2014/COCO_val2014_000000231991.jpg -../coco/images/val2014/COCO_val2014_000000232073.jpg -../coco/images/val2014/COCO_val2014_000000232088.jpg -../coco/images/val2014/COCO_val2014_000000232121.jpg -../coco/images/val2014/COCO_val2014_000000232287.jpg -../coco/images/val2014/COCO_val2014_000000232453.jpg -../coco/images/val2014/COCO_val2014_000000232597.jpg -../coco/images/val2014/COCO_val2014_000000232610.jpg -../coco/images/val2014/COCO_val2014_000000232865.jpg -../coco/images/val2014/COCO_val2014_000000233042.jpg -../coco/images/val2014/COCO_val2014_000000233090.jpg -../coco/images/val2014/COCO_val2014_000000233305.jpg -../coco/images/val2014/COCO_val2014_000000233315.jpg -../coco/images/val2014/COCO_val2014_000000233327.jpg -../coco/images/val2014/COCO_val2014_000000233376.jpg -../coco/images/val2014/COCO_val2014_000000233446.jpg -../coco/images/val2014/COCO_val2014_000000233556.jpg -../coco/images/val2014/COCO_val2014_000000233567.jpg -../coco/images/val2014/COCO_val2014_000000233727.jpg -../coco/images/val2014/COCO_val2014_000000233919.jpg -../coco/images/val2014/COCO_val2014_000000233950.jpg -../coco/images/val2014/COCO_val2014_000000233961.jpg -../coco/images/val2014/COCO_val2014_000000233968.jpg -../coco/images/val2014/COCO_val2014_000000234182.jpg -../coco/images/val2014/COCO_val2014_000000234251.jpg -../coco/images/val2014/COCO_val2014_000000234370.jpg -../coco/images/val2014/COCO_val2014_000000234463.jpg -../coco/images/val2014/COCO_val2014_000000234766.jpg -../coco/images/val2014/COCO_val2014_000000234779.jpg -../coco/images/val2014/COCO_val2014_000000234928.jpg -../coco/images/val2014/COCO_val2014_000000235124.jpg -../coco/images/val2014/COCO_val2014_000000235239.jpg -../coco/images/val2014/COCO_val2014_000000235380.jpg -../coco/images/val2014/COCO_val2014_000000235575.jpg -../coco/images/val2014/COCO_val2014_000000235788.jpg -../coco/images/val2014/COCO_val2014_000000235790.jpg -../coco/images/val2014/COCO_val2014_000000235791.jpg -../coco/images/val2014/COCO_val2014_000000235839.jpg -../coco/images/val2014/COCO_val2014_000000235933.jpg -../coco/images/val2014/COCO_val2014_000000236010.jpg -../coco/images/val2014/COCO_val2014_000000236068.jpg -../coco/images/val2014/COCO_val2014_000000236323.jpg -../coco/images/val2014/COCO_val2014_000000236535.jpg -../coco/images/val2014/COCO_val2014_000000236714.jpg -../coco/images/val2014/COCO_val2014_000000236766.jpg -../coco/images/val2014/COCO_val2014_000000236874.jpg -../coco/images/val2014/COCO_val2014_000000236945.jpg -../coco/images/val2014/COCO_val2014_000000236951.jpg -../coco/images/val2014/COCO_val2014_000000236985.jpg -../coco/images/val2014/COCO_val2014_000000237230.jpg -../coco/images/val2014/COCO_val2014_000000237277.jpg -../coco/images/val2014/COCO_val2014_000000237316.jpg -../coco/images/val2014/COCO_val2014_000000237357.jpg -../coco/images/val2014/COCO_val2014_000000237476.jpg -../coco/images/val2014/COCO_val2014_000000237723.jpg -../coco/images/val2014/COCO_val2014_000000237777.jpg -../coco/images/val2014/COCO_val2014_000000237920.jpg -../coco/images/val2014/COCO_val2014_000000237984.jpg -../coco/images/val2014/COCO_val2014_000000238389.jpg -../coco/images/val2014/COCO_val2014_000000238573.jpg -../coco/images/val2014/COCO_val2014_000000238598.jpg -../coco/images/val2014/COCO_val2014_000000238700.jpg -../coco/images/val2014/COCO_val2014_000000238806.jpg -../coco/images/val2014/COCO_val2014_000000239145.jpg -../coco/images/val2014/COCO_val2014_000000239148.jpg -../coco/images/val2014/COCO_val2014_000000239318.jpg -../coco/images/val2014/COCO_val2014_000000239656.jpg -../coco/images/val2014/COCO_val2014_000000240102.jpg -../coco/images/val2014/COCO_val2014_000000240393.jpg -../coco/images/val2014/COCO_val2014_000000240403.jpg -../coco/images/val2014/COCO_val2014_000000240739.jpg -../coco/images/val2014/COCO_val2014_000000240754.jpg -../coco/images/val2014/COCO_val2014_000000240903.jpg -../coco/images/val2014/COCO_val2014_000000240918.jpg -../coco/images/val2014/COCO_val2014_000000240960.jpg -../coco/images/val2014/COCO_val2014_000000241113.jpg -../coco/images/val2014/COCO_val2014_000000241187.jpg -../coco/images/val2014/COCO_val2014_000000241291.jpg -../coco/images/val2014/COCO_val2014_000000241319.jpg -../coco/images/val2014/COCO_val2014_000000241396.jpg -../coco/images/val2014/COCO_val2014_000000241517.jpg -../coco/images/val2014/COCO_val2014_000000241638.jpg -../coco/images/val2014/COCO_val2014_000000241677.jpg -../coco/images/val2014/COCO_val2014_000000241728.jpg -../coco/images/val2014/COCO_val2014_000000241868.jpg -../coco/images/val2014/COCO_val2014_000000241889.jpg -../coco/images/val2014/COCO_val2014_000000241948.jpg -../coco/images/val2014/COCO_val2014_000000242073.jpg -../coco/images/val2014/COCO_val2014_000000242100.jpg -../coco/images/val2014/COCO_val2014_000000242189.jpg -../coco/images/val2014/COCO_val2014_000000242246.jpg -../coco/images/val2014/COCO_val2014_000000242422.jpg -../coco/images/val2014/COCO_val2014_000000242423.jpg -../coco/images/val2014/COCO_val2014_000000242523.jpg -../coco/images/val2014/COCO_val2014_000000242911.jpg -../coco/images/val2014/COCO_val2014_000000242934.jpg -../coco/images/val2014/COCO_val2014_000000242945.jpg -../coco/images/val2014/COCO_val2014_000000242972.jpg -../coco/images/val2014/COCO_val2014_000000243134.jpg -../coco/images/val2014/COCO_val2014_000000243190.jpg -../coco/images/val2014/COCO_val2014_000000243213.jpg -../coco/images/val2014/COCO_val2014_000000243331.jpg -../coco/images/val2014/COCO_val2014_000000243442.jpg -../coco/images/val2014/COCO_val2014_000000243569.jpg -../coco/images/val2014/COCO_val2014_000000243699.jpg -../coco/images/val2014/COCO_val2014_000000243775.jpg -../coco/images/val2014/COCO_val2014_000000243825.jpg -../coco/images/val2014/COCO_val2014_000000243857.jpg -../coco/images/val2014/COCO_val2014_000000244005.jpg -../coco/images/val2014/COCO_val2014_000000244050.jpg -../coco/images/val2014/COCO_val2014_000000244167.jpg -../coco/images/val2014/COCO_val2014_000000244246.jpg -../coco/images/val2014/COCO_val2014_000000244344.jpg -../coco/images/val2014/COCO_val2014_000000244571.jpg -../coco/images/val2014/COCO_val2014_000000244665.jpg -../coco/images/val2014/COCO_val2014_000000245102.jpg -../coco/images/val2014/COCO_val2014_000000245173.jpg -../coco/images/val2014/COCO_val2014_000000245242.jpg -../coco/images/val2014/COCO_val2014_000000245426.jpg -../coco/images/val2014/COCO_val2014_000000245852.jpg -../coco/images/val2014/COCO_val2014_000000246014.jpg -../coco/images/val2014/COCO_val2014_000000246233.jpg -../coco/images/val2014/COCO_val2014_000000246308.jpg -../coco/images/val2014/COCO_val2014_000000246425.jpg -../coco/images/val2014/COCO_val2014_000000246522.jpg -../coco/images/val2014/COCO_val2014_000000246649.jpg -../coco/images/val2014/COCO_val2014_000000246672.jpg -../coco/images/val2014/COCO_val2014_000000246686.jpg -../coco/images/val2014/COCO_val2014_000000247057.jpg -../coco/images/val2014/COCO_val2014_000000247123.jpg -../coco/images/val2014/COCO_val2014_000000247234.jpg -../coco/images/val2014/COCO_val2014_000000247306.jpg -../coco/images/val2014/COCO_val2014_000000247407.jpg -../coco/images/val2014/COCO_val2014_000000247788.jpg -../coco/images/val2014/COCO_val2014_000000247839.jpg -../coco/images/val2014/COCO_val2014_000000248069.jpg -../coco/images/val2014/COCO_val2014_000000248089.jpg -../coco/images/val2014/COCO_val2014_000000248112.jpg -../coco/images/val2014/COCO_val2014_000000248224.jpg -../coco/images/val2014/COCO_val2014_000000248231.jpg -../coco/images/val2014/COCO_val2014_000000248235.jpg -../coco/images/val2014/COCO_val2014_000000248276.jpg -../coco/images/val2014/COCO_val2014_000000248314.jpg -../coco/images/val2014/COCO_val2014_000000248631.jpg -../coco/images/val2014/COCO_val2014_000000249219.jpg -../coco/images/val2014/COCO_val2014_000000249295.jpg -../coco/images/val2014/COCO_val2014_000000249599.jpg -../coco/images/val2014/COCO_val2014_000000250205.jpg -../coco/images/val2014/COCO_val2014_000000250282.jpg -../coco/images/val2014/COCO_val2014_000000250301.jpg -../coco/images/val2014/COCO_val2014_000000250313.jpg -../coco/images/val2014/COCO_val2014_000000250370.jpg -../coco/images/val2014/COCO_val2014_000000250427.jpg -../coco/images/val2014/COCO_val2014_000000250629.jpg -../coco/images/val2014/COCO_val2014_000000250745.jpg -../coco/images/val2014/COCO_val2014_000000250766.jpg -../coco/images/val2014/COCO_val2014_000000250794.jpg -../coco/images/val2014/COCO_val2014_000000250917.jpg -../coco/images/val2014/COCO_val2014_000000250924.jpg -../coco/images/val2014/COCO_val2014_000000250939.jpg -../coco/images/val2014/COCO_val2014_000000251019.jpg -../coco/images/val2014/COCO_val2014_000000251044.jpg -../coco/images/val2014/COCO_val2014_000000251195.jpg -../coco/images/val2014/COCO_val2014_000000251330.jpg -../coco/images/val2014/COCO_val2014_000000251367.jpg -../coco/images/val2014/COCO_val2014_000000251857.jpg -../coco/images/val2014/COCO_val2014_000000251888.jpg -../coco/images/val2014/COCO_val2014_000000251920.jpg -../coco/images/val2014/COCO_val2014_000000252008.jpg -../coco/images/val2014/COCO_val2014_000000252101.jpg -../coco/images/val2014/COCO_val2014_000000252292.jpg -../coco/images/val2014/COCO_val2014_000000252388.jpg -../coco/images/val2014/COCO_val2014_000000252403.jpg -../coco/images/val2014/COCO_val2014_000000252444.jpg -../coco/images/val2014/COCO_val2014_000000252549.jpg -../coco/images/val2014/COCO_val2014_000000252625.jpg -../coco/images/val2014/COCO_val2014_000000252748.jpg -../coco/images/val2014/COCO_val2014_000000252857.jpg -../coco/images/val2014/COCO_val2014_000000252911.jpg -../coco/images/val2014/COCO_val2014_000000253036.jpg -../coco/images/val2014/COCO_val2014_000000253452.jpg -../coco/images/val2014/COCO_val2014_000000253630.jpg -../coco/images/val2014/COCO_val2014_000000253688.jpg -../coco/images/val2014/COCO_val2014_000000253742.jpg -../coco/images/val2014/COCO_val2014_000000253843.jpg -../coco/images/val2014/COCO_val2014_000000254164.jpg -../coco/images/val2014/COCO_val2014_000000254167.jpg -../coco/images/val2014/COCO_val2014_000000254454.jpg -../coco/images/val2014/COCO_val2014_000000254568.jpg -../coco/images/val2014/COCO_val2014_000000254589.jpg -../coco/images/val2014/COCO_val2014_000000254653.jpg -../coco/images/val2014/COCO_val2014_000000254711.jpg -../coco/images/val2014/COCO_val2014_000000254864.jpg -../coco/images/val2014/COCO_val2014_000000254931.jpg -../coco/images/val2014/COCO_val2014_000000254986.jpg -../coco/images/val2014/COCO_val2014_000000255244.jpg -../coco/images/val2014/COCO_val2014_000000255315.jpg -../coco/images/val2014/COCO_val2014_000000255529.jpg -../coco/images/val2014/COCO_val2014_000000255578.jpg -../coco/images/val2014/COCO_val2014_000000255649.jpg -../coco/images/val2014/COCO_val2014_000000255928.jpg -../coco/images/val2014/COCO_val2014_000000256003.jpg -../coco/images/val2014/COCO_val2014_000000256095.jpg -../coco/images/val2014/COCO_val2014_000000256145.jpg -../coco/images/val2014/COCO_val2014_000000256407.jpg -../coco/images/val2014/COCO_val2014_000000256470.jpg -../coco/images/val2014/COCO_val2014_000000256529.jpg -../coco/images/val2014/COCO_val2014_000000256547.jpg -../coco/images/val2014/COCO_val2014_000000256566.jpg -../coco/images/val2014/COCO_val2014_000000256590.jpg -../coco/images/val2014/COCO_val2014_000000256668.jpg -../coco/images/val2014/COCO_val2014_000000256771.jpg -../coco/images/val2014/COCO_val2014_000000256838.jpg -../coco/images/val2014/COCO_val2014_000000256859.jpg -../coco/images/val2014/COCO_val2014_000000256945.jpg -../coco/images/val2014/COCO_val2014_000000257046.jpg -../coco/images/val2014/COCO_val2014_000000257137.jpg -../coco/images/val2014/COCO_val2014_000000257336.jpg -../coco/images/val2014/COCO_val2014_000000257471.jpg -../coco/images/val2014/COCO_val2014_000000257660.jpg -../coco/images/val2014/COCO_val2014_000000257870.jpg -../coco/images/val2014/COCO_val2014_000000257941.jpg -../coco/images/val2014/COCO_val2014_000000258023.jpg -../coco/images/val2014/COCO_val2014_000000258209.jpg -../coco/images/val2014/COCO_val2014_000000258509.jpg -../coco/images/val2014/COCO_val2014_000000258588.jpg -../coco/images/val2014/COCO_val2014_000000258628.jpg -../coco/images/val2014/COCO_val2014_000000259099.jpg -../coco/images/val2014/COCO_val2014_000000259112.jpg -../coco/images/val2014/COCO_val2014_000000259335.jpg -../coco/images/val2014/COCO_val2014_000000259342.jpg -../coco/images/val2014/COCO_val2014_000000259408.jpg -../coco/images/val2014/COCO_val2014_000000259665.jpg -../coco/images/val2014/COCO_val2014_000000259952.jpg -../coco/images/val2014/COCO_val2014_000000260166.jpg -../coco/images/val2014/COCO_val2014_000000260307.jpg -../coco/images/val2014/COCO_val2014_000000260370.jpg -../coco/images/val2014/COCO_val2014_000000260470.jpg -../coco/images/val2014/COCO_val2014_000000260595.jpg -../coco/images/val2014/COCO_val2014_000000260686.jpg -../coco/images/val2014/COCO_val2014_000000260818.jpg -../coco/images/val2014/COCO_val2014_000000260922.jpg -../coco/images/val2014/COCO_val2014_000000261182.jpg -../coco/images/val2014/COCO_val2014_000000261273.jpg -../coco/images/val2014/COCO_val2014_000000261346.jpg -../coco/images/val2014/COCO_val2014_000000261787.jpg -../coco/images/val2014/COCO_val2014_000000262162.jpg -../coco/images/val2014/COCO_val2014_000000262200.jpg -../coco/images/val2014/COCO_val2014_000000262228.jpg -../coco/images/val2014/COCO_val2014_000000262235.jpg -../coco/images/val2014/COCO_val2014_000000262325.jpg -../coco/images/val2014/COCO_val2014_000000262347.jpg -../coco/images/val2014/COCO_val2014_000000262509.jpg -../coco/images/val2014/COCO_val2014_000000262651.jpg -../coco/images/val2014/COCO_val2014_000000262677.jpg -../coco/images/val2014/COCO_val2014_000000262810.jpg -../coco/images/val2014/COCO_val2014_000000262895.jpg -../coco/images/val2014/COCO_val2014_000000262900.jpg -../coco/images/val2014/COCO_val2014_000000262987.jpg -../coco/images/val2014/COCO_val2014_000000263425.jpg -../coco/images/val2014/COCO_val2014_000000263505.jpg -../coco/images/val2014/COCO_val2014_000000264013.jpg -../coco/images/val2014/COCO_val2014_000000264540.jpg -../coco/images/val2014/COCO_val2014_000000264683.jpg -../coco/images/val2014/COCO_val2014_000000264737.jpg -../coco/images/val2014/COCO_val2014_000000264819.jpg -../coco/images/val2014/COCO_val2014_000000265063.jpg -../coco/images/val2014/COCO_val2014_000000265374.jpg -../coco/images/val2014/COCO_val2014_000000265574.jpg -../coco/images/val2014/COCO_val2014_000000265579.jpg -../coco/images/val2014/COCO_val2014_000000265611.jpg -../coco/images/val2014/COCO_val2014_000000265851.jpg -../coco/images/val2014/COCO_val2014_000000265916.jpg -../coco/images/val2014/COCO_val2014_000000266115.jpg -../coco/images/val2014/COCO_val2014_000000266160.jpg -../coco/images/val2014/COCO_val2014_000000266176.jpg -../coco/images/val2014/COCO_val2014_000000266491.jpg -../coco/images/val2014/COCO_val2014_000000267076.jpg -../coco/images/val2014/COCO_val2014_000000267112.jpg -../coco/images/val2014/COCO_val2014_000000267115.jpg -../coco/images/val2014/COCO_val2014_000000267127.jpg -../coco/images/val2014/COCO_val2014_000000267224.jpg -../coco/images/val2014/COCO_val2014_000000267321.jpg -../coco/images/val2014/COCO_val2014_000000267521.jpg -../coco/images/val2014/COCO_val2014_000000267537.jpg -../coco/images/val2014/COCO_val2014_000000267844.jpg -../coco/images/val2014/COCO_val2014_000000267875.jpg -../coco/images/val2014/COCO_val2014_000000267972.jpg -../coco/images/val2014/COCO_val2014_000000267998.jpg -../coco/images/val2014/COCO_val2014_000000268224.jpg -../coco/images/val2014/COCO_val2014_000000268322.jpg -../coco/images/val2014/COCO_val2014_000000268378.jpg -../coco/images/val2014/COCO_val2014_000000268400.jpg -../coco/images/val2014/COCO_val2014_000000268435.jpg -../coco/images/val2014/COCO_val2014_000000268469.jpg -../coco/images/val2014/COCO_val2014_000000268539.jpg -../coco/images/val2014/COCO_val2014_000000268541.jpg -../coco/images/val2014/COCO_val2014_000000268710.jpg -../coco/images/val2014/COCO_val2014_000000268882.jpg -../coco/images/val2014/COCO_val2014_000000268885.jpg -../coco/images/val2014/COCO_val2014_000000268941.jpg -../coco/images/val2014/COCO_val2014_000000268987.jpg -../coco/images/val2014/COCO_val2014_000000269280.jpg -../coco/images/val2014/COCO_val2014_000000269311.jpg -../coco/images/val2014/COCO_val2014_000000269866.jpg -../coco/images/val2014/COCO_val2014_000000269867.jpg -../coco/images/val2014/COCO_val2014_000000269975.jpg -../coco/images/val2014/COCO_val2014_000000270001.jpg -../coco/images/val2014/COCO_val2014_000000270244.jpg -../coco/images/val2014/COCO_val2014_000000270474.jpg -../coco/images/val2014/COCO_val2014_000000270515.jpg -../coco/images/val2014/COCO_val2014_000000270544.jpg -../coco/images/val2014/COCO_val2014_000000270593.jpg -../coco/images/val2014/COCO_val2014_000000270702.jpg -../coco/images/val2014/COCO_val2014_000000270918.jpg -../coco/images/val2014/COCO_val2014_000000271017.jpg -../coco/images/val2014/COCO_val2014_000000271117.jpg -../coco/images/val2014/COCO_val2014_000000271240.jpg -../coco/images/val2014/COCO_val2014_000000271359.jpg -../coco/images/val2014/COCO_val2014_000000271546.jpg -../coco/images/val2014/COCO_val2014_000000271681.jpg -../coco/images/val2014/COCO_val2014_000000271785.jpg -../coco/images/val2014/COCO_val2014_000000271820.jpg -../coco/images/val2014/COCO_val2014_000000271900.jpg -../coco/images/val2014/COCO_val2014_000000272008.jpg -../coco/images/val2014/COCO_val2014_000000272015.jpg -../coco/images/val2014/COCO_val2014_000000272117.jpg -../coco/images/val2014/COCO_val2014_000000272129.jpg -../coco/images/val2014/COCO_val2014_000000272188.jpg -../coco/images/val2014/COCO_val2014_000000272212.jpg -../coco/images/val2014/COCO_val2014_000000272615.jpg -../coco/images/val2014/COCO_val2014_000000272635.jpg -../coco/images/val2014/COCO_val2014_000000272718.jpg -../coco/images/val2014/COCO_val2014_000000272728.jpg -../coco/images/val2014/COCO_val2014_000000272880.jpg -../coco/images/val2014/COCO_val2014_000000272889.jpg -../coco/images/val2014/COCO_val2014_000000273118.jpg -../coco/images/val2014/COCO_val2014_000000273188.jpg -../coco/images/val2014/COCO_val2014_000000273246.jpg -../coco/images/val2014/COCO_val2014_000000273323.jpg -../coco/images/val2014/COCO_val2014_000000273442.jpg -../coco/images/val2014/COCO_val2014_000000273450.jpg -../coco/images/val2014/COCO_val2014_000000273493.jpg -../coco/images/val2014/COCO_val2014_000000273494.jpg -../coco/images/val2014/COCO_val2014_000000273579.jpg -../coco/images/val2014/COCO_val2014_000000273617.jpg -../coco/images/val2014/COCO_val2014_000000273688.jpg -../coco/images/val2014/COCO_val2014_000000273712.jpg -../coco/images/val2014/COCO_val2014_000000273728.jpg -../coco/images/val2014/COCO_val2014_000000273855.jpg -../coco/images/val2014/COCO_val2014_000000274066.jpg -../coco/images/val2014/COCO_val2014_000000274083.jpg -../coco/images/val2014/COCO_val2014_000000274292.jpg -../coco/images/val2014/COCO_val2014_000000274470.jpg -../coco/images/val2014/COCO_val2014_000000274629.jpg -../coco/images/val2014/COCO_val2014_000000274957.jpg -../coco/images/val2014/COCO_val2014_000000275270.jpg -../coco/images/val2014/COCO_val2014_000000275496.jpg -../coco/images/val2014/COCO_val2014_000000275843.jpg -../coco/images/val2014/COCO_val2014_000000275863.jpg -../coco/images/val2014/COCO_val2014_000000276149.jpg -../coco/images/val2014/COCO_val2014_000000276215.jpg -../coco/images/val2014/COCO_val2014_000000276239.jpg -../coco/images/val2014/COCO_val2014_000000276720.jpg -../coco/images/val2014/COCO_val2014_000000276804.jpg -../coco/images/val2014/COCO_val2014_000000276840.jpg -../coco/images/val2014/COCO_val2014_000000276863.jpg -../coco/images/val2014/COCO_val2014_000000277025.jpg -../coco/images/val2014/COCO_val2014_000000277046.jpg -../coco/images/val2014/COCO_val2014_000000277051.jpg -../coco/images/val2014/COCO_val2014_000000277162.jpg -../coco/images/val2014/COCO_val2014_000000277172.jpg -../coco/images/val2014/COCO_val2014_000000277227.jpg -../coco/images/val2014/COCO_val2014_000000277518.jpg -../coco/images/val2014/COCO_val2014_000000277542.jpg -../coco/images/val2014/COCO_val2014_000000277614.jpg -../coco/images/val2014/COCO_val2014_000000277622.jpg -../coco/images/val2014/COCO_val2014_000000277694.jpg -../coco/images/val2014/COCO_val2014_000000277984.jpg -../coco/images/val2014/COCO_val2014_000000278321.jpg -../coco/images/val2014/COCO_val2014_000000278435.jpg -../coco/images/val2014/COCO_val2014_000000278582.jpg -../coco/images/val2014/COCO_val2014_000000278760.jpg -../coco/images/val2014/COCO_val2014_000000278822.jpg -../coco/images/val2014/COCO_val2014_000000278843.jpg -../coco/images/val2014/COCO_val2014_000000278848.jpg -../coco/images/val2014/COCO_val2014_000000278967.jpg -../coco/images/val2014/COCO_val2014_000000278977.jpg -../coco/images/val2014/COCO_val2014_000000279024.jpg -../coco/images/val2014/COCO_val2014_000000279027.jpg -../coco/images/val2014/COCO_val2014_000000279154.jpg -../coco/images/val2014/COCO_val2014_000000279259.jpg -../coco/images/val2014/COCO_val2014_000000279521.jpg -../coco/images/val2014/COCO_val2014_000000279730.jpg -../coco/images/val2014/COCO_val2014_000000279784.jpg -../coco/images/val2014/COCO_val2014_000000279850.jpg -../coco/images/val2014/COCO_val2014_000000280007.jpg -../coco/images/val2014/COCO_val2014_000000280017.jpg -../coco/images/val2014/COCO_val2014_000000280036.jpg -../coco/images/val2014/COCO_val2014_000000280293.jpg -../coco/images/val2014/COCO_val2014_000000280530.jpg -../coco/images/val2014/COCO_val2014_000000280736.jpg -../coco/images/val2014/COCO_val2014_000000280766.jpg -../coco/images/val2014/COCO_val2014_000000281019.jpg -../coco/images/val2014/COCO_val2014_000000281163.jpg -../coco/images/val2014/COCO_val2014_000000281377.jpg -../coco/images/val2014/COCO_val2014_000000281500.jpg -../coco/images/val2014/COCO_val2014_000000281508.jpg -../coco/images/val2014/COCO_val2014_000000281601.jpg -../coco/images/val2014/COCO_val2014_000000281609.jpg -../coco/images/val2014/COCO_val2014_000000281676.jpg -../coco/images/val2014/COCO_val2014_000000281722.jpg -../coco/images/val2014/COCO_val2014_000000281733.jpg -../coco/images/val2014/COCO_val2014_000000282143.jpg -../coco/images/val2014/COCO_val2014_000000282229.jpg -../coco/images/val2014/COCO_val2014_000000282231.jpg -../coco/images/val2014/COCO_val2014_000000282698.jpg -../coco/images/val2014/COCO_val2014_000000282790.jpg -../coco/images/val2014/COCO_val2014_000000283012.jpg -../coco/images/val2014/COCO_val2014_000000283097.jpg -../coco/images/val2014/COCO_val2014_000000283101.jpg -../coco/images/val2014/COCO_val2014_000000283113.jpg -../coco/images/val2014/COCO_val2014_000000283254.jpg -../coco/images/val2014/COCO_val2014_000000283261.jpg -../coco/images/val2014/COCO_val2014_000000283380.jpg -../coco/images/val2014/COCO_val2014_000000283438.jpg -../coco/images/val2014/COCO_val2014_000000283441.jpg -../coco/images/val2014/COCO_val2014_000000283495.jpg -../coco/images/val2014/COCO_val2014_000000283642.jpg -../coco/images/val2014/COCO_val2014_000000283653.jpg -../coco/images/val2014/COCO_val2014_000000283659.jpg -../coco/images/val2014/COCO_val2014_000000283890.jpg -../coco/images/val2014/COCO_val2014_000000283940.jpg -../coco/images/val2014/COCO_val2014_000000283977.jpg -../coco/images/val2014/COCO_val2014_000000284160.jpg -../coco/images/val2014/COCO_val2014_000000284253.jpg -../coco/images/val2014/COCO_val2014_000000284426.jpg -../coco/images/val2014/COCO_val2014_000000284698.jpg -../coco/images/val2014/COCO_val2014_000000284749.jpg -../coco/images/val2014/COCO_val2014_000000284789.jpg -../coco/images/val2014/COCO_val2014_000000285106.jpg -../coco/images/val2014/COCO_val2014_000000285160.jpg -../coco/images/val2014/COCO_val2014_000000285302.jpg -../coco/images/val2014/COCO_val2014_000000285433.jpg -../coco/images/val2014/COCO_val2014_000000285799.jpg -../coco/images/val2014/COCO_val2014_000000285929.jpg -../coco/images/val2014/COCO_val2014_000000285961.jpg -../coco/images/val2014/COCO_val2014_000000286119.jpg -../coco/images/val2014/COCO_val2014_000000286146.jpg -../coco/images/val2014/COCO_val2014_000000286285.jpg -../coco/images/val2014/COCO_val2014_000000286458.jpg -../coco/images/val2014/COCO_val2014_000000286503.jpg -../coco/images/val2014/COCO_val2014_000000286654.jpg -../coco/images/val2014/COCO_val2014_000000286708.jpg -../coco/images/val2014/COCO_val2014_000000286719.jpg -../coco/images/val2014/COCO_val2014_000000286813.jpg -../coco/images/val2014/COCO_val2014_000000286907.jpg -../coco/images/val2014/COCO_val2014_000000286994.jpg -../coco/images/val2014/COCO_val2014_000000287035.jpg -../coco/images/val2014/COCO_val2014_000000287396.jpg -../coco/images/val2014/COCO_val2014_000000287484.jpg -../coco/images/val2014/COCO_val2014_000000287506.jpg -../coco/images/val2014/COCO_val2014_000000287550.jpg -../coco/images/val2014/COCO_val2014_000000287570.jpg -../coco/images/val2014/COCO_val2014_000000288114.jpg -../coco/images/val2014/COCO_val2014_000000288229.jpg -../coco/images/val2014/COCO_val2014_000000288313.jpg -../coco/images/val2014/COCO_val2014_000000288799.jpg -../coco/images/val2014/COCO_val2014_000000288933.jpg -../coco/images/val2014/COCO_val2014_000000289128.jpg -../coco/images/val2014/COCO_val2014_000000289172.jpg -../coco/images/val2014/COCO_val2014_000000289194.jpg -../coco/images/val2014/COCO_val2014_000000289201.jpg -../coco/images/val2014/COCO_val2014_000000289337.jpg -../coco/images/val2014/COCO_val2014_000000289474.jpg -../coco/images/val2014/COCO_val2014_000000289497.jpg -../coco/images/val2014/COCO_val2014_000000289633.jpg -../coco/images/val2014/COCO_val2014_000000289716.jpg -../coco/images/val2014/COCO_val2014_000000289949.jpg -../coco/images/val2014/COCO_val2014_000000289960.jpg -../coco/images/val2014/COCO_val2014_000000289995.jpg -../coco/images/val2014/COCO_val2014_000000290165.jpg -../coco/images/val2014/COCO_val2014_000000290170.jpg -../coco/images/val2014/COCO_val2014_000000290196.jpg -../coco/images/val2014/COCO_val2014_000000290231.jpg -../coco/images/val2014/COCO_val2014_000000290477.jpg -../coco/images/val2014/COCO_val2014_000000290515.jpg -../coco/images/val2014/COCO_val2014_000000290602.jpg -../coco/images/val2014/COCO_val2014_000000290659.jpg -../coco/images/val2014/COCO_val2014_000000291380.jpg -../coco/images/val2014/COCO_val2014_000000291404.jpg -../coco/images/val2014/COCO_val2014_000000291588.jpg -../coco/images/val2014/COCO_val2014_000000291589.jpg -../coco/images/val2014/COCO_val2014_000000291742.jpg -../coco/images/val2014/COCO_val2014_000000291784.jpg -../coco/images/val2014/COCO_val2014_000000291866.jpg -../coco/images/val2014/COCO_val2014_000000291930.jpg -../coco/images/val2014/COCO_val2014_000000292032.jpg -../coco/images/val2014/COCO_val2014_000000292206.jpg -../coco/images/val2014/COCO_val2014_000000292330.jpg -../coco/images/val2014/COCO_val2014_000000292363.jpg -../coco/images/val2014/COCO_val2014_000000292446.jpg -../coco/images/val2014/COCO_val2014_000000292456.jpg -../coco/images/val2014/COCO_val2014_000000292493.jpg -../coco/images/val2014/COCO_val2014_000000292649.jpg -../coco/images/val2014/COCO_val2014_000000292822.jpg -../coco/images/val2014/COCO_val2014_000000292916.jpg -../coco/images/val2014/COCO_val2014_000000292931.jpg -../coco/images/val2014/COCO_val2014_000000292945.jpg -../coco/images/val2014/COCO_val2014_000000292990.jpg -../coco/images/val2014/COCO_val2014_000000292995.jpg -../coco/images/val2014/COCO_val2014_000000293002.jpg -../coco/images/val2014/COCO_val2014_000000293071.jpg -../coco/images/val2014/COCO_val2014_000000293133.jpg -../coco/images/val2014/COCO_val2014_000000293296.jpg -../coco/images/val2014/COCO_val2014_000000293333.jpg -../coco/images/val2014/COCO_val2014_000000293452.jpg -../coco/images/val2014/COCO_val2014_000000293574.jpg -../coco/images/val2014/COCO_val2014_000000293785.jpg -../coco/images/val2014/COCO_val2014_000000293895.jpg -../coco/images/val2014/COCO_val2014_000000294035.jpg -../coco/images/val2014/COCO_val2014_000000294119.jpg -../coco/images/val2014/COCO_val2014_000000294209.jpg -../coco/images/val2014/COCO_val2014_000000294284.jpg -../coco/images/val2014/COCO_val2014_000000294593.jpg -../coco/images/val2014/COCO_val2014_000000294958.jpg -../coco/images/val2014/COCO_val2014_000000295016.jpg -../coco/images/val2014/COCO_val2014_000000295059.jpg -../coco/images/val2014/COCO_val2014_000000295124.jpg -../coco/images/val2014/COCO_val2014_000000295269.jpg -../coco/images/val2014/COCO_val2014_000000295574.jpg -../coco/images/val2014/COCO_val2014_000000295683.jpg -../coco/images/val2014/COCO_val2014_000000295728.jpg -../coco/images/val2014/COCO_val2014_000000295769.jpg -../coco/images/val2014/COCO_val2014_000000295837.jpg -../coco/images/val2014/COCO_val2014_000000296014.jpg -../coco/images/val2014/COCO_val2014_000000296032.jpg -../coco/images/val2014/COCO_val2014_000000296136.jpg -../coco/images/val2014/COCO_val2014_000000296255.jpg -../coco/images/val2014/COCO_val2014_000000296492.jpg -../coco/images/val2014/COCO_val2014_000000296564.jpg -../coco/images/val2014/COCO_val2014_000000296745.jpg -../coco/images/val2014/COCO_val2014_000000296825.jpg -../coco/images/val2014/COCO_val2014_000000296897.jpg -../coco/images/val2014/COCO_val2014_000000296988.jpg -../coco/images/val2014/COCO_val2014_000000297037.jpg -../coco/images/val2014/COCO_val2014_000000297074.jpg -../coco/images/val2014/COCO_val2014_000000297269.jpg -../coco/images/val2014/COCO_val2014_000000297444.jpg -../coco/images/val2014/COCO_val2014_000000297520.jpg -../coco/images/val2014/COCO_val2014_000000297578.jpg -../coco/images/val2014/COCO_val2014_000000297736.jpg -../coco/images/val2014/COCO_val2014_000000297830.jpg -../coco/images/val2014/COCO_val2014_000000297956.jpg -../coco/images/val2014/COCO_val2014_000000297970.jpg -../coco/images/val2014/COCO_val2014_000000297976.jpg -../coco/images/val2014/COCO_val2014_000000298067.jpg -../coco/images/val2014/COCO_val2014_000000298252.jpg -../coco/images/val2014/COCO_val2014_000000298461.jpg -../coco/images/val2014/COCO_val2014_000000298493.jpg -../coco/images/val2014/COCO_val2014_000000298691.jpg -../coco/images/val2014/COCO_val2014_000000298732.jpg -../coco/images/val2014/COCO_val2014_000000298736.jpg -../coco/images/val2014/COCO_val2014_000000298809.jpg -../coco/images/val2014/COCO_val2014_000000299044.jpg -../coco/images/val2014/COCO_val2014_000000299074.jpg -../coco/images/val2014/COCO_val2014_000000299409.jpg -../coco/images/val2014/COCO_val2014_000000299492.jpg -../coco/images/val2014/COCO_val2014_000000299553.jpg -../coco/images/val2014/COCO_val2014_000000300008.jpg -../coco/images/val2014/COCO_val2014_000000300055.jpg -../coco/images/val2014/COCO_val2014_000000300090.jpg -../coco/images/val2014/COCO_val2014_000000300124.jpg -../coco/images/val2014/COCO_val2014_000000300155.jpg -../coco/images/val2014/COCO_val2014_000000300330.jpg -../coco/images/val2014/COCO_val2014_000000300403.jpg -../coco/images/val2014/COCO_val2014_000000300472.jpg -../coco/images/val2014/COCO_val2014_000000300701.jpg -../coco/images/val2014/COCO_val2014_000000300705.jpg -../coco/images/val2014/COCO_val2014_000000300791.jpg -../coco/images/val2014/COCO_val2014_000000300814.jpg -../coco/images/val2014/COCO_val2014_000000301135.jpg -../coco/images/val2014/COCO_val2014_000000301221.jpg -../coco/images/val2014/COCO_val2014_000000301266.jpg -../coco/images/val2014/COCO_val2014_000000301397.jpg -../coco/images/val2014/COCO_val2014_000000301746.jpg -../coco/images/val2014/COCO_val2014_000000301756.jpg -../coco/images/val2014/COCO_val2014_000000301765.jpg -../coco/images/val2014/COCO_val2014_000000301837.jpg -../coco/images/val2014/COCO_val2014_000000301956.jpg -../coco/images/val2014/COCO_val2014_000000301971.jpg -../coco/images/val2014/COCO_val2014_000000301981.jpg -../coco/images/val2014/COCO_val2014_000000302094.jpg -../coco/images/val2014/COCO_val2014_000000302110.jpg -../coco/images/val2014/COCO_val2014_000000302137.jpg -../coco/images/val2014/COCO_val2014_000000302185.jpg -../coco/images/val2014/COCO_val2014_000000302193.jpg -../coco/images/val2014/COCO_val2014_000000302243.jpg -../coco/images/val2014/COCO_val2014_000000302298.jpg -../coco/images/val2014/COCO_val2014_000000302302.jpg -../coco/images/val2014/COCO_val2014_000000302318.jpg -../coco/images/val2014/COCO_val2014_000000302405.jpg -../coco/images/val2014/COCO_val2014_000000302452.jpg -../coco/images/val2014/COCO_val2014_000000302572.jpg -../coco/images/val2014/COCO_val2014_000000302710.jpg -../coco/images/val2014/COCO_val2014_000000302997.jpg -../coco/images/val2014/COCO_val2014_000000303006.jpg -../coco/images/val2014/COCO_val2014_000000303253.jpg -../coco/images/val2014/COCO_val2014_000000303305.jpg -../coco/images/val2014/COCO_val2014_000000303314.jpg -../coco/images/val2014/COCO_val2014_000000303549.jpg -../coco/images/val2014/COCO_val2014_000000303550.jpg -../coco/images/val2014/COCO_val2014_000000303556.jpg -../coco/images/val2014/COCO_val2014_000000303590.jpg -../coco/images/val2014/COCO_val2014_000000303937.jpg -../coco/images/val2014/COCO_val2014_000000304159.jpg -../coco/images/val2014/COCO_val2014_000000304186.jpg -../coco/images/val2014/COCO_val2014_000000304220.jpg -../coco/images/val2014/COCO_val2014_000000304252.jpg -../coco/images/val2014/COCO_val2014_000000304347.jpg -../coco/images/val2014/COCO_val2014_000000304390.jpg -../coco/images/val2014/COCO_val2014_000000304409.jpg -../coco/images/val2014/COCO_val2014_000000304812.jpg -../coco/images/val2014/COCO_val2014_000000304815.jpg -../coco/images/val2014/COCO_val2014_000000304827.jpg -../coco/images/val2014/COCO_val2014_000000305000.jpg -../coco/images/val2014/COCO_val2014_000000305343.jpg -../coco/images/val2014/COCO_val2014_000000305368.jpg -../coco/images/val2014/COCO_val2014_000000305480.jpg -../coco/images/val2014/COCO_val2014_000000305526.jpg -../coco/images/val2014/COCO_val2014_000000305803.jpg -../coco/images/val2014/COCO_val2014_000000305962.jpg -../coco/images/val2014/COCO_val2014_000000305978.jpg -../coco/images/val2014/COCO_val2014_000000306281.jpg -../coco/images/val2014/COCO_val2014_000000306395.jpg -../coco/images/val2014/COCO_val2014_000000306426.jpg -../coco/images/val2014/COCO_val2014_000000306585.jpg -../coco/images/val2014/COCO_val2014_000000306603.jpg -../coco/images/val2014/COCO_val2014_000000306855.jpg -../coco/images/val2014/COCO_val2014_000000306914.jpg -../coco/images/val2014/COCO_val2014_000000306952.jpg -../coco/images/val2014/COCO_val2014_000000306972.jpg -../coco/images/val2014/COCO_val2014_000000307206.jpg -../coco/images/val2014/COCO_val2014_000000307209.jpg -../coco/images/val2014/COCO_val2014_000000307438.jpg -../coco/images/val2014/COCO_val2014_000000307523.jpg -../coco/images/val2014/COCO_val2014_000000307531.jpg -../coco/images/val2014/COCO_val2014_000000307564.jpg -../coco/images/val2014/COCO_val2014_000000307873.jpg -../coco/images/val2014/COCO_val2014_000000307993.jpg -../coco/images/val2014/COCO_val2014_000000308156.jpg -../coco/images/val2014/COCO_val2014_000000308339.jpg -../coco/images/val2014/COCO_val2014_000000308441.jpg -../coco/images/val2014/COCO_val2014_000000308512.jpg -../coco/images/val2014/COCO_val2014_000000308543.jpg -../coco/images/val2014/COCO_val2014_000000308587.jpg -../coco/images/val2014/COCO_val2014_000000308759.jpg -../coco/images/val2014/COCO_val2014_000000308785.jpg -../coco/images/val2014/COCO_val2014_000000308900.jpg -../coco/images/val2014/COCO_val2014_000000308907.jpg -../coco/images/val2014/COCO_val2014_000000309044.jpg -../coco/images/val2014/COCO_val2014_000000309302.jpg -../coco/images/val2014/COCO_val2014_000000309452.jpg -../coco/images/val2014/COCO_val2014_000000309495.jpg -../coco/images/val2014/COCO_val2014_000000309530.jpg -../coco/images/val2014/COCO_val2014_000000309655.jpg -../coco/images/val2014/COCO_val2014_000000309692.jpg -../coco/images/val2014/COCO_val2014_000000309696.jpg -../coco/images/val2014/COCO_val2014_000000309775.jpg -../coco/images/val2014/COCO_val2014_000000309993.jpg -../coco/images/val2014/COCO_val2014_000000310008.jpg -../coco/images/val2014/COCO_val2014_000000310094.jpg -../coco/images/val2014/COCO_val2014_000000310196.jpg -../coco/images/val2014/COCO_val2014_000000310202.jpg -../coco/images/val2014/COCO_val2014_000000310524.jpg -../coco/images/val2014/COCO_val2014_000000310545.jpg -../coco/images/val2014/COCO_val2014_000000310622.jpg -../coco/images/val2014/COCO_val2014_000000310705.jpg -../coco/images/val2014/COCO_val2014_000000310858.jpg -../coco/images/val2014/COCO_val2014_000000311015.jpg -../coco/images/val2014/COCO_val2014_000000311081.jpg -../coco/images/val2014/COCO_val2014_000000311295.jpg -../coco/images/val2014/COCO_val2014_000000311303.jpg -../coco/images/val2014/COCO_val2014_000000311465.jpg -../coco/images/val2014/COCO_val2014_000000311904.jpg -../coco/images/val2014/COCO_val2014_000000311961.jpg -../coco/images/val2014/COCO_val2014_000000312081.jpg -../coco/images/val2014/COCO_val2014_000000312144.jpg -../coco/images/val2014/COCO_val2014_000000312192.jpg -../coco/images/val2014/COCO_val2014_000000312278.jpg -../coco/images/val2014/COCO_val2014_000000312289.jpg -../coco/images/val2014/COCO_val2014_000000312416.jpg -../coco/images/val2014/COCO_val2014_000000312544.jpg -../coco/images/val2014/COCO_val2014_000000312559.jpg -../coco/images/val2014/COCO_val2014_000000312890.jpg -../coco/images/val2014/COCO_val2014_000000313034.jpg -../coco/images/val2014/COCO_val2014_000000313057.jpg -../coco/images/val2014/COCO_val2014_000000313162.jpg -../coco/images/val2014/COCO_val2014_000000313321.jpg -../coco/images/val2014/COCO_val2014_000000313557.jpg -../coco/images/val2014/COCO_val2014_000000313588.jpg -../coco/images/val2014/COCO_val2014_000000313593.jpg -../coco/images/val2014/COCO_val2014_000000313916.jpg -../coco/images/val2014/COCO_val2014_000000313922.jpg -../coco/images/val2014/COCO_val2014_000000314023.jpg -../coco/images/val2014/COCO_val2014_000000314027.jpg -../coco/images/val2014/COCO_val2014_000000314147.jpg -../coco/images/val2014/COCO_val2014_000000314440.jpg -../coco/images/val2014/COCO_val2014_000000314616.jpg -../coco/images/val2014/COCO_val2014_000000314812.jpg -../coco/images/val2014/COCO_val2014_000000314992.jpg -../coco/images/val2014/COCO_val2014_000000315219.jpg -../coco/images/val2014/COCO_val2014_000000315249.jpg -../coco/images/val2014/COCO_val2014_000000315281.jpg -../coco/images/val2014/COCO_val2014_000000315564.jpg -../coco/images/val2014/COCO_val2014_000000315601.jpg -../coco/images/val2014/COCO_val2014_000000315621.jpg -../coco/images/val2014/COCO_val2014_000000315744.jpg -../coco/images/val2014/COCO_val2014_000000315792.jpg -../coco/images/val2014/COCO_val2014_000000315824.jpg -../coco/images/val2014/COCO_val2014_000000315962.jpg -../coco/images/val2014/COCO_val2014_000000316000.jpg -../coco/images/val2014/COCO_val2014_000000316015.jpg -../coco/images/val2014/COCO_val2014_000000316138.jpg -../coco/images/val2014/COCO_val2014_000000316147.jpg -../coco/images/val2014/COCO_val2014_000000316254.jpg -../coco/images/val2014/COCO_val2014_000000316359.jpg -../coco/images/val2014/COCO_val2014_000000316400.jpg -../coco/images/val2014/COCO_val2014_000000316438.jpg -../coco/images/val2014/COCO_val2014_000000316505.jpg -../coco/images/val2014/COCO_val2014_000000316617.jpg -../coco/images/val2014/COCO_val2014_000000316704.jpg -../coco/images/val2014/COCO_val2014_000000316879.jpg -../coco/images/val2014/COCO_val2014_000000317033.jpg -../coco/images/val2014/COCO_val2014_000000317320.jpg -../coco/images/val2014/COCO_val2014_000000317325.jpg -../coco/images/val2014/COCO_val2014_000000317424.jpg -../coco/images/val2014/COCO_val2014_000000317560.jpg -../coco/images/val2014/COCO_val2014_000000317622.jpg -../coco/images/val2014/COCO_val2014_000000317898.jpg -../coco/images/val2014/COCO_val2014_000000318124.jpg -../coco/images/val2014/COCO_val2014_000000318200.jpg -../coco/images/val2014/COCO_val2014_000000318314.jpg -../coco/images/val2014/COCO_val2014_000000318566.jpg -../coco/images/val2014/COCO_val2014_000000318618.jpg -../coco/images/val2014/COCO_val2014_000000318645.jpg -../coco/images/val2014/COCO_val2014_000000318671.jpg -../coco/images/val2014/COCO_val2014_000000318722.jpg -../coco/images/val2014/COCO_val2014_000000318837.jpg -../coco/images/val2014/COCO_val2014_000000319055.jpg -../coco/images/val2014/COCO_val2014_000000319073.jpg -../coco/images/val2014/COCO_val2014_000000319579.jpg -../coco/images/val2014/COCO_val2014_000000319616.jpg -../coco/images/val2014/COCO_val2014_000000319617.jpg -../coco/images/val2014/COCO_val2014_000000319654.jpg -../coco/images/val2014/COCO_val2014_000000319677.jpg -../coco/images/val2014/COCO_val2014_000000319687.jpg -../coco/images/val2014/COCO_val2014_000000319721.jpg -../coco/images/val2014/COCO_val2014_000000319726.jpg -../coco/images/val2014/COCO_val2014_000000320078.jpg -../coco/images/val2014/COCO_val2014_000000320203.jpg -../coco/images/val2014/COCO_val2014_000000320461.jpg -../coco/images/val2014/COCO_val2014_000000320480.jpg -../coco/images/val2014/COCO_val2014_000000320482.jpg -../coco/images/val2014/COCO_val2014_000000320696.jpg -../coco/images/val2014/COCO_val2014_000000320832.jpg -../coco/images/val2014/COCO_val2014_000000320893.jpg -../coco/images/val2014/COCO_val2014_000000320978.jpg -../coco/images/val2014/COCO_val2014_000000321079.jpg -../coco/images/val2014/COCO_val2014_000000321118.jpg -../coco/images/val2014/COCO_val2014_000000321176.jpg -../coco/images/val2014/COCO_val2014_000000321258.jpg -../coco/images/val2014/COCO_val2014_000000321476.jpg -../coco/images/val2014/COCO_val2014_000000321647.jpg -../coco/images/val2014/COCO_val2014_000000321804.jpg -../coco/images/val2014/COCO_val2014_000000322174.jpg -../coco/images/val2014/COCO_val2014_000000322352.jpg -../coco/images/val2014/COCO_val2014_000000322594.jpg -../coco/images/val2014/COCO_val2014_000000322724.jpg -../coco/images/val2014/COCO_val2014_000000322829.jpg -../coco/images/val2014/COCO_val2014_000000322845.jpg -../coco/images/val2014/COCO_val2014_000000322895.jpg -../coco/images/val2014/COCO_val2014_000000323128.jpg -../coco/images/val2014/COCO_val2014_000000323186.jpg -../coco/images/val2014/COCO_val2014_000000323291.jpg -../coco/images/val2014/COCO_val2014_000000323564.jpg -../coco/images/val2014/COCO_val2014_000000323751.jpg -../coco/images/val2014/COCO_val2014_000000323758.jpg -../coco/images/val2014/COCO_val2014_000000323799.jpg -../coco/images/val2014/COCO_val2014_000000323853.jpg -../coco/images/val2014/COCO_val2014_000000323919.jpg -../coco/images/val2014/COCO_val2014_000000323925.jpg -../coco/images/val2014/COCO_val2014_000000323930.jpg -../coco/images/val2014/COCO_val2014_000000324040.jpg -../coco/images/val2014/COCO_val2014_000000324135.jpg -../coco/images/val2014/COCO_val2014_000000324203.jpg -../coco/images/val2014/COCO_val2014_000000324497.jpg -../coco/images/val2014/COCO_val2014_000000324500.jpg -../coco/images/val2014/COCO_val2014_000000324595.jpg -../coco/images/val2014/COCO_val2014_000000324774.jpg -../coco/images/val2014/COCO_val2014_000000324776.jpg -../coco/images/val2014/COCO_val2014_000000324789.jpg -../coco/images/val2014/COCO_val2014_000000324872.jpg -../coco/images/val2014/COCO_val2014_000000325027.jpg -../coco/images/val2014/COCO_val2014_000000325153.jpg -../coco/images/val2014/COCO_val2014_000000325157.jpg -../coco/images/val2014/COCO_val2014_000000325211.jpg -../coco/images/val2014/COCO_val2014_000000325328.jpg -../coco/images/val2014/COCO_val2014_000000325410.jpg -../coco/images/val2014/COCO_val2014_000000325587.jpg -../coco/images/val2014/COCO_val2014_000000325623.jpg -../coco/images/val2014/COCO_val2014_000000325736.jpg -../coco/images/val2014/COCO_val2014_000000325907.jpg -../coco/images/val2014/COCO_val2014_000000326128.jpg -../coco/images/val2014/COCO_val2014_000000326230.jpg -../coco/images/val2014/COCO_val2014_000000326308.jpg -../coco/images/val2014/COCO_val2014_000000326368.jpg -../coco/images/val2014/COCO_val2014_000000326462.jpg -../coco/images/val2014/COCO_val2014_000000326959.jpg -../coco/images/val2014/COCO_val2014_000000327149.jpg -../coco/images/val2014/COCO_val2014_000000327323.jpg -../coco/images/val2014/COCO_val2014_000000327383.jpg -../coco/images/val2014/COCO_val2014_000000327413.jpg -../coco/images/val2014/COCO_val2014_000000327433.jpg -../coco/images/val2014/COCO_val2014_000000327617.jpg -../coco/images/val2014/COCO_val2014_000000327665.jpg -../coco/images/val2014/COCO_val2014_000000327845.jpg -../coco/images/val2014/COCO_val2014_000000327857.jpg -../coco/images/val2014/COCO_val2014_000000327872.jpg -../coco/images/val2014/COCO_val2014_000000327892.jpg -../coco/images/val2014/COCO_val2014_000000328068.jpg -../coco/images/val2014/COCO_val2014_000000328098.jpg -../coco/images/val2014/COCO_val2014_000000328374.jpg -../coco/images/val2014/COCO_val2014_000000328462.jpg -../coco/images/val2014/COCO_val2014_000000328464.jpg -../coco/images/val2014/COCO_val2014_000000328499.jpg -../coco/images/val2014/COCO_val2014_000000328551.jpg -../coco/images/val2014/COCO_val2014_000000328757.jpg -../coco/images/val2014/COCO_val2014_000000328791.jpg -../coco/images/val2014/COCO_val2014_000000328838.jpg -../coco/images/val2014/COCO_val2014_000000329375.jpg -../coco/images/val2014/COCO_val2014_000000329379.jpg -../coco/images/val2014/COCO_val2014_000000329421.jpg -../coco/images/val2014/COCO_val2014_000000329447.jpg -../coco/images/val2014/COCO_val2014_000000329486.jpg -../coco/images/val2014/COCO_val2014_000000329533.jpg -../coco/images/val2014/COCO_val2014_000000330065.jpg -../coco/images/val2014/COCO_val2014_000000330248.jpg -../coco/images/val2014/COCO_val2014_000000330515.jpg -../coco/images/val2014/COCO_val2014_000000330734.jpg -../coco/images/val2014/COCO_val2014_000000330931.jpg -../coco/images/val2014/COCO_val2014_000000331097.jpg -../coco/images/val2014/COCO_val2014_000000331196.jpg -../coco/images/val2014/COCO_val2014_000000331242.jpg -../coco/images/val2014/COCO_val2014_000000331307.jpg -../coco/images/val2014/COCO_val2014_000000331349.jpg -../coco/images/val2014/COCO_val2014_000000331372.jpg -../coco/images/val2014/COCO_val2014_000000331403.jpg -../coco/images/val2014/COCO_val2014_000000331627.jpg -../coco/images/val2014/COCO_val2014_000000331667.jpg -../coco/images/val2014/COCO_val2014_000000331959.jpg -../coco/images/val2014/COCO_val2014_000000332025.jpg -../coco/images/val2014/COCO_val2014_000000332407.jpg -../coco/images/val2014/COCO_val2014_000000332502.jpg -../coco/images/val2014/COCO_val2014_000000332545.jpg -../coco/images/val2014/COCO_val2014_000000332570.jpg -../coco/images/val2014/COCO_val2014_000000332582.jpg -../coco/images/val2014/COCO_val2014_000000332627.jpg -../coco/images/val2014/COCO_val2014_000000332852.jpg -../coco/images/val2014/COCO_val2014_000000332908.jpg -../coco/images/val2014/COCO_val2014_000000333014.jpg -../coco/images/val2014/COCO_val2014_000000333034.jpg -../coco/images/val2014/COCO_val2014_000000333101.jpg -../coco/images/val2014/COCO_val2014_000000333114.jpg -../coco/images/val2014/COCO_val2014_000000333150.jpg -../coco/images/val2014/COCO_val2014_000000333156.jpg -../coco/images/val2014/COCO_val2014_000000333167.jpg -../coco/images/val2014/COCO_val2014_000000333303.jpg -../coco/images/val2014/COCO_val2014_000000333436.jpg -../coco/images/val2014/COCO_val2014_000000333565.jpg -../coco/images/val2014/COCO_val2014_000000333756.jpg -../coco/images/val2014/COCO_val2014_000000333808.jpg -../coco/images/val2014/COCO_val2014_000000333845.jpg -../coco/images/val2014/COCO_val2014_000000333924.jpg -../coco/images/val2014/COCO_val2014_000000334015.jpg -../coco/images/val2014/COCO_val2014_000000334062.jpg -../coco/images/val2014/COCO_val2014_000000334471.jpg -../coco/images/val2014/COCO_val2014_000000334483.jpg -../coco/images/val2014/COCO_val2014_000000334675.jpg -../coco/images/val2014/COCO_val2014_000000334760.jpg -../coco/images/val2014/COCO_val2014_000000335081.jpg -../coco/images/val2014/COCO_val2014_000000335177.jpg -../coco/images/val2014/COCO_val2014_000000335328.jpg -../coco/images/val2014/COCO_val2014_000000335587.jpg -../coco/images/val2014/COCO_val2014_000000335610.jpg -../coco/images/val2014/COCO_val2014_000000335644.jpg -../coco/images/val2014/COCO_val2014_000000335774.jpg -../coco/images/val2014/COCO_val2014_000000335800.jpg -../coco/images/val2014/COCO_val2014_000000335814.jpg -../coco/images/val2014/COCO_val2014_000000335861.jpg -../coco/images/val2014/COCO_val2014_000000335887.jpg -../coco/images/val2014/COCO_val2014_000000335976.jpg -../coco/images/val2014/COCO_val2014_000000335992.jpg -../coco/images/val2014/COCO_val2014_000000336171.jpg -../coco/images/val2014/COCO_val2014_000000336309.jpg -../coco/images/val2014/COCO_val2014_000000336427.jpg -../coco/images/val2014/COCO_val2014_000000336464.jpg -../coco/images/val2014/COCO_val2014_000000336629.jpg -../coco/images/val2014/COCO_val2014_000000336949.jpg -../coco/images/val2014/COCO_val2014_000000337035.jpg -../coco/images/val2014/COCO_val2014_000000337246.jpg -../coco/images/val2014/COCO_val2014_000000337274.jpg -../coco/images/val2014/COCO_val2014_000000337563.jpg -../coco/images/val2014/COCO_val2014_000000337653.jpg -../coco/images/val2014/COCO_val2014_000000337666.jpg -../coco/images/val2014/COCO_val2014_000000337827.jpg -../coco/images/val2014/COCO_val2014_000000338044.jpg -../coco/images/val2014/COCO_val2014_000000338098.jpg -../coco/images/val2014/COCO_val2014_000000338105.jpg -../coco/images/val2014/COCO_val2014_000000338428.jpg -../coco/images/val2014/COCO_val2014_000000338532.jpg -../coco/images/val2014/COCO_val2014_000000338562.jpg -../coco/images/val2014/COCO_val2014_000000338581.jpg -../coco/images/val2014/COCO_val2014_000000338678.jpg -../coco/images/val2014/COCO_val2014_000000338826.jpg -../coco/images/val2014/COCO_val2014_000000339022.jpg -../coco/images/val2014/COCO_val2014_000000339202.jpg -../coco/images/val2014/COCO_val2014_000000339356.jpg -../coco/images/val2014/COCO_val2014_000000339470.jpg -../coco/images/val2014/COCO_val2014_000000339678.jpg -../coco/images/val2014/COCO_val2014_000000339740.jpg -../coco/images/val2014/COCO_val2014_000000339823.jpg -../coco/images/val2014/COCO_val2014_000000339943.jpg -../coco/images/val2014/COCO_val2014_000000340451.jpg -../coco/images/val2014/COCO_val2014_000000340529.jpg -../coco/images/val2014/COCO_val2014_000000340654.jpg -../coco/images/val2014/COCO_val2014_000000340737.jpg -../coco/images/val2014/COCO_val2014_000000340778.jpg -../coco/images/val2014/COCO_val2014_000000340781.jpg -../coco/images/val2014/COCO_val2014_000000340930.jpg -../coco/images/val2014/COCO_val2014_000000341230.jpg -../coco/images/val2014/COCO_val2014_000000341397.jpg -../coco/images/val2014/COCO_val2014_000000341725.jpg -../coco/images/val2014/COCO_val2014_000000341775.jpg -../coco/images/val2014/COCO_val2014_000000341778.jpg -../coco/images/val2014/COCO_val2014_000000342006.jpg -../coco/images/val2014/COCO_val2014_000000342142.jpg -../coco/images/val2014/COCO_val2014_000000342387.jpg -../coco/images/val2014/COCO_val2014_000000342762.jpg -../coco/images/val2014/COCO_val2014_000000343059.jpg -../coco/images/val2014/COCO_val2014_000000343157.jpg -../coco/images/val2014/COCO_val2014_000000343193.jpg -../coco/images/val2014/COCO_val2014_000000343315.jpg -../coco/images/val2014/COCO_val2014_000000343458.jpg -../coco/images/val2014/COCO_val2014_000000343504.jpg -../coco/images/val2014/COCO_val2014_000000343543.jpg -../coco/images/val2014/COCO_val2014_000000343680.jpg -../coco/images/val2014/COCO_val2014_000000343753.jpg -../coco/images/val2014/COCO_val2014_000000343967.jpg -../coco/images/val2014/COCO_val2014_000000344045.jpg -../coco/images/val2014/COCO_val2014_000000344197.jpg -../coco/images/val2014/COCO_val2014_000000344488.jpg -../coco/images/val2014/COCO_val2014_000000344498.jpg -../coco/images/val2014/COCO_val2014_000000344730.jpg -../coco/images/val2014/COCO_val2014_000000344862.jpg -../coco/images/val2014/COCO_val2014_000000344897.jpg -../coco/images/val2014/COCO_val2014_000000344903.jpg -../coco/images/val2014/COCO_val2014_000000345136.jpg -../coco/images/val2014/COCO_val2014_000000345211.jpg -../coco/images/val2014/COCO_val2014_000000345224.jpg -../coco/images/val2014/COCO_val2014_000000345261.jpg -../coco/images/val2014/COCO_val2014_000000345469.jpg -../coco/images/val2014/COCO_val2014_000000345711.jpg -../coco/images/val2014/COCO_val2014_000000345998.jpg -../coco/images/val2014/COCO_val2014_000000346337.jpg -../coco/images/val2014/COCO_val2014_000000346642.jpg -../coco/images/val2014/COCO_val2014_000000346645.jpg -../coco/images/val2014/COCO_val2014_000000346865.jpg -../coco/images/val2014/COCO_val2014_000000346940.jpg -../coco/images/val2014/COCO_val2014_000000347377.jpg -../coco/images/val2014/COCO_val2014_000000347390.jpg -../coco/images/val2014/COCO_val2014_000000347506.jpg -../coco/images/val2014/COCO_val2014_000000347630.jpg -../coco/images/val2014/COCO_val2014_000000347724.jpg -../coco/images/val2014/COCO_val2014_000000347747.jpg -../coco/images/val2014/COCO_val2014_000000347768.jpg -../coco/images/val2014/COCO_val2014_000000347772.jpg -../coco/images/val2014/COCO_val2014_000000347819.jpg -../coco/images/val2014/COCO_val2014_000000347848.jpg -../coco/images/val2014/COCO_val2014_000000347982.jpg -../coco/images/val2014/COCO_val2014_000000348091.jpg -../coco/images/val2014/COCO_val2014_000000348140.jpg -../coco/images/val2014/COCO_val2014_000000348216.jpg -../coco/images/val2014/COCO_val2014_000000348263.jpg -../coco/images/val2014/COCO_val2014_000000348306.jpg -../coco/images/val2014/COCO_val2014_000000348474.jpg -../coco/images/val2014/COCO_val2014_000000348524.jpg -../coco/images/val2014/COCO_val2014_000000348571.jpg -../coco/images/val2014/COCO_val2014_000000348701.jpg -../coco/images/val2014/COCO_val2014_000000348791.jpg -../coco/images/val2014/COCO_val2014_000000348913.jpg -../coco/images/val2014/COCO_val2014_000000348973.jpg -../coco/images/val2014/COCO_val2014_000000349185.jpg -../coco/images/val2014/COCO_val2014_000000349310.jpg -../coco/images/val2014/COCO_val2014_000000349402.jpg -../coco/images/val2014/COCO_val2014_000000349469.jpg -../coco/images/val2014/COCO_val2014_000000349480.jpg -../coco/images/val2014/COCO_val2014_000000349485.jpg -../coco/images/val2014/COCO_val2014_000000349489.jpg -../coco/images/val2014/COCO_val2014_000000349616.jpg -../coco/images/val2014/COCO_val2014_000000349622.jpg -../coco/images/val2014/COCO_val2014_000000349822.jpg -../coco/images/val2014/COCO_val2014_000000350075.jpg -../coco/images/val2014/COCO_val2014_000000350084.jpg -../coco/images/val2014/COCO_val2014_000000350388.jpg -../coco/images/val2014/COCO_val2014_000000350405.jpg -../coco/images/val2014/COCO_val2014_000000350447.jpg -../coco/images/val2014/COCO_val2014_000000350463.jpg -../coco/images/val2014/COCO_val2014_000000350467.jpg -../coco/images/val2014/COCO_val2014_000000350491.jpg -../coco/images/val2014/COCO_val2014_000000350648.jpg -../coco/images/val2014/COCO_val2014_000000350668.jpg -../coco/images/val2014/COCO_val2014_000000350675.jpg -../coco/images/val2014/COCO_val2014_000000350694.jpg -../coco/images/val2014/COCO_val2014_000000350851.jpg -../coco/images/val2014/COCO_val2014_000000351081.jpg -../coco/images/val2014/COCO_val2014_000000351149.jpg -../coco/images/val2014/COCO_val2014_000000351183.jpg -../coco/images/val2014/COCO_val2014_000000351557.jpg -../coco/images/val2014/COCO_val2014_000000351590.jpg -../coco/images/val2014/COCO_val2014_000000351683.jpg -../coco/images/val2014/COCO_val2014_000000351787.jpg -../coco/images/val2014/COCO_val2014_000000351840.jpg -../coco/images/val2014/COCO_val2014_000000352005.jpg -../coco/images/val2014/COCO_val2014_000000352334.jpg -../coco/images/val2014/COCO_val2014_000000352478.jpg -../coco/images/val2014/COCO_val2014_000000352481.jpg -../coco/images/val2014/COCO_val2014_000000352538.jpg -../coco/images/val2014/COCO_val2014_000000352760.jpg -../coco/images/val2014/COCO_val2014_000000353027.jpg -../coco/images/val2014/COCO_val2014_000000353028.jpg -../coco/images/val2014/COCO_val2014_000000353096.jpg -../coco/images/val2014/COCO_val2014_000000353298.jpg -../coco/images/val2014/COCO_val2014_000000353300.jpg -../coco/images/val2014/COCO_val2014_000000353411.jpg -../coco/images/val2014/COCO_val2014_000000353666.jpg -../coco/images/val2014/COCO_val2014_000000353964.jpg -../coco/images/val2014/COCO_val2014_000000354061.jpg -../coco/images/val2014/COCO_val2014_000000354242.jpg -../coco/images/val2014/COCO_val2014_000000354460.jpg -../coco/images/val2014/COCO_val2014_000000354929.jpg -../coco/images/val2014/COCO_val2014_000000355000.jpg -../coco/images/val2014/COCO_val2014_000000355123.jpg -../coco/images/val2014/COCO_val2014_000000355256.jpg -../coco/images/val2014/COCO_val2014_000000355263.jpg -../coco/images/val2014/COCO_val2014_000000355441.jpg -../coco/images/val2014/COCO_val2014_000000355450.jpg -../coco/images/val2014/COCO_val2014_000000355817.jpg -../coco/images/val2014/COCO_val2014_000000355871.jpg -../coco/images/val2014/COCO_val2014_000000355919.jpg -../coco/images/val2014/COCO_val2014_000000356002.jpg -../coco/images/val2014/COCO_val2014_000000356043.jpg -../coco/images/val2014/COCO_val2014_000000356092.jpg -../coco/images/val2014/COCO_val2014_000000356236.jpg -../coco/images/val2014/COCO_val2014_000000356351.jpg -../coco/images/val2014/COCO_val2014_000000356368.jpg -../coco/images/val2014/COCO_val2014_000000356379.jpg -../coco/images/val2014/COCO_val2014_000000356406.jpg -../coco/images/val2014/COCO_val2014_000000356456.jpg -../coco/images/val2014/COCO_val2014_000000356505.jpg -../coco/images/val2014/COCO_val2014_000000356612.jpg -../coco/images/val2014/COCO_val2014_000000357279.jpg -../coco/images/val2014/COCO_val2014_000000357335.jpg -../coco/images/val2014/COCO_val2014_000000357475.jpg -../coco/images/val2014/COCO_val2014_000000357529.jpg -../coco/images/val2014/COCO_val2014_000000357743.jpg -../coco/images/val2014/COCO_val2014_000000357829.jpg -../coco/images/val2014/COCO_val2014_000000357916.jpg -../coco/images/val2014/COCO_val2014_000000357944.jpg -../coco/images/val2014/COCO_val2014_000000358191.jpg -../coco/images/val2014/COCO_val2014_000000358231.jpg -../coco/images/val2014/COCO_val2014_000000358389.jpg -../coco/images/val2014/COCO_val2014_000000358652.jpg -../coco/images/val2014/COCO_val2014_000000358750.jpg -../coco/images/val2014/COCO_val2014_000000358763.jpg -../coco/images/val2014/COCO_val2014_000000358833.jpg -../coco/images/val2014/COCO_val2014_000000358901.jpg -../coco/images/val2014/COCO_val2014_000000359118.jpg -../coco/images/val2014/COCO_val2014_000000359126.jpg -../coco/images/val2014/COCO_val2014_000000359239.jpg -../coco/images/val2014/COCO_val2014_000000359276.jpg -../coco/images/val2014/COCO_val2014_000000359303.jpg -../coco/images/val2014/COCO_val2014_000000359442.jpg -../coco/images/val2014/COCO_val2014_000000359677.jpg -../coco/images/val2014/COCO_val2014_000000359791.jpg -../coco/images/val2014/COCO_val2014_000000359947.jpg -../coco/images/val2014/COCO_val2014_000000360128.jpg -../coco/images/val2014/COCO_val2014_000000360263.jpg -../coco/images/val2014/COCO_val2014_000000360346.jpg -../coco/images/val2014/COCO_val2014_000000360512.jpg -../coco/images/val2014/COCO_val2014_000000360564.jpg -../coco/images/val2014/COCO_val2014_000000360661.jpg -../coco/images/val2014/COCO_val2014_000000360700.jpg -../coco/images/val2014/COCO_val2014_000000360730.jpg -../coco/images/val2014/COCO_val2014_000000360926.jpg -../coco/images/val2014/COCO_val2014_000000361027.jpg -../coco/images/val2014/COCO_val2014_000000361029.jpg -../coco/images/val2014/COCO_val2014_000000361085.jpg -../coco/images/val2014/COCO_val2014_000000361157.jpg -../coco/images/val2014/COCO_val2014_000000361180.jpg -../coco/images/val2014/COCO_val2014_000000361221.jpg -../coco/images/val2014/COCO_val2014_000000361265.jpg -../coco/images/val2014/COCO_val2014_000000361268.jpg -../coco/images/val2014/COCO_val2014_000000361321.jpg -../coco/images/val2014/COCO_val2014_000000361341.jpg -../coco/images/val2014/COCO_val2014_000000361386.jpg -../coco/images/val2014/COCO_val2014_000000361660.jpg -../coco/images/val2014/COCO_val2014_000000361730.jpg -../coco/images/val2014/COCO_val2014_000000361751.jpg -../coco/images/val2014/COCO_val2014_000000361804.jpg -../coco/images/val2014/COCO_val2014_000000361819.jpg -../coco/images/val2014/COCO_val2014_000000361831.jpg -../coco/images/val2014/COCO_val2014_000000361885.jpg -../coco/images/val2014/COCO_val2014_000000361923.jpg -../coco/images/val2014/COCO_val2014_000000362026.jpg -../coco/images/val2014/COCO_val2014_000000362159.jpg -../coco/images/val2014/COCO_val2014_000000362189.jpg -../coco/images/val2014/COCO_val2014_000000362483.jpg -../coco/images/val2014/COCO_val2014_000000362869.jpg -../coco/images/val2014/COCO_val2014_000000362971.jpg -../coco/images/val2014/COCO_val2014_000000363403.jpg -../coco/images/val2014/COCO_val2014_000000363461.jpg -../coco/images/val2014/COCO_val2014_000000363508.jpg -../coco/images/val2014/COCO_val2014_000000363522.jpg -../coco/images/val2014/COCO_val2014_000000363831.jpg -../coco/images/val2014/COCO_val2014_000000363875.jpg -../coco/images/val2014/COCO_val2014_000000364079.jpg -../coco/images/val2014/COCO_val2014_000000364145.jpg -../coco/images/val2014/COCO_val2014_000000364188.jpg -../coco/images/val2014/COCO_val2014_000000364399.jpg -../coco/images/val2014/COCO_val2014_000000364429.jpg -../coco/images/val2014/COCO_val2014_000000364493.jpg -../coco/images/val2014/COCO_val2014_000000364567.jpg -../coco/images/val2014/COCO_val2014_000000364589.jpg -../coco/images/val2014/COCO_val2014_000000364757.jpg -../coco/images/val2014/COCO_val2014_000000365094.jpg -../coco/images/val2014/COCO_val2014_000000365103.jpg -../coco/images/val2014/COCO_val2014_000000365121.jpg -../coco/images/val2014/COCO_val2014_000000365207.jpg -../coco/images/val2014/COCO_val2014_000000365214.jpg -../coco/images/val2014/COCO_val2014_000000365317.jpg -../coco/images/val2014/COCO_val2014_000000365485.jpg -../coco/images/val2014/COCO_val2014_000000365511.jpg -../coco/images/val2014/COCO_val2014_000000365540.jpg -../coco/images/val2014/COCO_val2014_000000365618.jpg -../coco/images/val2014/COCO_val2014_000000365822.jpg -../coco/images/val2014/COCO_val2014_000000365983.jpg -../coco/images/val2014/COCO_val2014_000000366031.jpg -../coco/images/val2014/COCO_val2014_000000366111.jpg -../coco/images/val2014/COCO_val2014_000000366178.jpg -../coco/images/val2014/COCO_val2014_000000366199.jpg -../coco/images/val2014/COCO_val2014_000000366569.jpg -../coco/images/val2014/COCO_val2014_000000366576.jpg -../coco/images/val2014/COCO_val2014_000000366611.jpg -../coco/images/val2014/COCO_val2014_000000366615.jpg -../coco/images/val2014/COCO_val2014_000000366867.jpg -../coco/images/val2014/COCO_val2014_000000367087.jpg -../coco/images/val2014/COCO_val2014_000000367205.jpg -../coco/images/val2014/COCO_val2014_000000367452.jpg -../coco/images/val2014/COCO_val2014_000000367509.jpg -../coco/images/val2014/COCO_val2014_000000367558.jpg -../coco/images/val2014/COCO_val2014_000000367571.jpg -../coco/images/val2014/COCO_val2014_000000367582.jpg -../coco/images/val2014/COCO_val2014_000000367608.jpg -../coco/images/val2014/COCO_val2014_000000367626.jpg -../coco/images/val2014/COCO_val2014_000000367673.jpg -../coco/images/val2014/COCO_val2014_000000367843.jpg -../coco/images/val2014/COCO_val2014_000000367893.jpg -../coco/images/val2014/COCO_val2014_000000367953.jpg -../coco/images/val2014/COCO_val2014_000000368038.jpg -../coco/images/val2014/COCO_val2014_000000368096.jpg -../coco/images/val2014/COCO_val2014_000000368222.jpg -../coco/images/val2014/COCO_val2014_000000368367.jpg -../coco/images/val2014/COCO_val2014_000000368648.jpg -../coco/images/val2014/COCO_val2014_000000368752.jpg -../coco/images/val2014/COCO_val2014_000000369185.jpg -../coco/images/val2014/COCO_val2014_000000369294.jpg -../coco/images/val2014/COCO_val2014_000000369309.jpg -../coco/images/val2014/COCO_val2014_000000369675.jpg -../coco/images/val2014/COCO_val2014_000000369685.jpg -../coco/images/val2014/COCO_val2014_000000369776.jpg -../coco/images/val2014/COCO_val2014_000000369840.jpg -../coco/images/val2014/COCO_val2014_000000369887.jpg -../coco/images/val2014/COCO_val2014_000000369997.jpg -../coco/images/val2014/COCO_val2014_000000370233.jpg -../coco/images/val2014/COCO_val2014_000000370279.jpg -../coco/images/val2014/COCO_val2014_000000370315.jpg -../coco/images/val2014/COCO_val2014_000000370331.jpg -../coco/images/val2014/COCO_val2014_000000370388.jpg -../coco/images/val2014/COCO_val2014_000000370513.jpg -../coco/images/val2014/COCO_val2014_000000370602.jpg -../coco/images/val2014/COCO_val2014_000000370701.jpg -../coco/images/val2014/COCO_val2014_000000370749.jpg -../coco/images/val2014/COCO_val2014_000000370839.jpg -../coco/images/val2014/COCO_val2014_000000370929.jpg -../coco/images/val2014/COCO_val2014_000000371289.jpg -../coco/images/val2014/COCO_val2014_000000371326.jpg -../coco/images/val2014/COCO_val2014_000000371497.jpg -../coco/images/val2014/COCO_val2014_000000371552.jpg -../coco/images/val2014/COCO_val2014_000000371822.jpg -../coco/images/val2014/COCO_val2014_000000371841.jpg -../coco/images/val2014/COCO_val2014_000000371948.jpg -../coco/images/val2014/COCO_val2014_000000371973.jpg -../coco/images/val2014/COCO_val2014_000000372230.jpg -../coco/images/val2014/COCO_val2014_000000372362.jpg -../coco/images/val2014/COCO_val2014_000000372433.jpg -../coco/images/val2014/COCO_val2014_000000372471.jpg -../coco/images/val2014/COCO_val2014_000000372494.jpg -../coco/images/val2014/COCO_val2014_000000372580.jpg -../coco/images/val2014/COCO_val2014_000000372718.jpg -../coco/images/val2014/COCO_val2014_000000372855.jpg -../coco/images/val2014/COCO_val2014_000000373007.jpg -../coco/images/val2014/COCO_val2014_000000373060.jpg -../coco/images/val2014/COCO_val2014_000000373119.jpg -../coco/images/val2014/COCO_val2014_000000373140.jpg -../coco/images/val2014/COCO_val2014_000000373193.jpg -../coco/images/val2014/COCO_val2014_000000373255.jpg -../coco/images/val2014/COCO_val2014_000000373284.jpg -../coco/images/val2014/COCO_val2014_000000373375.jpg -../coco/images/val2014/COCO_val2014_000000373440.jpg -../coco/images/val2014/COCO_val2014_000000373571.jpg -../coco/images/val2014/COCO_val2014_000000373705.jpg -../coco/images/val2014/COCO_val2014_000000373988.jpg -../coco/images/val2014/COCO_val2014_000000374111.jpg -../coco/images/val2014/COCO_val2014_000000374241.jpg -../coco/images/val2014/COCO_val2014_000000374641.jpg -../coco/images/val2014/COCO_val2014_000000374702.jpg -../coco/images/val2014/COCO_val2014_000000374734.jpg -../coco/images/val2014/COCO_val2014_000000374886.jpg -../coco/images/val2014/COCO_val2014_000000375063.jpg -../coco/images/val2014/COCO_val2014_000000375180.jpg -../coco/images/val2014/COCO_val2014_000000375198.jpg -../coco/images/val2014/COCO_val2014_000000375211.jpg -../coco/images/val2014/COCO_val2014_000000375317.jpg -../coco/images/val2014/COCO_val2014_000000375530.jpg -../coco/images/val2014/COCO_val2014_000000375763.jpg -../coco/images/val2014/COCO_val2014_000000375902.jpg -../coco/images/val2014/COCO_val2014_000000375914.jpg -../coco/images/val2014/COCO_val2014_000000376059.jpg -../coco/images/val2014/COCO_val2014_000000376187.jpg -../coco/images/val2014/COCO_val2014_000000376233.jpg -../coco/images/val2014/COCO_val2014_000000376295.jpg -../coco/images/val2014/COCO_val2014_000000376307.jpg -../coco/images/val2014/COCO_val2014_000000376358.jpg -../coco/images/val2014/COCO_val2014_000000376441.jpg -../coco/images/val2014/COCO_val2014_000000376667.jpg -../coco/images/val2014/COCO_val2014_000000376677.jpg -../coco/images/val2014/COCO_val2014_000000376751.jpg -../coco/images/val2014/COCO_val2014_000000376900.jpg -../coco/images/val2014/COCO_val2014_000000376996.jpg -../coco/images/val2014/COCO_val2014_000000377003.jpg -../coco/images/val2014/COCO_val2014_000000377060.jpg -../coco/images/val2014/COCO_val2014_000000377080.jpg -../coco/images/val2014/COCO_val2014_000000377355.jpg -../coco/images/val2014/COCO_val2014_000000377595.jpg -../coco/images/val2014/COCO_val2014_000000377723.jpg -../coco/images/val2014/COCO_val2014_000000377867.jpg -../coco/images/val2014/COCO_val2014_000000377882.jpg -../coco/images/val2014/COCO_val2014_000000377984.jpg -../coco/images/val2014/COCO_val2014_000000378099.jpg -../coco/images/val2014/COCO_val2014_000000378139.jpg -../coco/images/val2014/COCO_val2014_000000378284.jpg -../coco/images/val2014/COCO_val2014_000000378403.jpg -../coco/images/val2014/COCO_val2014_000000378448.jpg -../coco/images/val2014/COCO_val2014_000000378652.jpg -../coco/images/val2014/COCO_val2014_000000378712.jpg -../coco/images/val2014/COCO_val2014_000000378727.jpg -../coco/images/val2014/COCO_val2014_000000378831.jpg -../coco/images/val2014/COCO_val2014_000000379022.jpg -../coco/images/val2014/COCO_val2014_000000379070.jpg -../coco/images/val2014/COCO_val2014_000000379108.jpg -../coco/images/val2014/COCO_val2014_000000379162.jpg -../coco/images/val2014/COCO_val2014_000000379332.jpg -../coco/images/val2014/COCO_val2014_000000379476.jpg -../coco/images/val2014/COCO_val2014_000000379584.jpg -../coco/images/val2014/COCO_val2014_000000379605.jpg -../coco/images/val2014/COCO_val2014_000000379837.jpg -../coco/images/val2014/COCO_val2014_000000379869.jpg -../coco/images/val2014/COCO_val2014_000000380088.jpg -../coco/images/val2014/COCO_val2014_000000380106.jpg -../coco/images/val2014/COCO_val2014_000000380299.jpg -../coco/images/val2014/COCO_val2014_000000380414.jpg -../coco/images/val2014/COCO_val2014_000000380609.jpg -../coco/images/val2014/COCO_val2014_000000380639.jpg -../coco/images/val2014/COCO_val2014_000000380698.jpg -../coco/images/val2014/COCO_val2014_000000380756.jpg -../coco/images/val2014/COCO_val2014_000000380892.jpg -../coco/images/val2014/COCO_val2014_000000381031.jpg -../coco/images/val2014/COCO_val2014_000000381060.jpg -../coco/images/val2014/COCO_val2014_000000381213.jpg -../coco/images/val2014/COCO_val2014_000000381527.jpg -../coco/images/val2014/COCO_val2014_000000381551.jpg -../coco/images/val2014/COCO_val2014_000000381709.jpg -../coco/images/val2014/COCO_val2014_000000382088.jpg -../coco/images/val2014/COCO_val2014_000000382333.jpg -../coco/images/val2014/COCO_val2014_000000382715.jpg -../coco/images/val2014/COCO_val2014_000000382717.jpg -../coco/images/val2014/COCO_val2014_000000382855.jpg -../coco/images/val2014/COCO_val2014_000000383039.jpg -../coco/images/val2014/COCO_val2014_000000383065.jpg -../coco/images/val2014/COCO_val2014_000000383073.jpg -../coco/images/val2014/COCO_val2014_000000383087.jpg -../coco/images/val2014/COCO_val2014_000000383339.jpg -../coco/images/val2014/COCO_val2014_000000383341.jpg -../coco/images/val2014/COCO_val2014_000000383384.jpg -../coco/images/val2014/COCO_val2014_000000383462.jpg -../coco/images/val2014/COCO_val2014_000000384012.jpg -../coco/images/val2014/COCO_val2014_000000384040.jpg -../coco/images/val2014/COCO_val2014_000000384188.jpg -../coco/images/val2014/COCO_val2014_000000384333.jpg -../coco/images/val2014/COCO_val2014_000000384348.jpg -../coco/images/val2014/COCO_val2014_000000384527.jpg -../coco/images/val2014/COCO_val2014_000000384554.jpg -../coco/images/val2014/COCO_val2014_000000384827.jpg -../coco/images/val2014/COCO_val2014_000000385057.jpg -../coco/images/val2014/COCO_val2014_000000385320.jpg -../coco/images/val2014/COCO_val2014_000000385346.jpg -../coco/images/val2014/COCO_val2014_000000385580.jpg -../coco/images/val2014/COCO_val2014_000000385779.jpg -../coco/images/val2014/COCO_val2014_000000385877.jpg -../coco/images/val2014/COCO_val2014_000000385997.jpg -../coco/images/val2014/COCO_val2014_000000386119.jpg -../coco/images/val2014/COCO_val2014_000000386134.jpg -../coco/images/val2014/COCO_val2014_000000386187.jpg -../coco/images/val2014/COCO_val2014_000000386224.jpg -../coco/images/val2014/COCO_val2014_000000386457.jpg -../coco/images/val2014/COCO_val2014_000000386585.jpg -../coco/images/val2014/COCO_val2014_000000386661.jpg -../coco/images/val2014/COCO_val2014_000000386707.jpg -../coco/images/val2014/COCO_val2014_000000386755.jpg -../coco/images/val2014/COCO_val2014_000000386786.jpg -../coco/images/val2014/COCO_val2014_000000386929.jpg -../coco/images/val2014/COCO_val2014_000000387150.jpg -../coco/images/val2014/COCO_val2014_000000387244.jpg -../coco/images/val2014/COCO_val2014_000000387369.jpg -../coco/images/val2014/COCO_val2014_000000387383.jpg -../coco/images/val2014/COCO_val2014_000000387387.jpg -../coco/images/val2014/COCO_val2014_000000387551.jpg -../coco/images/val2014/COCO_val2014_000000387576.jpg -../coco/images/val2014/COCO_val2014_000000387655.jpg -../coco/images/val2014/COCO_val2014_000000387696.jpg -../coco/images/val2014/COCO_val2014_000000387776.jpg -../coco/images/val2014/COCO_val2014_000000387850.jpg -../coco/images/val2014/COCO_val2014_000000388009.jpg -../coco/images/val2014/COCO_val2014_000000388325.jpg -../coco/images/val2014/COCO_val2014_000000388413.jpg -../coco/images/val2014/COCO_val2014_000000388464.jpg -../coco/images/val2014/COCO_val2014_000000388677.jpg -../coco/images/val2014/COCO_val2014_000000388721.jpg -../coco/images/val2014/COCO_val2014_000000388881.jpg -../coco/images/val2014/COCO_val2014_000000388903.jpg -../coco/images/val2014/COCO_val2014_000000389056.jpg -../coco/images/val2014/COCO_val2014_000000389316.jpg -../coco/images/val2014/COCO_val2014_000000389340.jpg -../coco/images/val2014/COCO_val2014_000000389378.jpg -../coco/images/val2014/COCO_val2014_000000389604.jpg -../coco/images/val2014/COCO_val2014_000000389622.jpg -../coco/images/val2014/COCO_val2014_000000389644.jpg -../coco/images/val2014/COCO_val2014_000000389738.jpg -../coco/images/val2014/COCO_val2014_000000389753.jpg -../coco/images/val2014/COCO_val2014_000000389843.jpg -../coco/images/val2014/COCO_val2014_000000390017.jpg -../coco/images/val2014/COCO_val2014_000000390068.jpg -../coco/images/val2014/COCO_val2014_000000390137.jpg -../coco/images/val2014/COCO_val2014_000000390238.jpg -../coco/images/val2014/COCO_val2014_000000390246.jpg -../coco/images/val2014/COCO_val2014_000000390322.jpg -../coco/images/val2014/COCO_val2014_000000390585.jpg -../coco/images/val2014/COCO_val2014_000000390685.jpg -../coco/images/val2014/COCO_val2014_000000390689.jpg -../coco/images/val2014/COCO_val2014_000000390769.jpg -../coco/images/val2014/COCO_val2014_000000390795.jpg -../coco/images/val2014/COCO_val2014_000000390902.jpg -../coco/images/val2014/COCO_val2014_000000391225.jpg -../coco/images/val2014/COCO_val2014_000000391365.jpg -../coco/images/val2014/COCO_val2014_000000391463.jpg -../coco/images/val2014/COCO_val2014_000000391689.jpg -../coco/images/val2014/COCO_val2014_000000391862.jpg -../coco/images/val2014/COCO_val2014_000000391940.jpg -../coco/images/val2014/COCO_val2014_000000391978.jpg -../coco/images/val2014/COCO_val2014_000000392004.jpg -../coco/images/val2014/COCO_val2014_000000392251.jpg -../coco/images/val2014/COCO_val2014_000000392364.jpg -../coco/images/val2014/COCO_val2014_000000392392.jpg -../coco/images/val2014/COCO_val2014_000000392753.jpg -../coco/images/val2014/COCO_val2014_000000392981.jpg -../coco/images/val2014/COCO_val2014_000000393031.jpg -../coco/images/val2014/COCO_val2014_000000393282.jpg -../coco/images/val2014/COCO_val2014_000000393372.jpg -../coco/images/val2014/COCO_val2014_000000393497.jpg -../coco/images/val2014/COCO_val2014_000000393674.jpg -../coco/images/val2014/COCO_val2014_000000393692.jpg -../coco/images/val2014/COCO_val2014_000000393794.jpg -../coco/images/val2014/COCO_val2014_000000393874.jpg -../coco/images/val2014/COCO_val2014_000000394132.jpg -../coco/images/val2014/COCO_val2014_000000394157.jpg -../coco/images/val2014/COCO_val2014_000000394352.jpg -../coco/images/val2014/COCO_val2014_000000394559.jpg -../coco/images/val2014/COCO_val2014_000000394611.jpg -../coco/images/val2014/COCO_val2014_000000394677.jpg -../coco/images/val2014/COCO_val2014_000000395180.jpg -../coco/images/val2014/COCO_val2014_000000395290.jpg -../coco/images/val2014/COCO_val2014_000000395463.jpg -../coco/images/val2014/COCO_val2014_000000395531.jpg -../coco/images/val2014/COCO_val2014_000000395634.jpg -../coco/images/val2014/COCO_val2014_000000395665.jpg -../coco/images/val2014/COCO_val2014_000000395717.jpg -../coco/images/val2014/COCO_val2014_000000395723.jpg -../coco/images/val2014/COCO_val2014_000000395801.jpg -../coco/images/val2014/COCO_val2014_000000396167.jpg -../coco/images/val2014/COCO_val2014_000000396178.jpg -../coco/images/val2014/COCO_val2014_000000396369.jpg -../coco/images/val2014/COCO_val2014_000000396526.jpg -../coco/images/val2014/COCO_val2014_000000396736.jpg -../coco/images/val2014/COCO_val2014_000000396997.jpg -../coco/images/val2014/COCO_val2014_000000397322.jpg -../coco/images/val2014/COCO_val2014_000000397475.jpg -../coco/images/val2014/COCO_val2014_000000398007.jpg -../coco/images/val2014/COCO_val2014_000000398045.jpg -../coco/images/val2014/COCO_val2014_000000398119.jpg -../coco/images/val2014/COCO_val2014_000000398222.jpg -../coco/images/val2014/COCO_val2014_000000398438.jpg -../coco/images/val2014/COCO_val2014_000000398450.jpg -../coco/images/val2014/COCO_val2014_000000398519.jpg -../coco/images/val2014/COCO_val2014_000000398604.jpg -../coco/images/val2014/COCO_val2014_000000398606.jpg -../coco/images/val2014/COCO_val2014_000000398637.jpg -../coco/images/val2014/COCO_val2014_000000398753.jpg -../coco/images/val2014/COCO_val2014_000000398866.jpg -../coco/images/val2014/COCO_val2014_000000398905.jpg -../coco/images/val2014/COCO_val2014_000000399205.jpg -../coco/images/val2014/COCO_val2014_000000399545.jpg -../coco/images/val2014/COCO_val2014_000000399567.jpg -../coco/images/val2014/COCO_val2014_000000399655.jpg -../coco/images/val2014/COCO_val2014_000000399741.jpg -../coco/images/val2014/COCO_val2014_000000399744.jpg -../coco/images/val2014/COCO_val2014_000000399822.jpg -../coco/images/val2014/COCO_val2014_000000399832.jpg -../coco/images/val2014/COCO_val2014_000000399865.jpg -../coco/images/val2014/COCO_val2014_000000399991.jpg -../coco/images/val2014/COCO_val2014_000000400044.jpg -../coco/images/val2014/COCO_val2014_000000400046.jpg -../coco/images/val2014/COCO_val2014_000000400189.jpg -../coco/images/val2014/COCO_val2014_000000400202.jpg -../coco/images/val2014/COCO_val2014_000000400317.jpg -../coco/images/val2014/COCO_val2014_000000400975.jpg -../coco/images/val2014/COCO_val2014_000000400976.jpg -../coco/images/val2014/COCO_val2014_000000401028.jpg -../coco/images/val2014/COCO_val2014_000000401088.jpg -../coco/images/val2014/COCO_val2014_000000401092.jpg -../coco/images/val2014/COCO_val2014_000000401124.jpg -../coco/images/val2014/COCO_val2014_000000401320.jpg -../coco/images/val2014/COCO_val2014_000000401384.jpg -../coco/images/val2014/COCO_val2014_000000401425.jpg -../coco/images/val2014/COCO_val2014_000000401591.jpg -../coco/images/val2014/COCO_val2014_000000401860.jpg -../coco/images/val2014/COCO_val2014_000000401892.jpg -../coco/images/val2014/COCO_val2014_000000402000.jpg -../coco/images/val2014/COCO_val2014_000000402334.jpg -../coco/images/val2014/COCO_val2014_000000402717.jpg -../coco/images/val2014/COCO_val2014_000000402723.jpg -../coco/images/val2014/COCO_val2014_000000402867.jpg -../coco/images/val2014/COCO_val2014_000000402887.jpg -../coco/images/val2014/COCO_val2014_000000402909.jpg -../coco/images/val2014/COCO_val2014_000000403087.jpg -../coco/images/val2014/COCO_val2014_000000403180.jpg -../coco/images/val2014/COCO_val2014_000000403315.jpg -../coco/images/val2014/COCO_val2014_000000403378.jpg -../coco/images/val2014/COCO_val2014_000000403639.jpg -../coco/images/val2014/COCO_val2014_000000403675.jpg -../coco/images/val2014/COCO_val2014_000000403950.jpg -../coco/images/val2014/COCO_val2014_000000403975.jpg -../coco/images/val2014/COCO_val2014_000000404027.jpg -../coco/images/val2014/COCO_val2014_000000404601.jpg -../coco/images/val2014/COCO_val2014_000000404602.jpg -../coco/images/val2014/COCO_val2014_000000404886.jpg -../coco/images/val2014/COCO_val2014_000000404889.jpg -../coco/images/val2014/COCO_val2014_000000405062.jpg -../coco/images/val2014/COCO_val2014_000000405104.jpg -../coco/images/val2014/COCO_val2014_000000405226.jpg -../coco/images/val2014/COCO_val2014_000000405306.jpg -../coco/images/val2014/COCO_val2014_000000405530.jpg -../coco/images/val2014/COCO_val2014_000000405970.jpg -../coco/images/val2014/COCO_val2014_000000406053.jpg -../coco/images/val2014/COCO_val2014_000000406211.jpg -../coco/images/val2014/COCO_val2014_000000406217.jpg -../coco/images/val2014/COCO_val2014_000000406417.jpg -../coco/images/val2014/COCO_val2014_000000406451.jpg -../coco/images/val2014/COCO_val2014_000000406841.jpg -../coco/images/val2014/COCO_val2014_000000406848.jpg -../coco/images/val2014/COCO_val2014_000000406976.jpg -../coco/images/val2014/COCO_val2014_000000407017.jpg -../coco/images/val2014/COCO_val2014_000000407259.jpg -../coco/images/val2014/COCO_val2014_000000407443.jpg -../coco/images/val2014/COCO_val2014_000000407524.jpg -../coco/images/val2014/COCO_val2014_000000407650.jpg -../coco/images/val2014/COCO_val2014_000000407945.jpg -../coco/images/val2014/COCO_val2014_000000407948.jpg -../coco/images/val2014/COCO_val2014_000000407960.jpg -../coco/images/val2014/COCO_val2014_000000408120.jpg -../coco/images/val2014/COCO_val2014_000000408208.jpg -../coco/images/val2014/COCO_val2014_000000408255.jpg -../coco/images/val2014/COCO_val2014_000000408336.jpg -../coco/images/val2014/COCO_val2014_000000408534.jpg -../coco/images/val2014/COCO_val2014_000000408774.jpg -../coco/images/val2014/COCO_val2014_000000408830.jpg -../coco/images/val2014/COCO_val2014_000000408873.jpg -../coco/images/val2014/COCO_val2014_000000409100.jpg -../coco/images/val2014/COCO_val2014_000000409115.jpg -../coco/images/val2014/COCO_val2014_000000409181.jpg -../coco/images/val2014/COCO_val2014_000000409542.jpg -../coco/images/val2014/COCO_val2014_000000409725.jpg -../coco/images/val2014/COCO_val2014_000000409964.jpg -../coco/images/val2014/COCO_val2014_000000410068.jpg -../coco/images/val2014/COCO_val2014_000000410576.jpg -../coco/images/val2014/COCO_val2014_000000410583.jpg -../coco/images/val2014/COCO_val2014_000000410587.jpg -../coco/images/val2014/COCO_val2014_000000410612.jpg -../coco/images/val2014/COCO_val2014_000000410724.jpg -../coco/images/val2014/COCO_val2014_000000411187.jpg -../coco/images/val2014/COCO_val2014_000000411188.jpg -../coco/images/val2014/COCO_val2014_000000411405.jpg -../coco/images/val2014/COCO_val2014_000000411768.jpg -../coco/images/val2014/COCO_val2014_000000411774.jpg -../coco/images/val2014/COCO_val2014_000000411821.jpg -../coco/images/val2014/COCO_val2014_000000412015.jpg -../coco/images/val2014/COCO_val2014_000000412204.jpg -../coco/images/val2014/COCO_val2014_000000412240.jpg -../coco/images/val2014/COCO_val2014_000000412364.jpg -../coco/images/val2014/COCO_val2014_000000412437.jpg -../coco/images/val2014/COCO_val2014_000000412464.jpg -../coco/images/val2014/COCO_val2014_000000412510.jpg -../coco/images/val2014/COCO_val2014_000000412551.jpg -../coco/images/val2014/COCO_val2014_000000412592.jpg -../coco/images/val2014/COCO_val2014_000000412604.jpg -../coco/images/val2014/COCO_val2014_000000412753.jpg -../coco/images/val2014/COCO_val2014_000000413339.jpg -../coco/images/val2014/COCO_val2014_000000413341.jpg -../coco/images/val2014/COCO_val2014_000000413616.jpg -../coco/images/val2014/COCO_val2014_000000413822.jpg -../coco/images/val2014/COCO_val2014_000000413839.jpg -../coco/images/val2014/COCO_val2014_000000413950.jpg -../coco/images/val2014/COCO_val2014_000000413959.jpg -../coco/images/val2014/COCO_val2014_000000414122.jpg -../coco/images/val2014/COCO_val2014_000000414216.jpg -../coco/images/val2014/COCO_val2014_000000414261.jpg -../coco/images/val2014/COCO_val2014_000000414289.jpg -../coco/images/val2014/COCO_val2014_000000414661.jpg -../coco/images/val2014/COCO_val2014_000000414698.jpg -../coco/images/val2014/COCO_val2014_000000414857.jpg -../coco/images/val2014/COCO_val2014_000000415020.jpg -../coco/images/val2014/COCO_val2014_000000415163.jpg -../coco/images/val2014/COCO_val2014_000000415393.jpg -../coco/images/val2014/COCO_val2014_000000415434.jpg -../coco/images/val2014/COCO_val2014_000000415585.jpg -../coco/images/val2014/COCO_val2014_000000415770.jpg -../coco/images/val2014/COCO_val2014_000000415798.jpg -../coco/images/val2014/COCO_val2014_000000415841.jpg -../coco/images/val2014/COCO_val2014_000000415882.jpg -../coco/images/val2014/COCO_val2014_000000415885.jpg -../coco/images/val2014/COCO_val2014_000000415958.jpg -../coco/images/val2014/COCO_val2014_000000416059.jpg -../coco/images/val2014/COCO_val2014_000000416088.jpg -../coco/images/val2014/COCO_val2014_000000416385.jpg -../coco/images/val2014/COCO_val2014_000000416405.jpg -../coco/images/val2014/COCO_val2014_000000416467.jpg -../coco/images/val2014/COCO_val2014_000000416489.jpg -../coco/images/val2014/COCO_val2014_000000416660.jpg -../coco/images/val2014/COCO_val2014_000000416668.jpg -../coco/images/val2014/COCO_val2014_000000416885.jpg -../coco/images/val2014/COCO_val2014_000000417416.jpg -../coco/images/val2014/COCO_val2014_000000417727.jpg -../coco/images/val2014/COCO_val2014_000000417846.jpg -../coco/images/val2014/COCO_val2014_000000417946.jpg -../coco/images/val2014/COCO_val2014_000000417965.jpg -../coco/images/val2014/COCO_val2014_000000418226.jpg -../coco/images/val2014/COCO_val2014_000000418275.jpg -../coco/images/val2014/COCO_val2014_000000418288.jpg -../coco/images/val2014/COCO_val2014_000000418533.jpg -../coco/images/val2014/COCO_val2014_000000418548.jpg -../coco/images/val2014/COCO_val2014_000000418565.jpg -../coco/images/val2014/COCO_val2014_000000418961.jpg -../coco/images/val2014/COCO_val2014_000000419216.jpg -../coco/images/val2014/COCO_val2014_000000419371.jpg -../coco/images/val2014/COCO_val2014_000000419379.jpg -../coco/images/val2014/COCO_val2014_000000419386.jpg -../coco/images/val2014/COCO_val2014_000000419558.jpg -../coco/images/val2014/COCO_val2014_000000419848.jpg -../coco/images/val2014/COCO_val2014_000000420059.jpg -../coco/images/val2014/COCO_val2014_000000420230.jpg -../coco/images/val2014/COCO_val2014_000000420339.jpg -../coco/images/val2014/COCO_val2014_000000420546.jpg -../coco/images/val2014/COCO_val2014_000000420610.jpg -../coco/images/val2014/COCO_val2014_000000420882.jpg -../coco/images/val2014/COCO_val2014_000000420929.jpg -../coco/images/val2014/COCO_val2014_000000421361.jpg -../coco/images/val2014/COCO_val2014_000000421401.jpg -../coco/images/val2014/COCO_val2014_000000421673.jpg -../coco/images/val2014/COCO_val2014_000000422424.jpg -../coco/images/val2014/COCO_val2014_000000422432.jpg -../coco/images/val2014/COCO_val2014_000000422536.jpg -../coco/images/val2014/COCO_val2014_000000422622.jpg -../coco/images/val2014/COCO_val2014_000000422706.jpg -../coco/images/val2014/COCO_val2014_000000422778.jpg -../coco/images/val2014/COCO_val2014_000000422833.jpg -../coco/images/val2014/COCO_val2014_000000422870.jpg -../coco/images/val2014/COCO_val2014_000000423005.jpg -../coco/images/val2014/COCO_val2014_000000423048.jpg -../coco/images/val2014/COCO_val2014_000000423104.jpg -../coco/images/val2014/COCO_val2014_000000423123.jpg -../coco/images/val2014/COCO_val2014_000000423172.jpg -../coco/images/val2014/COCO_val2014_000000423189.jpg -../coco/images/val2014/COCO_val2014_000000423337.jpg -../coco/images/val2014/COCO_val2014_000000423613.jpg -../coco/images/val2014/COCO_val2014_000000423617.jpg -../coco/images/val2014/COCO_val2014_000000423715.jpg -../coco/images/val2014/COCO_val2014_000000423740.jpg -../coco/images/val2014/COCO_val2014_000000424147.jpg -../coco/images/val2014/COCO_val2014_000000424155.jpg -../coco/images/val2014/COCO_val2014_000000424192.jpg -../coco/images/val2014/COCO_val2014_000000424247.jpg -../coco/images/val2014/COCO_val2014_000000424293.jpg -../coco/images/val2014/COCO_val2014_000000424378.jpg -../coco/images/val2014/COCO_val2014_000000424392.jpg -../coco/images/val2014/COCO_val2014_000000424633.jpg -../coco/images/val2014/COCO_val2014_000000424975.jpg -../coco/images/val2014/COCO_val2014_000000425303.jpg -../coco/images/val2014/COCO_val2014_000000425324.jpg -../coco/images/val2014/COCO_val2014_000000425371.jpg -../coco/images/val2014/COCO_val2014_000000425388.jpg -../coco/images/val2014/COCO_val2014_000000425462.jpg -../coco/images/val2014/COCO_val2014_000000425475.jpg -../coco/images/val2014/COCO_val2014_000000425526.jpg -../coco/images/val2014/COCO_val2014_000000425848.jpg -../coco/images/val2014/COCO_val2014_000000425870.jpg -../coco/images/val2014/COCO_val2014_000000425948.jpg -../coco/images/val2014/COCO_val2014_000000425973.jpg -../coco/images/val2014/COCO_val2014_000000426070.jpg -../coco/images/val2014/COCO_val2014_000000426075.jpg -../coco/images/val2014/COCO_val2014_000000426377.jpg -../coco/images/val2014/COCO_val2014_000000426532.jpg -../coco/images/val2014/COCO_val2014_000000426795.jpg -../coco/images/val2014/COCO_val2014_000000426852.jpg -../coco/images/val2014/COCO_val2014_000000426917.jpg -../coco/images/val2014/COCO_val2014_000000427223.jpg -../coco/images/val2014/COCO_val2014_000000427500.jpg -../coco/images/val2014/COCO_val2014_000000427561.jpg -../coco/images/val2014/COCO_val2014_000000427782.jpg -../coco/images/val2014/COCO_val2014_000000427965.jpg -../coco/images/val2014/COCO_val2014_000000428178.jpg -../coco/images/val2014/COCO_val2014_000000428231.jpg -../coco/images/val2014/COCO_val2014_000000428234.jpg -../coco/images/val2014/COCO_val2014_000000428248.jpg -../coco/images/val2014/COCO_val2014_000000428366.jpg -../coco/images/val2014/COCO_val2014_000000428562.jpg -../coco/images/val2014/COCO_val2014_000000428812.jpg -../coco/images/val2014/COCO_val2014_000000428867.jpg -../coco/images/val2014/COCO_val2014_000000429293.jpg -../coco/images/val2014/COCO_val2014_000000429369.jpg -../coco/images/val2014/COCO_val2014_000000429718.jpg -../coco/images/val2014/COCO_val2014_000000429924.jpg -../coco/images/val2014/COCO_val2014_000000429996.jpg -../coco/images/val2014/COCO_val2014_000000430056.jpg -../coco/images/val2014/COCO_val2014_000000430073.jpg -../coco/images/val2014/COCO_val2014_000000430238.jpg -../coco/images/val2014/COCO_val2014_000000430286.jpg -../coco/images/val2014/COCO_val2014_000000430467.jpg -../coco/images/val2014/COCO_val2014_000000430518.jpg -../coco/images/val2014/COCO_val2014_000000430583.jpg -../coco/images/val2014/COCO_val2014_000000430590.jpg -../coco/images/val2014/COCO_val2014_000000430744.jpg -../coco/images/val2014/COCO_val2014_000000430788.jpg -../coco/images/val2014/COCO_val2014_000000430875.jpg -../coco/images/val2014/COCO_val2014_000000430973.jpg -../coco/images/val2014/COCO_val2014_000000431047.jpg -../coco/images/val2014/COCO_val2014_000000431236.jpg -../coco/images/val2014/COCO_val2014_000000431257.jpg -../coco/images/val2014/COCO_val2014_000000431464.jpg -../coco/images/val2014/COCO_val2014_000000431472.jpg -../coco/images/val2014/COCO_val2014_000000431521.jpg -../coco/images/val2014/COCO_val2014_000000431573.jpg -../coco/images/val2014/COCO_val2014_000000431594.jpg -../coco/images/val2014/COCO_val2014_000000431615.jpg -../coco/images/val2014/COCO_val2014_000000431671.jpg -../coco/images/val2014/COCO_val2014_000000431727.jpg -../coco/images/val2014/COCO_val2014_000000431742.jpg -../coco/images/val2014/COCO_val2014_000000432125.jpg -../coco/images/val2014/COCO_val2014_000000432160.jpg -../coco/images/val2014/COCO_val2014_000000432276.jpg -../coco/images/val2014/COCO_val2014_000000432534.jpg -../coco/images/val2014/COCO_val2014_000000432898.jpg -../coco/images/val2014/COCO_val2014_000000433075.jpg -../coco/images/val2014/COCO_val2014_000000433554.jpg -../coco/images/val2014/COCO_val2014_000000433714.jpg -../coco/images/val2014/COCO_val2014_000000433804.jpg -../coco/images/val2014/COCO_val2014_000000433845.jpg -../coco/images/val2014/COCO_val2014_000000433883.jpg -../coco/images/val2014/COCO_val2014_000000433892.jpg -../coco/images/val2014/COCO_val2014_000000433963.jpg -../coco/images/val2014/COCO_val2014_000000433980.jpg -../coco/images/val2014/COCO_val2014_000000434006.jpg -../coco/images/val2014/COCO_val2014_000000434060.jpg -../coco/images/val2014/COCO_val2014_000000434219.jpg -../coco/images/val2014/COCO_val2014_000000434410.jpg -../coco/images/val2014/COCO_val2014_000000434488.jpg -../coco/images/val2014/COCO_val2014_000000434580.jpg -../coco/images/val2014/COCO_val2014_000000434622.jpg -../coco/images/val2014/COCO_val2014_000000434657.jpg -../coco/images/val2014/COCO_val2014_000000434787.jpg -../coco/images/val2014/COCO_val2014_000000434898.jpg -../coco/images/val2014/COCO_val2014_000000434915.jpg -../coco/images/val2014/COCO_val2014_000000435205.jpg -../coco/images/val2014/COCO_val2014_000000435206.jpg -../coco/images/val2014/COCO_val2014_000000435359.jpg -../coco/images/val2014/COCO_val2014_000000435391.jpg -../coco/images/val2014/COCO_val2014_000000435466.jpg -../coco/images/val2014/COCO_val2014_000000435533.jpg -../coco/images/val2014/COCO_val2014_000000435569.jpg -../coco/images/val2014/COCO_val2014_000000435598.jpg -../coco/images/val2014/COCO_val2014_000000435671.jpg -../coco/images/val2014/COCO_val2014_000000435703.jpg -../coco/images/val2014/COCO_val2014_000000435707.jpg -../coco/images/val2014/COCO_val2014_000000435742.jpg -../coco/images/val2014/COCO_val2014_000000435820.jpg -../coco/images/val2014/COCO_val2014_000000435823.jpg -../coco/images/val2014/COCO_val2014_000000435910.jpg -../coco/images/val2014/COCO_val2014_000000436044.jpg -../coco/images/val2014/COCO_val2014_000000436203.jpg -../coco/images/val2014/COCO_val2014_000000436350.jpg -../coco/images/val2014/COCO_val2014_000000436413.jpg -../coco/images/val2014/COCO_val2014_000000436603.jpg -../coco/images/val2014/COCO_val2014_000000436653.jpg -../coco/images/val2014/COCO_val2014_000000436694.jpg -../coco/images/val2014/COCO_val2014_000000436696.jpg -../coco/images/val2014/COCO_val2014_000000436738.jpg -../coco/images/val2014/COCO_val2014_000000437284.jpg -../coco/images/val2014/COCO_val2014_000000437298.jpg -../coco/images/val2014/COCO_val2014_000000437303.jpg -../coco/images/val2014/COCO_val2014_000000437393.jpg -../coco/images/val2014/COCO_val2014_000000437459.jpg -../coco/images/val2014/COCO_val2014_000000437720.jpg -../coco/images/val2014/COCO_val2014_000000437923.jpg -../coco/images/val2014/COCO_val2014_000000438103.jpg -../coco/images/val2014/COCO_val2014_000000438220.jpg -../coco/images/val2014/COCO_val2014_000000438807.jpg -../coco/images/val2014/COCO_val2014_000000438851.jpg -../coco/images/val2014/COCO_val2014_000000438985.jpg -../coco/images/val2014/COCO_val2014_000000438999.jpg -../coco/images/val2014/COCO_val2014_000000439015.jpg -../coco/images/val2014/COCO_val2014_000000439339.jpg -../coco/images/val2014/COCO_val2014_000000439522.jpg -../coco/images/val2014/COCO_val2014_000000439651.jpg -../coco/images/val2014/COCO_val2014_000000439777.jpg -../coco/images/val2014/COCO_val2014_000000440043.jpg -../coco/images/val2014/COCO_val2014_000000440062.jpg -../coco/images/val2014/COCO_val2014_000000440226.jpg -../coco/images/val2014/COCO_val2014_000000440299.jpg -../coco/images/val2014/COCO_val2014_000000440486.jpg -../coco/images/val2014/COCO_val2014_000000440500.jpg -../coco/images/val2014/COCO_val2014_000000440617.jpg -../coco/images/val2014/COCO_val2014_000000440646.jpg -../coco/images/val2014/COCO_val2014_000000440706.jpg -../coco/images/val2014/COCO_val2014_000000440779.jpg -../coco/images/val2014/COCO_val2014_000000441009.jpg -../coco/images/val2014/COCO_val2014_000000441072.jpg -../coco/images/val2014/COCO_val2014_000000441156.jpg -../coco/images/val2014/COCO_val2014_000000441211.jpg -../coco/images/val2014/COCO_val2014_000000441247.jpg -../coco/images/val2014/COCO_val2014_000000441496.jpg -../coco/images/val2014/COCO_val2014_000000441500.jpg -../coco/images/val2014/COCO_val2014_000000441695.jpg -../coco/images/val2014/COCO_val2014_000000441788.jpg -../coco/images/val2014/COCO_val2014_000000441824.jpg -../coco/images/val2014/COCO_val2014_000000441863.jpg -../coco/images/val2014/COCO_val2014_000000441969.jpg -../coco/images/val2014/COCO_val2014_000000441974.jpg -../coco/images/val2014/COCO_val2014_000000442128.jpg -../coco/images/val2014/COCO_val2014_000000442210.jpg -../coco/images/val2014/COCO_val2014_000000442223.jpg -../coco/images/val2014/COCO_val2014_000000442323.jpg -../coco/images/val2014/COCO_val2014_000000442387.jpg -../coco/images/val2014/COCO_val2014_000000442417.jpg -../coco/images/val2014/COCO_val2014_000000442523.jpg -../coco/images/val2014/COCO_val2014_000000442539.jpg -../coco/images/val2014/COCO_val2014_000000442746.jpg -../coco/images/val2014/COCO_val2014_000000442822.jpg -../coco/images/val2014/COCO_val2014_000000442877.jpg -../coco/images/val2014/COCO_val2014_000000442952.jpg -../coco/images/val2014/COCO_val2014_000000443313.jpg -../coco/images/val2014/COCO_val2014_000000443334.jpg -../coco/images/val2014/COCO_val2014_000000443343.jpg -../coco/images/val2014/COCO_val2014_000000443361.jpg -../coco/images/val2014/COCO_val2014_000000443498.jpg -../coco/images/val2014/COCO_val2014_000000443537.jpg -../coco/images/val2014/COCO_val2014_000000443591.jpg -../coco/images/val2014/COCO_val2014_000000443723.jpg -../coco/images/val2014/COCO_val2014_000000443797.jpg -../coco/images/val2014/COCO_val2014_000000443969.jpg -../coco/images/val2014/COCO_val2014_000000444236.jpg -../coco/images/val2014/COCO_val2014_000000444304.jpg -../coco/images/val2014/COCO_val2014_000000444390.jpg -../coco/images/val2014/COCO_val2014_000000444495.jpg -../coco/images/val2014/COCO_val2014_000000444626.jpg -../coco/images/val2014/COCO_val2014_000000444746.jpg -../coco/images/val2014/COCO_val2014_000000444755.jpg -../coco/images/val2014/COCO_val2014_000000444879.jpg -../coco/images/val2014/COCO_val2014_000000444888.jpg -../coco/images/val2014/COCO_val2014_000000445009.jpg -../coco/images/val2014/COCO_val2014_000000445014.jpg -../coco/images/val2014/COCO_val2014_000000445200.jpg -../coco/images/val2014/COCO_val2014_000000445267.jpg -../coco/images/val2014/COCO_val2014_000000445512.jpg -../coco/images/val2014/COCO_val2014_000000445567.jpg -../coco/images/val2014/COCO_val2014_000000445594.jpg -../coco/images/val2014/COCO_val2014_000000445602.jpg -../coco/images/val2014/COCO_val2014_000000445643.jpg -../coco/images/val2014/COCO_val2014_000000446324.jpg -../coco/images/val2014/COCO_val2014_000000446358.jpg -../coco/images/val2014/COCO_val2014_000000446623.jpg -../coco/images/val2014/COCO_val2014_000000446990.jpg -../coco/images/val2014/COCO_val2014_000000447208.jpg -../coco/images/val2014/COCO_val2014_000000447242.jpg -../coco/images/val2014/COCO_val2014_000000447354.jpg -../coco/images/val2014/COCO_val2014_000000447378.jpg -../coco/images/val2014/COCO_val2014_000000447501.jpg -../coco/images/val2014/COCO_val2014_000000447779.jpg -../coco/images/val2014/COCO_val2014_000000448053.jpg -../coco/images/val2014/COCO_val2014_000000448114.jpg -../coco/images/val2014/COCO_val2014_000000448117.jpg -../coco/images/val2014/COCO_val2014_000000448236.jpg -../coco/images/val2014/COCO_val2014_000000448256.jpg -../coco/images/val2014/COCO_val2014_000000448278.jpg -../coco/images/val2014/COCO_val2014_000000448511.jpg -../coco/images/val2014/COCO_val2014_000000448690.jpg -../coco/images/val2014/COCO_val2014_000000448786.jpg -../coco/images/val2014/COCO_val2014_000000448923.jpg -../coco/images/val2014/COCO_val2014_000000448998.jpg -../coco/images/val2014/COCO_val2014_000000449031.jpg -../coco/images/val2014/COCO_val2014_000000449338.jpg -../coco/images/val2014/COCO_val2014_000000449392.jpg -../coco/images/val2014/COCO_val2014_000000449412.jpg -../coco/images/val2014/COCO_val2014_000000449432.jpg -../coco/images/val2014/COCO_val2014_000000449466.jpg -../coco/images/val2014/COCO_val2014_000000449485.jpg -../coco/images/val2014/COCO_val2014_000000449522.jpg -../coco/images/val2014/COCO_val2014_000000449872.jpg -../coco/images/val2014/COCO_val2014_000000449888.jpg -../coco/images/val2014/COCO_val2014_000000449903.jpg -../coco/images/val2014/COCO_val2014_000000449976.jpg -../coco/images/val2014/COCO_val2014_000000449981.jpg -../coco/images/val2014/COCO_val2014_000000450098.jpg -../coco/images/val2014/COCO_val2014_000000450355.jpg -../coco/images/val2014/COCO_val2014_000000450458.jpg -../coco/images/val2014/COCO_val2014_000000450559.jpg -../coco/images/val2014/COCO_val2014_000000450596.jpg -../coco/images/val2014/COCO_val2014_000000450655.jpg -../coco/images/val2014/COCO_val2014_000000450695.jpg -../coco/images/val2014/COCO_val2014_000000451014.jpg -../coco/images/val2014/COCO_val2014_000000451120.jpg -../coco/images/val2014/COCO_val2014_000000451305.jpg -../coco/images/val2014/COCO_val2014_000000451345.jpg -../coco/images/val2014/COCO_val2014_000000451440.jpg -../coco/images/val2014/COCO_val2014_000000451468.jpg -../coco/images/val2014/COCO_val2014_000000451679.jpg -../coco/images/val2014/COCO_val2014_000000451683.jpg -../coco/images/val2014/COCO_val2014_000000452195.jpg -../coco/images/val2014/COCO_val2014_000000452218.jpg -../coco/images/val2014/COCO_val2014_000000452308.jpg -../coco/images/val2014/COCO_val2014_000000452461.jpg -../coco/images/val2014/COCO_val2014_000000452516.jpg -../coco/images/val2014/COCO_val2014_000000452611.jpg -../coco/images/val2014/COCO_val2014_000000452618.jpg -../coco/images/val2014/COCO_val2014_000000452676.jpg -../coco/images/val2014/COCO_val2014_000000452759.jpg -../coco/images/val2014/COCO_val2014_000000452947.jpg -../coco/images/val2014/COCO_val2014_000000453040.jpg -../coco/images/val2014/COCO_val2014_000000453104.jpg -../coco/images/val2014/COCO_val2014_000000453162.jpg -../coco/images/val2014/COCO_val2014_000000453166.jpg -../coco/images/val2014/COCO_val2014_000000453755.jpg -../coco/images/val2014/COCO_val2014_000000453926.jpg -../coco/images/val2014/COCO_val2014_000000454161.jpg -../coco/images/val2014/COCO_val2014_000000454414.jpg -../coco/images/val2014/COCO_val2014_000000454561.jpg -../coco/images/val2014/COCO_val2014_000000454741.jpg -../coco/images/val2014/COCO_val2014_000000454750.jpg -../coco/images/val2014/COCO_val2014_000000455299.jpg -../coco/images/val2014/COCO_val2014_000000455325.jpg -../coco/images/val2014/COCO_val2014_000000455343.jpg -../coco/images/val2014/COCO_val2014_000000455355.jpg -../coco/images/val2014/COCO_val2014_000000455365.jpg -../coco/images/val2014/COCO_val2014_000000455384.jpg -../coco/images/val2014/COCO_val2014_000000455395.jpg -../coco/images/val2014/COCO_val2014_000000455414.jpg -../coco/images/val2014/COCO_val2014_000000455515.jpg -../coco/images/val2014/COCO_val2014_000000455557.jpg -../coco/images/val2014/COCO_val2014_000000455675.jpg -../coco/images/val2014/COCO_val2014_000000455750.jpg -../coco/images/val2014/COCO_val2014_000000455767.jpg -../coco/images/val2014/COCO_val2014_000000456015.jpg -../coco/images/val2014/COCO_val2014_000000456143.jpg -../coco/images/val2014/COCO_val2014_000000456420.jpg -../coco/images/val2014/COCO_val2014_000000456725.jpg -../coco/images/val2014/COCO_val2014_000000457217.jpg -../coco/images/val2014/COCO_val2014_000000457230.jpg -../coco/images/val2014/COCO_val2014_000000457262.jpg -../coco/images/val2014/COCO_val2014_000000457271.jpg -../coco/images/val2014/COCO_val2014_000000457436.jpg -../coco/images/val2014/COCO_val2014_000000457717.jpg -../coco/images/val2014/COCO_val2014_000000457901.jpg -../coco/images/val2014/COCO_val2014_000000458054.jpg -../coco/images/val2014/COCO_val2014_000000458103.jpg -../coco/images/val2014/COCO_val2014_000000458275.jpg -../coco/images/val2014/COCO_val2014_000000458846.jpg -../coco/images/val2014/COCO_val2014_000000458953.jpg -../coco/images/val2014/COCO_val2014_000000459164.jpg -../coco/images/val2014/COCO_val2014_000000459400.jpg -../coco/images/val2014/COCO_val2014_000000459590.jpg -../coco/images/val2014/COCO_val2014_000000459733.jpg -../coco/images/val2014/COCO_val2014_000000459757.jpg -../coco/images/val2014/COCO_val2014_000000459933.jpg -../coco/images/val2014/COCO_val2014_000000460022.jpg -../coco/images/val2014/COCO_val2014_000000460053.jpg -../coco/images/val2014/COCO_val2014_000000460129.jpg -../coco/images/val2014/COCO_val2014_000000460147.jpg -../coco/images/val2014/COCO_val2014_000000460149.jpg -../coco/images/val2014/COCO_val2014_000000460251.jpg -../coco/images/val2014/COCO_val2014_000000460461.jpg -../coco/images/val2014/COCO_val2014_000000460652.jpg -../coco/images/val2014/COCO_val2014_000000460676.jpg -../coco/images/val2014/COCO_val2014_000000460684.jpg -../coco/images/val2014/COCO_val2014_000000460757.jpg -../coco/images/val2014/COCO_val2014_000000460812.jpg -../coco/images/val2014/COCO_val2014_000000460967.jpg -../coco/images/val2014/COCO_val2014_000000461007.jpg -../coco/images/val2014/COCO_val2014_000000461123.jpg -../coco/images/val2014/COCO_val2014_000000461275.jpg -../coco/images/val2014/COCO_val2014_000000461278.jpg -../coco/images/val2014/COCO_val2014_000000461331.jpg -../coco/images/val2014/COCO_val2014_000000461681.jpg -../coco/images/val2014/COCO_val2014_000000461898.jpg -../coco/images/val2014/COCO_val2014_000000461953.jpg -../coco/images/val2014/COCO_val2014_000000461993.jpg -../coco/images/val2014/COCO_val2014_000000462213.jpg -../coco/images/val2014/COCO_val2014_000000462241.jpg -../coco/images/val2014/COCO_val2014_000000462315.jpg -../coco/images/val2014/COCO_val2014_000000462330.jpg -../coco/images/val2014/COCO_val2014_000000462466.jpg -../coco/images/val2014/COCO_val2014_000000462629.jpg -../coco/images/val2014/COCO_val2014_000000462677.jpg -../coco/images/val2014/COCO_val2014_000000462953.jpg -../coco/images/val2014/COCO_val2014_000000462978.jpg -../coco/images/val2014/COCO_val2014_000000462982.jpg -../coco/images/val2014/COCO_val2014_000000463037.jpg -../coco/images/val2014/COCO_val2014_000000463084.jpg -../coco/images/val2014/COCO_val2014_000000463283.jpg -../coco/images/val2014/COCO_val2014_000000463303.jpg -../coco/images/val2014/COCO_val2014_000000463398.jpg -../coco/images/val2014/COCO_val2014_000000463452.jpg -../coco/images/val2014/COCO_val2014_000000463555.jpg -../coco/images/val2014/COCO_val2014_000000463898.jpg -../coco/images/val2014/COCO_val2014_000000463913.jpg -../coco/images/val2014/COCO_val2014_000000464248.jpg -../coco/images/val2014/COCO_val2014_000000464390.jpg -../coco/images/val2014/COCO_val2014_000000465087.jpg -../coco/images/val2014/COCO_val2014_000000465588.jpg -../coco/images/val2014/COCO_val2014_000000465692.jpg -../coco/images/val2014/COCO_val2014_000000465715.jpg -../coco/images/val2014/COCO_val2014_000000465735.jpg -../coco/images/val2014/COCO_val2014_000000465822.jpg -../coco/images/val2014/COCO_val2014_000000465887.jpg -../coco/images/val2014/COCO_val2014_000000465986.jpg -../coco/images/val2014/COCO_val2014_000000466005.jpg -../coco/images/val2014/COCO_val2014_000000466347.jpg -../coco/images/val2014/COCO_val2014_000000466456.jpg -../coco/images/val2014/COCO_val2014_000000466570.jpg -../coco/images/val2014/COCO_val2014_000000466583.jpg -../coco/images/val2014/COCO_val2014_000000467022.jpg -../coco/images/val2014/COCO_val2014_000000467116.jpg -../coco/images/val2014/COCO_val2014_000000467138.jpg -../coco/images/val2014/COCO_val2014_000000467477.jpg -../coco/images/val2014/COCO_val2014_000000467540.jpg -../coco/images/val2014/COCO_val2014_000000467705.jpg -../coco/images/val2014/COCO_val2014_000000467726.jpg -../coco/images/val2014/COCO_val2014_000000467821.jpg -../coco/images/val2014/COCO_val2014_000000467951.jpg -../coco/images/val2014/COCO_val2014_000000467990.jpg -../coco/images/val2014/COCO_val2014_000000468012.jpg -../coco/images/val2014/COCO_val2014_000000468129.jpg -../coco/images/val2014/COCO_val2014_000000468178.jpg -../coco/images/val2014/COCO_val2014_000000468354.jpg -../coco/images/val2014/COCO_val2014_000000468736.jpg -../coco/images/val2014/COCO_val2014_000000468954.jpg -../coco/images/val2014/COCO_val2014_000000469085.jpg -../coco/images/val2014/COCO_val2014_000000469088.jpg -../coco/images/val2014/COCO_val2014_000000469096.jpg -../coco/images/val2014/COCO_val2014_000000469119.jpg -../coco/images/val2014/COCO_val2014_000000469356.jpg -../coco/images/val2014/COCO_val2014_000000469424.jpg -../coco/images/val2014/COCO_val2014_000000469634.jpg -../coco/images/val2014/COCO_val2014_000000469857.jpg -../coco/images/val2014/COCO_val2014_000000469961.jpg -../coco/images/val2014/COCO_val2014_000000469982.jpg -../coco/images/val2014/COCO_val2014_000000470070.jpg -../coco/images/val2014/COCO_val2014_000000470161.jpg -../coco/images/val2014/COCO_val2014_000000470173.jpg -../coco/images/val2014/COCO_val2014_000000470313.jpg -../coco/images/val2014/COCO_val2014_000000470370.jpg -../coco/images/val2014/COCO_val2014_000000470513.jpg -../coco/images/val2014/COCO_val2014_000000470746.jpg -../coco/images/val2014/COCO_val2014_000000471205.jpg -../coco/images/val2014/COCO_val2014_000000471394.jpg -../coco/images/val2014/COCO_val2014_000000471488.jpg -../coco/images/val2014/COCO_val2014_000000471858.jpg -../coco/images/val2014/COCO_val2014_000000471869.jpg -../coco/images/val2014/COCO_val2014_000000471893.jpg -../coco/images/val2014/COCO_val2014_000000472034.jpg -../coco/images/val2014/COCO_val2014_000000472078.jpg -../coco/images/val2014/COCO_val2014_000000472088.jpg -../coco/images/val2014/COCO_val2014_000000472160.jpg -../coco/images/val2014/COCO_val2014_000000472211.jpg -../coco/images/val2014/COCO_val2014_000000472643.jpg -../coco/images/val2014/COCO_val2014_000000472691.jpg -../coco/images/val2014/COCO_val2014_000000472762.jpg -../coco/images/val2014/COCO_val2014_000000472821.jpg -../coco/images/val2014/COCO_val2014_000000473015.jpg -../coco/images/val2014/COCO_val2014_000000473075.jpg -../coco/images/val2014/COCO_val2014_000000473109.jpg -../coco/images/val2014/COCO_val2014_000000473124.jpg -../coco/images/val2014/COCO_val2014_000000473171.jpg -../coco/images/val2014/COCO_val2014_000000473406.jpg -../coco/images/val2014/COCO_val2014_000000473415.jpg -../coco/images/val2014/COCO_val2014_000000473839.jpg -../coco/images/val2014/COCO_val2014_000000474003.jpg -../coco/images/val2014/COCO_val2014_000000474021.jpg -../coco/images/val2014/COCO_val2014_000000474028.jpg -../coco/images/val2014/COCO_val2014_000000474078.jpg -../coco/images/val2014/COCO_val2014_000000474110.jpg -../coco/images/val2014/COCO_val2014_000000474170.jpg -../coco/images/val2014/COCO_val2014_000000474246.jpg -../coco/images/val2014/COCO_val2014_000000474344.jpg -../coco/images/val2014/COCO_val2014_000000474384.jpg -../coco/images/val2014/COCO_val2014_000000474410.jpg -../coco/images/val2014/COCO_val2014_000000474600.jpg -../coco/images/val2014/COCO_val2014_000000474609.jpg -../coco/images/val2014/COCO_val2014_000000474906.jpg -../coco/images/val2014/COCO_val2014_000000475208.jpg -../coco/images/val2014/COCO_val2014_000000475229.jpg -../coco/images/val2014/COCO_val2014_000000475244.jpg -../coco/images/val2014/COCO_val2014_000000475398.jpg -../coco/images/val2014/COCO_val2014_000000475413.jpg -../coco/images/val2014/COCO_val2014_000000475572.jpg -../coco/images/val2014/COCO_val2014_000000475586.jpg -../coco/images/val2014/COCO_val2014_000000475879.jpg -../coco/images/val2014/COCO_val2014_000000475906.jpg -../coco/images/val2014/COCO_val2014_000000475944.jpg -../coco/images/val2014/COCO_val2014_000000476120.jpg -../coco/images/val2014/COCO_val2014_000000476172.jpg -../coco/images/val2014/COCO_val2014_000000476282.jpg -../coco/images/val2014/COCO_val2014_000000476300.jpg -../coco/images/val2014/COCO_val2014_000000476335.jpg -../coco/images/val2014/COCO_val2014_000000476339.jpg -../coco/images/val2014/COCO_val2014_000000476398.jpg -../coco/images/val2014/COCO_val2014_000000476455.jpg -../coco/images/val2014/COCO_val2014_000000476491.jpg -../coco/images/val2014/COCO_val2014_000000476647.jpg -../coco/images/val2014/COCO_val2014_000000476704.jpg -../coco/images/val2014/COCO_val2014_000000476856.jpg -../coco/images/val2014/COCO_val2014_000000476873.jpg -../coco/images/val2014/COCO_val2014_000000476925.jpg -../coco/images/val2014/COCO_val2014_000000477172.jpg -../coco/images/val2014/COCO_val2014_000000477305.jpg -../coco/images/val2014/COCO_val2014_000000477477.jpg -../coco/images/val2014/COCO_val2014_000000477623.jpg -../coco/images/val2014/COCO_val2014_000000477805.jpg -../coco/images/val2014/COCO_val2014_000000478120.jpg -../coco/images/val2014/COCO_val2014_000000478136.jpg -../coco/images/val2014/COCO_val2014_000000478184.jpg -../coco/images/val2014/COCO_val2014_000000478433.jpg -../coco/images/val2014/COCO_val2014_000000478490.jpg -../coco/images/val2014/COCO_val2014_000000478522.jpg -../coco/images/val2014/COCO_val2014_000000478621.jpg -../coco/images/val2014/COCO_val2014_000000478664.jpg -../coco/images/val2014/COCO_val2014_000000478874.jpg -../coco/images/val2014/COCO_val2014_000000479008.jpg -../coco/images/val2014/COCO_val2014_000000479078.jpg -../coco/images/val2014/COCO_val2014_000000479099.jpg -../coco/images/val2014/COCO_val2014_000000479334.jpg -../coco/images/val2014/COCO_val2014_000000479557.jpg -../coco/images/val2014/COCO_val2014_000000479597.jpg -../coco/images/val2014/COCO_val2014_000000479912.jpg -../coco/images/val2014/COCO_val2014_000000479938.jpg -../coco/images/val2014/COCO_val2014_000000479948.jpg -../coco/images/val2014/COCO_val2014_000000480075.jpg -../coco/images/val2014/COCO_val2014_000000480215.jpg -../coco/images/val2014/COCO_val2014_000000480345.jpg -../coco/images/val2014/COCO_val2014_000000480379.jpg -../coco/images/val2014/COCO_val2014_000000480472.jpg -../coco/images/val2014/COCO_val2014_000000480726.jpg -../coco/images/val2014/COCO_val2014_000000481327.jpg -../coco/images/val2014/COCO_val2014_000000481398.jpg -../coco/images/val2014/COCO_val2014_000000481404.jpg -../coco/images/val2014/COCO_val2014_000000481446.jpg -../coco/images/val2014/COCO_val2014_000000481890.jpg -../coco/images/val2014/COCO_val2014_000000482007.jpg -../coco/images/val2014/COCO_val2014_000000482021.jpg -../coco/images/val2014/COCO_val2014_000000482476.jpg -../coco/images/val2014/COCO_val2014_000000482477.jpg -../coco/images/val2014/COCO_val2014_000000482487.jpg -../coco/images/val2014/COCO_val2014_000000482605.jpg -../coco/images/val2014/COCO_val2014_000000482667.jpg -../coco/images/val2014/COCO_val2014_000000482707.jpg -../coco/images/val2014/COCO_val2014_000000482735.jpg -../coco/images/val2014/COCO_val2014_000000482774.jpg -../coco/images/val2014/COCO_val2014_000000482799.jpg -../coco/images/val2014/COCO_val2014_000000482951.jpg -../coco/images/val2014/COCO_val2014_000000483179.jpg -../coco/images/val2014/COCO_val2014_000000483389.jpg -../coco/images/val2014/COCO_val2014_000000483531.jpg -../coco/images/val2014/COCO_val2014_000000483564.jpg -../coco/images/val2014/COCO_val2014_000000483587.jpg -../coco/images/val2014/COCO_val2014_000000483849.jpg -../coco/images/val2014/COCO_val2014_000000483994.jpg -../coco/images/val2014/COCO_val2014_000000484066.jpg -../coco/images/val2014/COCO_val2014_000000484215.jpg -../coco/images/val2014/COCO_val2014_000000484225.jpg -../coco/images/val2014/COCO_val2014_000000484321.jpg -../coco/images/val2014/COCO_val2014_000000484397.jpg -../coco/images/val2014/COCO_val2014_000000484531.jpg -../coco/images/val2014/COCO_val2014_000000484674.jpg -../coco/images/val2014/COCO_val2014_000000484978.jpg -../coco/images/val2014/COCO_val2014_000000485139.jpg -../coco/images/val2014/COCO_val2014_000000485483.jpg -../coco/images/val2014/COCO_val2014_000000485485.jpg -../coco/images/val2014/COCO_val2014_000000485673.jpg -../coco/images/val2014/COCO_val2014_000000485740.jpg -../coco/images/val2014/COCO_val2014_000000486112.jpg -../coco/images/val2014/COCO_val2014_000000486175.jpg -../coco/images/val2014/COCO_val2014_000000486232.jpg -../coco/images/val2014/COCO_val2014_000000486568.jpg -../coco/images/val2014/COCO_val2014_000000486576.jpg -../coco/images/val2014/COCO_val2014_000000486580.jpg -../coco/images/val2014/COCO_val2014_000000486632.jpg -../coco/images/val2014/COCO_val2014_000000486788.jpg -../coco/images/val2014/COCO_val2014_000000486803.jpg -../coco/images/val2014/COCO_val2014_000000486991.jpg -../coco/images/val2014/COCO_val2014_000000487222.jpg -../coco/images/val2014/COCO_val2014_000000487282.jpg -../coco/images/val2014/COCO_val2014_000000487391.jpg -../coco/images/val2014/COCO_val2014_000000487630.jpg -../coco/images/val2014/COCO_val2014_000000487659.jpg -../coco/images/val2014/COCO_val2014_000000487698.jpg -../coco/images/val2014/COCO_val2014_000000487702.jpg -../coco/images/val2014/COCO_val2014_000000487720.jpg -../coco/images/val2014/COCO_val2014_000000488075.jpg -../coco/images/val2014/COCO_val2014_000000488250.jpg -../coco/images/val2014/COCO_val2014_000000488360.jpg -../coco/images/val2014/COCO_val2014_000000488385.jpg -../coco/images/val2014/COCO_val2014_000000488386.jpg -../coco/images/val2014/COCO_val2014_000000488522.jpg -../coco/images/val2014/COCO_val2014_000000488664.jpg -../coco/images/val2014/COCO_val2014_000000488723.jpg -../coco/images/val2014/COCO_val2014_000000488736.jpg -../coco/images/val2014/COCO_val2014_000000488979.jpg -../coco/images/val2014/COCO_val2014_000000489019.jpg -../coco/images/val2014/COCO_val2014_000000489235.jpg -../coco/images/val2014/COCO_val2014_000000489266.jpg -../coco/images/val2014/COCO_val2014_000000489304.jpg -../coco/images/val2014/COCO_val2014_000000489344.jpg -../coco/images/val2014/COCO_val2014_000000489475.jpg -../coco/images/val2014/COCO_val2014_000000489764.jpg -../coco/images/val2014/COCO_val2014_000000489940.jpg -../coco/images/val2014/COCO_val2014_000000490022.jpg -../coco/images/val2014/COCO_val2014_000000490051.jpg -../coco/images/val2014/COCO_val2014_000000490105.jpg -../coco/images/val2014/COCO_val2014_000000490171.jpg -../coco/images/val2014/COCO_val2014_000000490286.jpg -../coco/images/val2014/COCO_val2014_000000490306.jpg -../coco/images/val2014/COCO_val2014_000000490338.jpg -../coco/images/val2014/COCO_val2014_000000490491.jpg -../coco/images/val2014/COCO_val2014_000000490505.jpg -../coco/images/val2014/COCO_val2014_000000490702.jpg -../coco/images/val2014/COCO_val2014_000000490860.jpg -../coco/images/val2014/COCO_val2014_000000490952.jpg -../coco/images/val2014/COCO_val2014_000000491169.jpg -../coco/images/val2014/COCO_val2014_000000491336.jpg -../coco/images/val2014/COCO_val2014_000000491377.jpg -../coco/images/val2014/COCO_val2014_000000491408.jpg -../coco/images/val2014/COCO_val2014_000000491449.jpg -../coco/images/val2014/COCO_val2014_000000491481.jpg -../coco/images/val2014/COCO_val2014_000000491835.jpg -../coco/images/val2014/COCO_val2014_000000491836.jpg -../coco/images/val2014/COCO_val2014_000000491965.jpg -../coco/images/val2014/COCO_val2014_000000491985.jpg -../coco/images/val2014/COCO_val2014_000000492246.jpg -../coco/images/val2014/COCO_val2014_000000492323.jpg -../coco/images/val2014/COCO_val2014_000000492363.jpg -../coco/images/val2014/COCO_val2014_000000492407.jpg -../coco/images/val2014/COCO_val2014_000000492524.jpg -../coco/images/val2014/COCO_val2014_000000492605.jpg -../coco/images/val2014/COCO_val2014_000000492785.jpg -../coco/images/val2014/COCO_val2014_000000492805.jpg -../coco/images/val2014/COCO_val2014_000000493132.jpg -../coco/images/val2014/COCO_val2014_000000493196.jpg -../coco/images/val2014/COCO_val2014_000000493206.jpg -../coco/images/val2014/COCO_val2014_000000493273.jpg -../coco/images/val2014/COCO_val2014_000000493279.jpg -../coco/images/val2014/COCO_val2014_000000493509.jpg -../coco/images/val2014/COCO_val2014_000000493772.jpg -../coco/images/val2014/COCO_val2014_000000493799.jpg -../coco/images/val2014/COCO_val2014_000000493814.jpg -../coco/images/val2014/COCO_val2014_000000494085.jpg -../coco/images/val2014/COCO_val2014_000000494144.jpg -../coco/images/val2014/COCO_val2014_000000494320.jpg -../coco/images/val2014/COCO_val2014_000000494438.jpg -../coco/images/val2014/COCO_val2014_000000494578.jpg -../coco/images/val2014/COCO_val2014_000000494620.jpg -../coco/images/val2014/COCO_val2014_000000494731.jpg -../coco/images/val2014/COCO_val2014_000000494869.jpg -../coco/images/val2014/COCO_val2014_000000495090.jpg -../coco/images/val2014/COCO_val2014_000000495125.jpg -../coco/images/val2014/COCO_val2014_000000495491.jpg -../coco/images/val2014/COCO_val2014_000000495519.jpg -../coco/images/val2014/COCO_val2014_000000495734.jpg -../coco/images/val2014/COCO_val2014_000000495852.jpg -../coco/images/val2014/COCO_val2014_000000496152.jpg -../coco/images/val2014/COCO_val2014_000000496267.jpg -../coco/images/val2014/COCO_val2014_000000496324.jpg -../coco/images/val2014/COCO_val2014_000000496360.jpg -../coco/images/val2014/COCO_val2014_000000496379.jpg -../coco/images/val2014/COCO_val2014_000000496409.jpg -../coco/images/val2014/COCO_val2014_000000496450.jpg -../coco/images/val2014/COCO_val2014_000000496554.jpg -../coco/images/val2014/COCO_val2014_000000496687.jpg -../coco/images/val2014/COCO_val2014_000000497099.jpg -../coco/images/val2014/COCO_val2014_000000497312.jpg -../coco/images/val2014/COCO_val2014_000000497348.jpg -../coco/images/val2014/COCO_val2014_000000497351.jpg -../coco/images/val2014/COCO_val2014_000000497443.jpg -../coco/images/val2014/COCO_val2014_000000497488.jpg -../coco/images/val2014/COCO_val2014_000000497907.jpg -../coco/images/val2014/COCO_val2014_000000497928.jpg -../coco/images/val2014/COCO_val2014_000000498274.jpg -../coco/images/val2014/COCO_val2014_000000498346.jpg -../coco/images/val2014/COCO_val2014_000000498392.jpg -../coco/images/val2014/COCO_val2014_000000498650.jpg -../coco/images/val2014/COCO_val2014_000000498709.jpg -../coco/images/val2014/COCO_val2014_000000498765.jpg -../coco/images/val2014/COCO_val2014_000000498802.jpg -../coco/images/val2014/COCO_val2014_000000498807.jpg -../coco/images/val2014/COCO_val2014_000000499093.jpg -../coco/images/val2014/COCO_val2014_000000499105.jpg -../coco/images/val2014/COCO_val2014_000000499255.jpg -../coco/images/val2014/COCO_val2014_000000499313.jpg -../coco/images/val2014/COCO_val2014_000000499391.jpg -../coco/images/val2014/COCO_val2014_000000499393.jpg -../coco/images/val2014/COCO_val2014_000000499537.jpg -../coco/images/val2014/COCO_val2014_000000499755.jpg -../coco/images/val2014/COCO_val2014_000000499802.jpg -../coco/images/val2014/COCO_val2014_000000499810.jpg -../coco/images/val2014/COCO_val2014_000000500062.jpg -../coco/images/val2014/COCO_val2014_000000500139.jpg -../coco/images/val2014/COCO_val2014_000000500175.jpg -../coco/images/val2014/COCO_val2014_000000500464.jpg -../coco/images/val2014/COCO_val2014_000000500514.jpg -../coco/images/val2014/COCO_val2014_000000500723.jpg -../coco/images/val2014/COCO_val2014_000000500829.jpg -../coco/images/val2014/COCO_val2014_000000500878.jpg -../coco/images/val2014/COCO_val2014_000000500965.jpg -../coco/images/val2014/COCO_val2014_000000501116.jpg -../coco/images/val2014/COCO_val2014_000000501122.jpg -../coco/images/val2014/COCO_val2014_000000501229.jpg -../coco/images/val2014/COCO_val2014_000000501242.jpg -../coco/images/val2014/COCO_val2014_000000501527.jpg -../coco/images/val2014/COCO_val2014_000000501790.jpg -../coco/images/val2014/COCO_val2014_000000501824.jpg -../coco/images/val2014/COCO_val2014_000000501835.jpg -../coco/images/val2014/COCO_val2014_000000502168.jpg -../coco/images/val2014/COCO_val2014_000000502336.jpg -../coco/images/val2014/COCO_val2014_000000502854.jpg -../coco/images/val2014/COCO_val2014_000000502895.jpg -../coco/images/val2014/COCO_val2014_000000502910.jpg -../coco/images/val2014/COCO_val2014_000000503097.jpg -../coco/images/val2014/COCO_val2014_000000503202.jpg -../coco/images/val2014/COCO_val2014_000000503207.jpg -../coco/images/val2014/COCO_val2014_000000503233.jpg -../coco/images/val2014/COCO_val2014_000000503467.jpg -../coco/images/val2014/COCO_val2014_000000503522.jpg -../coco/images/val2014/COCO_val2014_000000503772.jpg -../coco/images/val2014/COCO_val2014_000000503823.jpg -../coco/images/val2014/COCO_val2014_000000503826.jpg -../coco/images/val2014/COCO_val2014_000000503951.jpg -../coco/images/val2014/COCO_val2014_000000503972.jpg -../coco/images/val2014/COCO_val2014_000000503983.jpg -../coco/images/val2014/COCO_val2014_000000504074.jpg -../coco/images/val2014/COCO_val2014_000000504152.jpg -../coco/images/val2014/COCO_val2014_000000504341.jpg -../coco/images/val2014/COCO_val2014_000000504353.jpg -../coco/images/val2014/COCO_val2014_000000504452.jpg -../coco/images/val2014/COCO_val2014_000000504559.jpg -../coco/images/val2014/COCO_val2014_000000504711.jpg -../coco/images/val2014/COCO_val2014_000000504733.jpg -../coco/images/val2014/COCO_val2014_000000504790.jpg -../coco/images/val2014/COCO_val2014_000000505014.jpg -../coco/images/val2014/COCO_val2014_000000505040.jpg -../coco/images/val2014/COCO_val2014_000000505043.jpg -../coco/images/val2014/COCO_val2014_000000505132.jpg -../coco/images/val2014/COCO_val2014_000000505344.jpg -../coco/images/val2014/COCO_val2014_000000505516.jpg -../coco/images/val2014/COCO_val2014_000000505528.jpg -../coco/images/val2014/COCO_val2014_000000505650.jpg -../coco/images/val2014/COCO_val2014_000000505733.jpg -../coco/images/val2014/COCO_val2014_000000505739.jpg -../coco/images/val2014/COCO_val2014_000000505754.jpg -../coco/images/val2014/COCO_val2014_000000505792.jpg -../coco/images/val2014/COCO_val2014_000000505814.jpg -../coco/images/val2014/COCO_val2014_000000505862.jpg -../coco/images/val2014/COCO_val2014_000000505945.jpg -../coco/images/val2014/COCO_val2014_000000505967.jpg -../coco/images/val2014/COCO_val2014_000000506335.jpg -../coco/images/val2014/COCO_val2014_000000506357.jpg -../coco/images/val2014/COCO_val2014_000000506449.jpg -../coco/images/val2014/COCO_val2014_000000506515.jpg -../coco/images/val2014/COCO_val2014_000000506569.jpg -../coco/images/val2014/COCO_val2014_000000506587.jpg -../coco/images/val2014/COCO_val2014_000000506707.jpg -../coco/images/val2014/COCO_val2014_000000506736.jpg -../coco/images/val2014/COCO_val2014_000000507037.jpg -../coco/images/val2014/COCO_val2014_000000507180.jpg -../coco/images/val2014/COCO_val2014_000000507668.jpg -../coco/images/val2014/COCO_val2014_000000507684.jpg -../coco/images/val2014/COCO_val2014_000000507783.jpg -../coco/images/val2014/COCO_val2014_000000507927.jpg -../coco/images/val2014/COCO_val2014_000000507935.jpg -../coco/images/val2014/COCO_val2014_000000508119.jpg -../coco/images/val2014/COCO_val2014_000000508230.jpg -../coco/images/val2014/COCO_val2014_000000508443.jpg -../coco/images/val2014/COCO_val2014_000000508586.jpg -../coco/images/val2014/COCO_val2014_000000508811.jpg -../coco/images/val2014/COCO_val2014_000000508822.jpg -../coco/images/val2014/COCO_val2014_000000508985.jpg -../coco/images/val2014/COCO_val2014_000000509185.jpg -../coco/images/val2014/COCO_val2014_000000509258.jpg -../coco/images/val2014/COCO_val2014_000000509379.jpg -../coco/images/val2014/COCO_val2014_000000509388.jpg -../coco/images/val2014/COCO_val2014_000000509423.jpg -../coco/images/val2014/COCO_val2014_000000509526.jpg -../coco/images/val2014/COCO_val2014_000000509577.jpg -../coco/images/val2014/COCO_val2014_000000509695.jpg -../coco/images/val2014/COCO_val2014_000000509855.jpg -../coco/images/val2014/COCO_val2014_000000510343.jpg -../coco/images/val2014/COCO_val2014_000000510593.jpg -../coco/images/val2014/COCO_val2014_000000510707.jpg -../coco/images/val2014/COCO_val2014_000000510791.jpg -../coco/images/val2014/COCO_val2014_000000510798.jpg -../coco/images/val2014/COCO_val2014_000000510864.jpg -../coco/images/val2014/COCO_val2014_000000510942.jpg -../coco/images/val2014/COCO_val2014_000000511076.jpg -../coco/images/val2014/COCO_val2014_000000511236.jpg -../coco/images/val2014/COCO_val2014_000000511403.jpg -../coco/images/val2014/COCO_val2014_000000512070.jpg -../coco/images/val2014/COCO_val2014_000000512112.jpg -../coco/images/val2014/COCO_val2014_000000512145.jpg -../coco/images/val2014/COCO_val2014_000000512248.jpg -../coco/images/val2014/COCO_val2014_000000512254.jpg -../coco/images/val2014/COCO_val2014_000000512307.jpg -../coco/images/val2014/COCO_val2014_000000512337.jpg -../coco/images/val2014/COCO_val2014_000000512463.jpg -../coco/images/val2014/COCO_val2014_000000512479.jpg -../coco/images/val2014/COCO_val2014_000000512630.jpg -../coco/images/val2014/COCO_val2014_000000512722.jpg -../coco/images/val2014/COCO_val2014_000000512776.jpg -../coco/images/val2014/COCO_val2014_000000512911.jpg -../coco/images/val2014/COCO_val2014_000000512912.jpg -../coco/images/val2014/COCO_val2014_000000513073.jpg -../coco/images/val2014/COCO_val2014_000000513129.jpg -../coco/images/val2014/COCO_val2014_000000513342.jpg -../coco/images/val2014/COCO_val2014_000000513497.jpg -../coco/images/val2014/COCO_val2014_000000513507.jpg -../coco/images/val2014/COCO_val2014_000000513585.jpg -../coco/images/val2014/COCO_val2014_000000513681.jpg -../coco/images/val2014/COCO_val2014_000000514180.jpg -../coco/images/val2014/COCO_val2014_000000514241.jpg -../coco/images/val2014/COCO_val2014_000000514525.jpg -../coco/images/val2014/COCO_val2014_000000514540.jpg -../coco/images/val2014/COCO_val2014_000000514586.jpg -../coco/images/val2014/COCO_val2014_000000514682.jpg -../coco/images/val2014/COCO_val2014_000000514913.jpg -../coco/images/val2014/COCO_val2014_000000514990.jpg -../coco/images/val2014/COCO_val2014_000000515077.jpg -../coco/images/val2014/COCO_val2014_000000515176.jpg -../coco/images/val2014/COCO_val2014_000000515226.jpg -../coco/images/val2014/COCO_val2014_000000515289.jpg -../coco/images/val2014/COCO_val2014_000000515350.jpg -../coco/images/val2014/COCO_val2014_000000515485.jpg -../coco/images/val2014/COCO_val2014_000000515531.jpg -../coco/images/val2014/COCO_val2014_000000515727.jpg -../coco/images/val2014/COCO_val2014_000000515760.jpg -../coco/images/val2014/COCO_val2014_000000515777.jpg -../coco/images/val2014/COCO_val2014_000000515779.jpg -../coco/images/val2014/COCO_val2014_000000515904.jpg -../coco/images/val2014/COCO_val2014_000000515993.jpg -../coco/images/val2014/COCO_val2014_000000516026.jpg -../coco/images/val2014/COCO_val2014_000000516316.jpg -../coco/images/val2014/COCO_val2014_000000516318.jpg -../coco/images/val2014/COCO_val2014_000000516476.jpg -../coco/images/val2014/COCO_val2014_000000516775.jpg -../coco/images/val2014/COCO_val2014_000000516804.jpg -../coco/images/val2014/COCO_val2014_000000516805.jpg -../coco/images/val2014/COCO_val2014_000000516867.jpg -../coco/images/val2014/COCO_val2014_000000516893.jpg -../coco/images/val2014/COCO_val2014_000000516913.jpg -../coco/images/val2014/COCO_val2014_000000516916.jpg -../coco/images/val2014/COCO_val2014_000000517318.jpg -../coco/images/val2014/COCO_val2014_000000517443.jpg -../coco/images/val2014/COCO_val2014_000000517596.jpg -../coco/images/val2014/COCO_val2014_000000517619.jpg -../coco/images/val2014/COCO_val2014_000000517737.jpg -../coco/images/val2014/COCO_val2014_000000517821.jpg -../coco/images/val2014/COCO_val2014_000000517987.jpg -../coco/images/val2014/COCO_val2014_000000518039.jpg -../coco/images/val2014/COCO_val2014_000000518109.jpg -../coco/images/val2014/COCO_val2014_000000518213.jpg -../coco/images/val2014/COCO_val2014_000000518234.jpg -../coco/images/val2014/COCO_val2014_000000518324.jpg -../coco/images/val2014/COCO_val2014_000000518365.jpg -../coco/images/val2014/COCO_val2014_000000518584.jpg -../coco/images/val2014/COCO_val2014_000000518716.jpg -../coco/images/val2014/COCO_val2014_000000518729.jpg -../coco/images/val2014/COCO_val2014_000000518818.jpg -../coco/images/val2014/COCO_val2014_000000518850.jpg -../coco/images/val2014/COCO_val2014_000000518914.jpg -../coco/images/val2014/COCO_val2014_000000518968.jpg -../coco/images/val2014/COCO_val2014_000000519055.jpg -../coco/images/val2014/COCO_val2014_000000519271.jpg -../coco/images/val2014/COCO_val2014_000000519316.jpg -../coco/images/val2014/COCO_val2014_000000519387.jpg -../coco/images/val2014/COCO_val2014_000000519542.jpg -../coco/images/val2014/COCO_val2014_000000519565.jpg -../coco/images/val2014/COCO_val2014_000000519611.jpg -../coco/images/val2014/COCO_val2014_000000519649.jpg -../coco/images/val2014/COCO_val2014_000000519874.jpg -../coco/images/val2014/COCO_val2014_000000520009.jpg -../coco/images/val2014/COCO_val2014_000000520109.jpg -../coco/images/val2014/COCO_val2014_000000520147.jpg -../coco/images/val2014/COCO_val2014_000000520338.jpg -../coco/images/val2014/COCO_val2014_000000520524.jpg -../coco/images/val2014/COCO_val2014_000000521142.jpg -../coco/images/val2014/COCO_val2014_000000521259.jpg -../coco/images/val2014/COCO_val2014_000000521359.jpg -../coco/images/val2014/COCO_val2014_000000521540.jpg -../coco/images/val2014/COCO_val2014_000000521613.jpg -../coco/images/val2014/COCO_val2014_000000521634.jpg -../coco/images/val2014/COCO_val2014_000000521669.jpg -../coco/images/val2014/COCO_val2014_000000521689.jpg -../coco/images/val2014/COCO_val2014_000000521943.jpg -../coco/images/val2014/COCO_val2014_000000522163.jpg -../coco/images/val2014/COCO_val2014_000000522613.jpg -../coco/images/val2014/COCO_val2014_000000522622.jpg -../coco/images/val2014/COCO_val2014_000000522702.jpg -../coco/images/val2014/COCO_val2014_000000522791.jpg -../coco/images/val2014/COCO_val2014_000000522940.jpg -../coco/images/val2014/COCO_val2014_000000523100.jpg -../coco/images/val2014/COCO_val2014_000000523137.jpg -../coco/images/val2014/COCO_val2014_000000523230.jpg -../coco/images/val2014/COCO_val2014_000000523517.jpg -../coco/images/val2014/COCO_val2014_000000524002.jpg -../coco/images/val2014/COCO_val2014_000000524064.jpg -../coco/images/val2014/COCO_val2014_000000524173.jpg -../coco/images/val2014/COCO_val2014_000000524263.jpg -../coco/images/val2014/COCO_val2014_000000524333.jpg -../coco/images/val2014/COCO_val2014_000000524533.jpg -../coco/images/val2014/COCO_val2014_000000524536.jpg -../coco/images/val2014/COCO_val2014_000000524656.jpg -../coco/images/val2014/COCO_val2014_000000524742.jpg -../coco/images/val2014/COCO_val2014_000000524799.jpg -../coco/images/val2014/COCO_val2014_000000524992.jpg -../coco/images/val2014/COCO_val2014_000000525021.jpg -../coco/images/val2014/COCO_val2014_000000525087.jpg -../coco/images/val2014/COCO_val2014_000000525118.jpg -../coco/images/val2014/COCO_val2014_000000525170.jpg -../coco/images/val2014/COCO_val2014_000000525373.jpg -../coco/images/val2014/COCO_val2014_000000525667.jpg -../coco/images/val2014/COCO_val2014_000000525849.jpg -../coco/images/val2014/COCO_val2014_000000525927.jpg -../coco/images/val2014/COCO_val2014_000000525971.jpg -../coco/images/val2014/COCO_val2014_000000526040.jpg -../coco/images/val2014/COCO_val2014_000000526089.jpg -../coco/images/val2014/COCO_val2014_000000526341.jpg -../coco/images/val2014/COCO_val2014_000000526342.jpg -../coco/images/val2014/COCO_val2014_000000526371.jpg -../coco/images/val2014/COCO_val2014_000000526418.jpg -../coco/images/val2014/COCO_val2014_000000526560.jpg -../coco/images/val2014/COCO_val2014_000000527407.jpg -../coco/images/val2014/COCO_val2014_000000527447.jpg -../coco/images/val2014/COCO_val2014_000000527535.jpg -../coco/images/val2014/COCO_val2014_000000527558.jpg -../coco/images/val2014/COCO_val2014_000000527573.jpg -../coco/images/val2014/COCO_val2014_000000527644.jpg -../coco/images/val2014/COCO_val2014_000000527704.jpg -../coco/images/val2014/COCO_val2014_000000527750.jpg -../coco/images/val2014/COCO_val2014_000000527961.jpg -../coco/images/val2014/COCO_val2014_000000528314.jpg -../coco/images/val2014/COCO_val2014_000000528386.jpg -../coco/images/val2014/COCO_val2014_000000528411.jpg -../coco/images/val2014/COCO_val2014_000000528643.jpg -../coco/images/val2014/COCO_val2014_000000528738.jpg -../coco/images/val2014/COCO_val2014_000000528980.jpg -../coco/images/val2014/COCO_val2014_000000529004.jpg -../coco/images/val2014/COCO_val2014_000000529065.jpg -../coco/images/val2014/COCO_val2014_000000529215.jpg -../coco/images/val2014/COCO_val2014_000000529235.jpg -../coco/images/val2014/COCO_val2014_000000529270.jpg -../coco/images/val2014/COCO_val2014_000000529455.jpg -../coco/images/val2014/COCO_val2014_000000529494.jpg -../coco/images/val2014/COCO_val2014_000000529597.jpg -../coco/images/val2014/COCO_val2014_000000529668.jpg -../coco/images/val2014/COCO_val2014_000000529907.jpg -../coco/images/val2014/COCO_val2014_000000529944.jpg -../coco/images/val2014/COCO_val2014_000000530013.jpg -../coco/images/val2014/COCO_val2014_000000530052.jpg -../coco/images/val2014/COCO_val2014_000000530220.jpg -../coco/images/val2014/COCO_val2014_000000530461.jpg -../coco/images/val2014/COCO_val2014_000000530620.jpg -../coco/images/val2014/COCO_val2014_000000530624.jpg -../coco/images/val2014/COCO_val2014_000000530630.jpg -../coco/images/val2014/COCO_val2014_000000530854.jpg -../coco/images/val2014/COCO_val2014_000000531000.jpg -../coco/images/val2014/COCO_val2014_000000531111.jpg -../coco/images/val2014/COCO_val2014_000000531189.jpg -../coco/images/val2014/COCO_val2014_000000531563.jpg -../coco/images/val2014/COCO_val2014_000000531569.jpg -../coco/images/val2014/COCO_val2014_000000532009.jpg -../coco/images/val2014/COCO_val2014_000000532085.jpg -../coco/images/val2014/COCO_val2014_000000532126.jpg -../coco/images/val2014/COCO_val2014_000000532129.jpg -../coco/images/val2014/COCO_val2014_000000532159.jpg -../coco/images/val2014/COCO_val2014_000000532212.jpg -../coco/images/val2014/COCO_val2014_000000532690.jpg -../coco/images/val2014/COCO_val2014_000000532695.jpg -../coco/images/val2014/COCO_val2014_000000532773.jpg -../coco/images/val2014/COCO_val2014_000000532827.jpg -../coco/images/val2014/COCO_val2014_000000532867.jpg -../coco/images/val2014/COCO_val2014_000000533097.jpg -../coco/images/val2014/COCO_val2014_000000533261.jpg -../coco/images/val2014/COCO_val2014_000000533434.jpg -../coco/images/val2014/COCO_val2014_000000533511.jpg -../coco/images/val2014/COCO_val2014_000000533517.jpg -../coco/images/val2014/COCO_val2014_000000533532.jpg -../coco/images/val2014/COCO_val2014_000000533688.jpg -../coco/images/val2014/COCO_val2014_000000533816.jpg -../coco/images/val2014/COCO_val2014_000000534018.jpg -../coco/images/val2014/COCO_val2014_000000534349.jpg -../coco/images/val2014/COCO_val2014_000000534377.jpg -../coco/images/val2014/COCO_val2014_000000534601.jpg -../coco/images/val2014/COCO_val2014_000000534639.jpg -../coco/images/val2014/COCO_val2014_000000534679.jpg -../coco/images/val2014/COCO_val2014_000000534988.jpg -../coco/images/val2014/COCO_val2014_000000535156.jpg -../coco/images/val2014/COCO_val2014_000000535198.jpg -../coco/images/val2014/COCO_val2014_000000535226.jpg -../coco/images/val2014/COCO_val2014_000000535242.jpg -../coco/images/val2014/COCO_val2014_000000535591.jpg -../coco/images/val2014/COCO_val2014_000000535858.jpg -../coco/images/val2014/COCO_val2014_000000535889.jpg -../coco/images/val2014/COCO_val2014_000000535952.jpg -../coco/images/val2014/COCO_val2014_000000535997.jpg -../coco/images/val2014/COCO_val2014_000000536028.jpg -../coco/images/val2014/COCO_val2014_000000536154.jpg -../coco/images/val2014/COCO_val2014_000000536486.jpg -../coco/images/val2014/COCO_val2014_000000536517.jpg -../coco/images/val2014/COCO_val2014_000000536795.jpg -../coco/images/val2014/COCO_val2014_000000536879.jpg -../coco/images/val2014/COCO_val2014_000000537025.jpg -../coco/images/val2014/COCO_val2014_000000537280.jpg -../coco/images/val2014/COCO_val2014_000000537369.jpg -../coco/images/val2014/COCO_val2014_000000537604.jpg -../coco/images/val2014/COCO_val2014_000000537620.jpg -../coco/images/val2014/COCO_val2014_000000537636.jpg -../coco/images/val2014/COCO_val2014_000000537802.jpg -../coco/images/val2014/COCO_val2014_000000537954.jpg -../coco/images/val2014/COCO_val2014_000000538005.jpg -../coco/images/val2014/COCO_val2014_000000538153.jpg -../coco/images/val2014/COCO_val2014_000000538259.jpg -../coco/images/val2014/COCO_val2014_000000538451.jpg -../coco/images/val2014/COCO_val2014_000000538463.jpg -../coco/images/val2014/COCO_val2014_000000538589.jpg -../coco/images/val2014/COCO_val2014_000000538595.jpg -../coco/images/val2014/COCO_val2014_000000538596.jpg -../coco/images/val2014/COCO_val2014_000000538741.jpg -../coco/images/val2014/COCO_val2014_000000538775.jpg -../coco/images/val2014/COCO_val2014_000000538976.jpg -../coco/images/val2014/COCO_val2014_000000539224.jpg -../coco/images/val2014/COCO_val2014_000000539251.jpg -../coco/images/val2014/COCO_val2014_000000539453.jpg -../coco/images/val2014/COCO_val2014_000000539551.jpg -../coco/images/val2014/COCO_val2014_000000539678.jpg -../coco/images/val2014/COCO_val2014_000000539975.jpg -../coco/images/val2014/COCO_val2014_000000540098.jpg -../coco/images/val2014/COCO_val2014_000000540107.jpg -../coco/images/val2014/COCO_val2014_000000540172.jpg -../coco/images/val2014/COCO_val2014_000000540186.jpg -../coco/images/val2014/COCO_val2014_000000540209.jpg -../coco/images/val2014/COCO_val2014_000000540264.jpg -../coco/images/val2014/COCO_val2014_000000540372.jpg -../coco/images/val2014/COCO_val2014_000000540414.jpg -../coco/images/val2014/COCO_val2014_000000540483.jpg -../coco/images/val2014/COCO_val2014_000000540502.jpg -../coco/images/val2014/COCO_val2014_000000540816.jpg -../coco/images/val2014/COCO_val2014_000000540860.jpg -../coco/images/val2014/COCO_val2014_000000540912.jpg -../coco/images/val2014/COCO_val2014_000000541071.jpg -../coco/images/val2014/COCO_val2014_000000541197.jpg -../coco/images/val2014/COCO_val2014_000000541279.jpg -../coco/images/val2014/COCO_val2014_000000541474.jpg -../coco/images/val2014/COCO_val2014_000000541550.jpg -../coco/images/val2014/COCO_val2014_000000541773.jpg -../coco/images/val2014/COCO_val2014_000000541879.jpg -../coco/images/val2014/COCO_val2014_000000541991.jpg -../coco/images/val2014/COCO_val2014_000000542101.jpg -../coco/images/val2014/COCO_val2014_000000542234.jpg -../coco/images/val2014/COCO_val2014_000000542509.jpg -../coco/images/val2014/COCO_val2014_000000542611.jpg -../coco/images/val2014/COCO_val2014_000000542676.jpg -../coco/images/val2014/COCO_val2014_000000542792.jpg -../coco/images/val2014/COCO_val2014_000000543112.jpg -../coco/images/val2014/COCO_val2014_000000543118.jpg -../coco/images/val2014/COCO_val2014_000000543203.jpg -../coco/images/val2014/COCO_val2014_000000543220.jpg -../coco/images/val2014/COCO_val2014_000000543281.jpg -../coco/images/val2014/COCO_val2014_000000543492.jpg -../coco/images/val2014/COCO_val2014_000000543581.jpg -../coco/images/val2014/COCO_val2014_000000543660.jpg -../coco/images/val2014/COCO_val2014_000000543676.jpg -../coco/images/val2014/COCO_val2014_000000543696.jpg -../coco/images/val2014/COCO_val2014_000000543782.jpg -../coco/images/val2014/COCO_val2014_000000544044.jpg -../coco/images/val2014/COCO_val2014_000000544071.jpg -../coco/images/val2014/COCO_val2014_000000544140.jpg -../coco/images/val2014/COCO_val2014_000000544597.jpg -../coco/images/val2014/COCO_val2014_000000544607.jpg -../coco/images/val2014/COCO_val2014_000000544611.jpg -../coco/images/val2014/COCO_val2014_000000544644.jpg -../coco/images/val2014/COCO_val2014_000000545289.jpg -../coco/images/val2014/COCO_val2014_000000545407.jpg -../coco/images/val2014/COCO_val2014_000000545475.jpg -../coco/images/val2014/COCO_val2014_000000545583.jpg -../coco/images/val2014/COCO_val2014_000000545597.jpg -../coco/images/val2014/COCO_val2014_000000545734.jpg -../coco/images/val2014/COCO_val2014_000000545756.jpg -../coco/images/val2014/COCO_val2014_000000545788.jpg -../coco/images/val2014/COCO_val2014_000000545958.jpg -../coco/images/val2014/COCO_val2014_000000546188.jpg -../coco/images/val2014/COCO_val2014_000000546226.jpg -../coco/images/val2014/COCO_val2014_000000546229.jpg -../coco/images/val2014/COCO_val2014_000000546388.jpg -../coco/images/val2014/COCO_val2014_000000546424.jpg -../coco/images/val2014/COCO_val2014_000000546524.jpg -../coco/images/val2014/COCO_val2014_000000546569.jpg -../coco/images/val2014/COCO_val2014_000000546622.jpg -../coco/images/val2014/COCO_val2014_000000546649.jpg -../coco/images/val2014/COCO_val2014_000000546667.jpg -../coco/images/val2014/COCO_val2014_000000546760.jpg -../coco/images/val2014/COCO_val2014_000000546782.jpg -../coco/images/val2014/COCO_val2014_000000546962.jpg -../coco/images/val2014/COCO_val2014_000000547137.jpg -../coco/images/val2014/COCO_val2014_000000547383.jpg -../coco/images/val2014/COCO_val2014_000000547519.jpg -../coco/images/val2014/COCO_val2014_000000547583.jpg -../coco/images/val2014/COCO_val2014_000000547738.jpg -../coco/images/val2014/COCO_val2014_000000547790.jpg -../coco/images/val2014/COCO_val2014_000000547858.jpg -../coco/images/val2014/COCO_val2014_000000548090.jpg -../coco/images/val2014/COCO_val2014_000000548126.jpg -../coco/images/val2014/COCO_val2014_000000548339.jpg -../coco/images/val2014/COCO_val2014_000000548795.jpg -../coco/images/val2014/COCO_val2014_000000548882.jpg -../coco/images/val2014/COCO_val2014_000000549063.jpg -../coco/images/val2014/COCO_val2014_000000549171.jpg -../coco/images/val2014/COCO_val2014_000000549242.jpg -../coco/images/val2014/COCO_val2014_000000549351.jpg -../coco/images/val2014/COCO_val2014_000000549410.jpg -../coco/images/val2014/COCO_val2014_000000549518.jpg -../coco/images/val2014/COCO_val2014_000000549713.jpg -../coco/images/val2014/COCO_val2014_000000549936.jpg -../coco/images/val2014/COCO_val2014_000000550001.jpg -../coco/images/val2014/COCO_val2014_000000550322.jpg -../coco/images/val2014/COCO_val2014_000000550432.jpg -../coco/images/val2014/COCO_val2014_000000550597.jpg -../coco/images/val2014/COCO_val2014_000000550627.jpg -../coco/images/val2014/COCO_val2014_000000550722.jpg -../coco/images/val2014/COCO_val2014_000000550862.jpg -../coco/images/val2014/COCO_val2014_000000551129.jpg -../coco/images/val2014/COCO_val2014_000000551243.jpg -../coco/images/val2014/COCO_val2014_000000551336.jpg -../coco/images/val2014/COCO_val2014_000000551669.jpg -../coco/images/val2014/COCO_val2014_000000552507.jpg -../coco/images/val2014/COCO_val2014_000000552837.jpg -../coco/images/val2014/COCO_val2014_000000553074.jpg -../coco/images/val2014/COCO_val2014_000000553165.jpg -../coco/images/val2014/COCO_val2014_000000553253.jpg -../coco/images/val2014/COCO_val2014_000000553306.jpg -../coco/images/val2014/COCO_val2014_000000553353.jpg -../coco/images/val2014/COCO_val2014_000000553443.jpg -../coco/images/val2014/COCO_val2014_000000553522.jpg -../coco/images/val2014/COCO_val2014_000000553664.jpg -../coco/images/val2014/COCO_val2014_000000554037.jpg -../coco/images/val2014/COCO_val2014_000000554100.jpg -../coco/images/val2014/COCO_val2014_000000554255.jpg -../coco/images/val2014/COCO_val2014_000000554266.jpg -../coco/images/val2014/COCO_val2014_000000554291.jpg -../coco/images/val2014/COCO_val2014_000000554302.jpg -../coco/images/val2014/COCO_val2014_000000554340.jpg -../coco/images/val2014/COCO_val2014_000000554347.jpg -../coco/images/val2014/COCO_val2014_000000554537.jpg -../coco/images/val2014/COCO_val2014_000000554595.jpg -../coco/images/val2014/COCO_val2014_000000554607.jpg -../coco/images/val2014/COCO_val2014_000000554618.jpg -../coco/images/val2014/COCO_val2014_000000554625.jpg -../coco/images/val2014/COCO_val2014_000000554711.jpg -../coco/images/val2014/COCO_val2014_000000554727.jpg -../coco/images/val2014/COCO_val2014_000000554767.jpg -../coco/images/val2014/COCO_val2014_000000554978.jpg -../coco/images/val2014/COCO_val2014_000000555035.jpg -../coco/images/val2014/COCO_val2014_000000555110.jpg -../coco/images/val2014/COCO_val2014_000000555180.jpg -../coco/images/val2014/COCO_val2014_000000555197.jpg -../coco/images/val2014/COCO_val2014_000000555267.jpg -../coco/images/val2014/COCO_val2014_000000555322.jpg -../coco/images/val2014/COCO_val2014_000000555412.jpg -../coco/images/val2014/COCO_val2014_000000555456.jpg -../coco/images/val2014/COCO_val2014_000000556091.jpg -../coco/images/val2014/COCO_val2014_000000556178.jpg -../coco/images/val2014/COCO_val2014_000000556193.jpg -../coco/images/val2014/COCO_val2014_000000556278.jpg -../coco/images/val2014/COCO_val2014_000000556562.jpg -../coco/images/val2014/COCO_val2014_000000556633.jpg -../coco/images/val2014/COCO_val2014_000000556641.jpg -../coco/images/val2014/COCO_val2014_000000556653.jpg -../coco/images/val2014/COCO_val2014_000000556751.jpg -../coco/images/val2014/COCO_val2014_000000556758.jpg -../coco/images/val2014/COCO_val2014_000000557016.jpg -../coco/images/val2014/COCO_val2014_000000557402.jpg -../coco/images/val2014/COCO_val2014_000000557556.jpg -../coco/images/val2014/COCO_val2014_000000557564.jpg -../coco/images/val2014/COCO_val2014_000000557595.jpg -../coco/images/val2014/COCO_val2014_000000557720.jpg -../coco/images/val2014/COCO_val2014_000000557731.jpg -../coco/images/val2014/COCO_val2014_000000557785.jpg -../coco/images/val2014/COCO_val2014_000000557896.jpg -../coco/images/val2014/COCO_val2014_000000557916.jpg -../coco/images/val2014/COCO_val2014_000000557923.jpg -../coco/images/val2014/COCO_val2014_000000557965.jpg -../coco/images/val2014/COCO_val2014_000000557977.jpg -../coco/images/val2014/COCO_val2014_000000558539.jpg -../coco/images/val2014/COCO_val2014_000000558587.jpg -../coco/images/val2014/COCO_val2014_000000558661.jpg -../coco/images/val2014/COCO_val2014_000000558784.jpg -../coco/images/val2014/COCO_val2014_000000558864.jpg -../coco/images/val2014/COCO_val2014_000000558955.jpg -../coco/images/val2014/COCO_val2014_000000558976.jpg -../coco/images/val2014/COCO_val2014_000000559047.jpg -../coco/images/val2014/COCO_val2014_000000559348.jpg -../coco/images/val2014/COCO_val2014_000000559656.jpg -../coco/images/val2014/COCO_val2014_000000559778.jpg -../coco/images/val2014/COCO_val2014_000000559790.jpg -../coco/images/val2014/COCO_val2014_000000560000.jpg -../coco/images/val2014/COCO_val2014_000000560227.jpg -../coco/images/val2014/COCO_val2014_000000560235.jpg -../coco/images/val2014/COCO_val2014_000000560279.jpg -../coco/images/val2014/COCO_val2014_000000560373.jpg -../coco/images/val2014/COCO_val2014_000000560626.jpg -../coco/images/val2014/COCO_val2014_000000560662.jpg -../coco/images/val2014/COCO_val2014_000000560721.jpg -../coco/images/val2014/COCO_val2014_000000560911.jpg -../coco/images/val2014/COCO_val2014_000000561027.jpg -../coco/images/val2014/COCO_val2014_000000561337.jpg -../coco/images/val2014/COCO_val2014_000000561357.jpg -../coco/images/val2014/COCO_val2014_000000561399.jpg -../coco/images/val2014/COCO_val2014_000000561570.jpg -../coco/images/val2014/COCO_val2014_000000561619.jpg -../coco/images/val2014/COCO_val2014_000000561698.jpg -../coco/images/val2014/COCO_val2014_000000562101.jpg -../coco/images/val2014/COCO_val2014_000000562227.jpg -../coco/images/val2014/COCO_val2014_000000562557.jpg -../coco/images/val2014/COCO_val2014_000000562582.jpg -../coco/images/val2014/COCO_val2014_000000562708.jpg -../coco/images/val2014/COCO_val2014_000000562805.jpg -../coco/images/val2014/COCO_val2014_000000562834.jpg -../coco/images/val2014/COCO_val2014_000000562875.jpg -../coco/images/val2014/COCO_val2014_000000562906.jpg -../coco/images/val2014/COCO_val2014_000000562943.jpg -../coco/images/val2014/COCO_val2014_000000562994.jpg -../coco/images/val2014/COCO_val2014_000000563015.jpg -../coco/images/val2014/COCO_val2014_000000563641.jpg -../coco/images/val2014/COCO_val2014_000000563665.jpg -../coco/images/val2014/COCO_val2014_000000563730.jpg -../coco/images/val2014/COCO_val2014_000000563871.jpg -../coco/images/val2014/COCO_val2014_000000564109.jpg -../coco/images/val2014/COCO_val2014_000000564127.jpg -../coco/images/val2014/COCO_val2014_000000564129.jpg -../coco/images/val2014/COCO_val2014_000000564289.jpg -../coco/images/val2014/COCO_val2014_000000564317.jpg -../coco/images/val2014/COCO_val2014_000000564366.jpg -../coco/images/val2014/COCO_val2014_000000564934.jpg -../coco/images/val2014/COCO_val2014_000000564940.jpg -../coco/images/val2014/COCO_val2014_000000565239.jpg -../coco/images/val2014/COCO_val2014_000000565389.jpg -../coco/images/val2014/COCO_val2014_000000565479.jpg -../coco/images/val2014/COCO_val2014_000000565543.jpg -../coco/images/val2014/COCO_val2014_000000565597.jpg -../coco/images/val2014/COCO_val2014_000000565670.jpg -../coco/images/val2014/COCO_val2014_000000565691.jpg -../coco/images/val2014/COCO_val2014_000000565693.jpg -../coco/images/val2014/COCO_val2014_000000565761.jpg -../coco/images/val2014/COCO_val2014_000000565877.jpg -../coco/images/val2014/COCO_val2014_000000565957.jpg -../coco/images/val2014/COCO_val2014_000000566027.jpg -../coco/images/val2014/COCO_val2014_000000566038.jpg -../coco/images/val2014/COCO_val2014_000000566103.jpg -../coco/images/val2014/COCO_val2014_000000566135.jpg -../coco/images/val2014/COCO_val2014_000000566298.jpg -../coco/images/val2014/COCO_val2014_000000566518.jpg -../coco/images/val2014/COCO_val2014_000000566538.jpg -../coco/images/val2014/COCO_val2014_000000566644.jpg -../coco/images/val2014/COCO_val2014_000000566908.jpg -../coco/images/val2014/COCO_val2014_000000566941.jpg -../coco/images/val2014/COCO_val2014_000000567093.jpg -../coco/images/val2014/COCO_val2014_000000567171.jpg -../coco/images/val2014/COCO_val2014_000000567205.jpg -../coco/images/val2014/COCO_val2014_000000567315.jpg -../coco/images/val2014/COCO_val2014_000000567340.jpg -../coco/images/val2014/COCO_val2014_000000567383.jpg -../coco/images/val2014/COCO_val2014_000000567686.jpg -../coco/images/val2014/COCO_val2014_000000567801.jpg -../coco/images/val2014/COCO_val2014_000000567812.jpg -../coco/images/val2014/COCO_val2014_000000567877.jpg -../coco/images/val2014/COCO_val2014_000000567886.jpg -../coco/images/val2014/COCO_val2014_000000568082.jpg -../coco/images/val2014/COCO_val2014_000000568131.jpg -../coco/images/val2014/COCO_val2014_000000568132.jpg -../coco/images/val2014/COCO_val2014_000000568195.jpg -../coco/images/val2014/COCO_val2014_000000568259.jpg -../coco/images/val2014/COCO_val2014_000000568265.jpg -../coco/images/val2014/COCO_val2014_000000568337.jpg -../coco/images/val2014/COCO_val2014_000000568555.jpg -../coco/images/val2014/COCO_val2014_000000568623.jpg -../coco/images/val2014/COCO_val2014_000000568653.jpg -../coco/images/val2014/COCO_val2014_000000568675.jpg -../coco/images/val2014/COCO_val2014_000000568717.jpg -../coco/images/val2014/COCO_val2014_000000568956.jpg -../coco/images/val2014/COCO_val2014_000000568961.jpg -../coco/images/val2014/COCO_val2014_000000569001.jpg -../coco/images/val2014/COCO_val2014_000000569272.jpg -../coco/images/val2014/COCO_val2014_000000569273.jpg -../coco/images/val2014/COCO_val2014_000000569319.jpg -../coco/images/val2014/COCO_val2014_000000569432.jpg -../coco/images/val2014/COCO_val2014_000000569437.jpg -../coco/images/val2014/COCO_val2014_000000569972.jpg -../coco/images/val2014/COCO_val2014_000000569976.jpg -../coco/images/val2014/COCO_val2014_000000570188.jpg -../coco/images/val2014/COCO_val2014_000000570456.jpg -../coco/images/val2014/COCO_val2014_000000570471.jpg -../coco/images/val2014/COCO_val2014_000000570680.jpg -../coco/images/val2014/COCO_val2014_000000570688.jpg -../coco/images/val2014/COCO_val2014_000000571012.jpg -../coco/images/val2014/COCO_val2014_000000571497.jpg -../coco/images/val2014/COCO_val2014_000000571550.jpg -../coco/images/val2014/COCO_val2014_000000571584.jpg -../coco/images/val2014/COCO_val2014_000000571635.jpg -../coco/images/val2014/COCO_val2014_000000571636.jpg -../coco/images/val2014/COCO_val2014_000000571746.jpg -../coco/images/val2014/COCO_val2014_000000571931.jpg -../coco/images/val2014/COCO_val2014_000000572017.jpg -../coco/images/val2014/COCO_val2014_000000572042.jpg -../coco/images/val2014/COCO_val2014_000000572051.jpg -../coco/images/val2014/COCO_val2014_000000572090.jpg -../coco/images/val2014/COCO_val2014_000000572233.jpg -../coco/images/val2014/COCO_val2014_000000572303.jpg -../coco/images/val2014/COCO_val2014_000000572347.jpg -../coco/images/val2014/COCO_val2014_000000572408.jpg -../coco/images/val2014/COCO_val2014_000000572517.jpg -../coco/images/val2014/COCO_val2014_000000572802.jpg -../coco/images/val2014/COCO_val2014_000000572850.jpg -../coco/images/val2014/COCO_val2014_000000573058.jpg -../coco/images/val2014/COCO_val2014_000000573067.jpg -../coco/images/val2014/COCO_val2014_000000573209.jpg -../coco/images/val2014/COCO_val2014_000000573363.jpg -../coco/images/val2014/COCO_val2014_000000573791.jpg -../coco/images/val2014/COCO_val2014_000000573853.jpg -../coco/images/val2014/COCO_val2014_000000573877.jpg -../coco/images/val2014/COCO_val2014_000000574108.jpg -../coco/images/val2014/COCO_val2014_000000574411.jpg -../coco/images/val2014/COCO_val2014_000000574413.jpg -../coco/images/val2014/COCO_val2014_000000574454.jpg -../coco/images/val2014/COCO_val2014_000000574509.jpg -../coco/images/val2014/COCO_val2014_000000574725.jpg -../coco/images/val2014/COCO_val2014_000000574823.jpg -../coco/images/val2014/COCO_val2014_000000574988.jpg -../coco/images/val2014/COCO_val2014_000000575020.jpg -../coco/images/val2014/COCO_val2014_000000575079.jpg -../coco/images/val2014/COCO_val2014_000000575081.jpg -../coco/images/val2014/COCO_val2014_000000575194.jpg -../coco/images/val2014/COCO_val2014_000000575428.jpg -../coco/images/val2014/COCO_val2014_000000575624.jpg -../coco/images/val2014/COCO_val2014_000000575957.jpg -../coco/images/val2014/COCO_val2014_000000576070.jpg -../coco/images/val2014/COCO_val2014_000000576085.jpg -../coco/images/val2014/COCO_val2014_000000576566.jpg -../coco/images/val2014/COCO_val2014_000000576629.jpg -../coco/images/val2014/COCO_val2014_000000576654.jpg -../coco/images/val2014/COCO_val2014_000000576704.jpg -../coco/images/val2014/COCO_val2014_000000576714.jpg -../coco/images/val2014/COCO_val2014_000000576820.jpg -../coco/images/val2014/COCO_val2014_000000576857.jpg -../coco/images/val2014/COCO_val2014_000000576955.jpg -../coco/images/val2014/COCO_val2014_000000576981.jpg -../coco/images/val2014/COCO_val2014_000000577128.jpg -../coco/images/val2014/COCO_val2014_000000577160.jpg -../coco/images/val2014/COCO_val2014_000000577161.jpg -../coco/images/val2014/COCO_val2014_000000577169.jpg -../coco/images/val2014/COCO_val2014_000000577212.jpg -../coco/images/val2014/COCO_val2014_000000577385.jpg -../coco/images/val2014/COCO_val2014_000000577522.jpg -../coco/images/val2014/COCO_val2014_000000577584.jpg -../coco/images/val2014/COCO_val2014_000000577847.jpg -../coco/images/val2014/COCO_val2014_000000577877.jpg -../coco/images/val2014/COCO_val2014_000000577912.jpg -../coco/images/val2014/COCO_val2014_000000577924.jpg -../coco/images/val2014/COCO_val2014_000000578225.jpg -../coco/images/val2014/COCO_val2014_000000578237.jpg -../coco/images/val2014/COCO_val2014_000000578341.jpg -../coco/images/val2014/COCO_val2014_000000578344.jpg -../coco/images/val2014/COCO_val2014_000000578427.jpg -../coco/images/val2014/COCO_val2014_000000578871.jpg -../coco/images/val2014/COCO_val2014_000000578878.jpg -../coco/images/val2014/COCO_val2014_000000579003.jpg -../coco/images/val2014/COCO_val2014_000000579240.jpg -../coco/images/val2014/COCO_val2014_000000579321.jpg -../coco/images/val2014/COCO_val2014_000000579337.jpg -../coco/images/val2014/COCO_val2014_000000579548.jpg -../coco/images/val2014/COCO_val2014_000000579885.jpg -../coco/images/val2014/COCO_val2014_000000579902.jpg -../coco/images/val2014/COCO_val2014_000000580027.jpg -../coco/images/val2014/COCO_val2014_000000580029.jpg -../coco/images/val2014/COCO_val2014_000000580294.jpg -../coco/images/val2014/COCO_val2014_000000580540.jpg -../coco/images/val2014/COCO_val2014_000000580608.jpg -../coco/images/val2014/COCO_val2014_000000580693.jpg -../coco/images/val2014/COCO_val2014_000000580720.jpg -../coco/images/val2014/COCO_val2014_000000580870.jpg -../coco/images/val2014/COCO_val2014_000000580975.jpg -../coco/images/val2014/COCO_val2014_000000581332.jpg -../coco/images/val2014/COCO_val2014_000000581593.jpg -../coco/images/val2014/COCO_val2014_000000581655.jpg -../coco/images/val2014/COCO_val2014_000000581731.jpg -../coco/images/val2014/COCO_val2014_000000581781.jpg -../coco/images/val2014/COCO_val2014_000000581887.jpg -../coco/images/val2014/COCO_val2014_000000581899.jpg diff --git a/data/Argoverse.yaml b/data/Argoverse.yaml new file mode 100644 index 0000000000..651b6431bb --- /dev/null +++ b/data/Argoverse.yaml @@ -0,0 +1,73 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Argoverse-HD dataset (ring-front-center camera) http://www.cs.cmu.edu/~mengtial/proj/streaming/ by Argo AI +# Example usage: python train.py --data Argoverse.yaml +# parent +# ├── yolov5 +# └── datasets +# └── Argoverse ← downloads here (31.3 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/Argoverse # dataset root dir +train: Argoverse-1.1/images/train/ # train images (relative to 'path') 39384 images +val: Argoverse-1.1/images/val/ # val images (relative to 'path') 15062 images +test: Argoverse-1.1/images/test/ # test images (optional) https://eval.ai/web/challenges/challenge-page/800/overview + +# Classes +names: + 0: person + 1: bicycle + 2: car + 3: motorcycle + 4: bus + 5: truck + 6: traffic_light + 7: stop_sign + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + import json + + from tqdm import tqdm + from utils.general import download, Path + + + def argoverse2yolo(set): + labels = {} + a = json.load(open(set, "rb")) + for annot in tqdm(a['annotations'], desc=f"Converting {set} to YOLOv5 format..."): + img_id = annot['image_id'] + img_name = a['images'][img_id]['name'] + img_label_name = f'{img_name[:-3]}txt' + + cls = annot['category_id'] # instance class id + x_center, y_center, width, height = annot['bbox'] + x_center = (x_center + width / 2) / 1920.0 # offset and scale + y_center = (y_center + height / 2) / 1200.0 # offset and scale + width /= 1920.0 # scale + height /= 1200.0 # scale + + img_dir = set.parents[2] / 'Argoverse-1.1' / 'labels' / a['seq_dirs'][a['images'][annot['image_id']]['sid']] + if not img_dir.exists(): + img_dir.mkdir(parents=True, exist_ok=True) + + k = str(img_dir / img_label_name) + if k not in labels: + labels[k] = [] + labels[k].append(f"{cls} {x_center} {y_center} {width} {height}\n") + + for k in labels: + with open(k, "w") as f: + f.writelines(labels[k]) + + + # Download + dir = Path(yaml['path']) # dataset root dir + urls = ['https://argoverse-hd.s3.us-east-2.amazonaws.com/Argoverse-HD-Full.zip'] + download(urls, dir=dir, delete=False) + + # Convert + annotations_dir = 'Argoverse-HD/annotations/' + (dir / 'Argoverse-1.1' / 'tracking').rename(dir / 'Argoverse-1.1' / 'images') # rename 'tracking' to 'images' + for d in "train.json", "val.json": + argoverse2yolo(dir / annotations_dir / d) # convert VisDrone annotations to YOLO labels diff --git a/data/GlobalWheat2020.yaml b/data/GlobalWheat2020.yaml new file mode 100644 index 0000000000..eb25871c65 --- /dev/null +++ b/data/GlobalWheat2020.yaml @@ -0,0 +1,53 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Global Wheat 2020 dataset http://www.global-wheat.com/ by University of Saskatchewan +# Example usage: python train.py --data GlobalWheat2020.yaml +# parent +# ├── yolov5 +# └── datasets +# └── GlobalWheat2020 ← downloads here (7.0 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/GlobalWheat2020 # dataset root dir +train: # train images (relative to 'path') 3422 images + - images/arvalis_1 + - images/arvalis_2 + - images/arvalis_3 + - images/ethz_1 + - images/rres_1 + - images/inrae_1 + - images/usask_1 +val: # val images (relative to 'path') 748 images (WARNING: train set contains ethz_1) + - images/ethz_1 +test: # test images (optional) 1276 images + - images/utokyo_1 + - images/utokyo_2 + - images/nau_1 + - images/uq_1 + +# Classes +names: + 0: wheat_head + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + from utils.general import download, Path + + + # Download + dir = Path(yaml['path']) # dataset root dir + urls = ['https://zenodo.org/record/4298502/files/global-wheat-codalab-official.zip', + 'https://github.com/ultralytics/assets/releases/download/v0.0.0/GlobalWheat2020_labels.zip'] + download(urls, dir=dir) + + # Make Directories + for p in 'annotations', 'images', 'labels': + (dir / p).mkdir(parents=True, exist_ok=True) + + # Move + for p in 'arvalis_1', 'arvalis_2', 'arvalis_3', 'ethz_1', 'rres_1', 'inrae_1', 'usask_1', \ + 'utokyo_1', 'utokyo_2', 'nau_1', 'uq_1': + (dir / p).rename(dir / 'images' / p) # move to /images + f = (dir / p).with_suffix('.json') # json file + if f.exists(): + f.rename((dir / 'annotations' / p).with_suffix('.json')) # move to /annotations diff --git a/data/ImageNet.yaml b/data/ImageNet.yaml new file mode 100644 index 0000000000..2dee3f8d30 --- /dev/null +++ b/data/ImageNet.yaml @@ -0,0 +1,1021 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# ImageNet-1k dataset https://www.image-net.org/index.php by Stanford University +# Simplified class names from https://github.com/anishathalye/imagenet-simple-labels +# Example usage: python classify/train.py --data imagenet +# parent +# ├── yolov5 +# └── datasets +# └── imagenet ← downloads here (144 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/imagenet # dataset root dir +train: train # train images (relative to 'path') 1281167 images +val: val # val images (relative to 'path') 50000 images +test: # test images (optional) + +# Classes +names: + 0: tench + 1: goldfish + 2: great white shark + 3: tiger shark + 4: hammerhead shark + 5: electric ray + 6: stingray + 7: cock + 8: hen + 9: ostrich + 10: brambling + 11: goldfinch + 12: house finch + 13: junco + 14: indigo bunting + 15: American robin + 16: bulbul + 17: jay + 18: magpie + 19: chickadee + 20: American dipper + 21: kite + 22: bald eagle + 23: vulture + 24: great grey owl + 25: fire salamander + 26: smooth newt + 27: newt + 28: spotted salamander + 29: axolotl + 30: American bullfrog + 31: tree frog + 32: tailed frog + 33: loggerhead sea turtle + 34: leatherback sea turtle + 35: mud turtle + 36: terrapin + 37: box turtle + 38: banded gecko + 39: green iguana + 40: Carolina anole + 41: desert grassland whiptail lizard + 42: agama + 43: frilled-necked lizard + 44: alligator lizard + 45: Gila monster + 46: European green lizard + 47: chameleon + 48: Komodo dragon + 49: Nile crocodile + 50: American alligator + 51: triceratops + 52: worm snake + 53: ring-necked snake + 54: eastern hog-nosed snake + 55: smooth green snake + 56: kingsnake + 57: garter snake + 58: water snake + 59: vine snake + 60: night snake + 61: boa constrictor + 62: African rock python + 63: Indian cobra + 64: green mamba + 65: sea snake + 66: Saharan horned viper + 67: eastern diamondback rattlesnake + 68: sidewinder + 69: trilobite + 70: harvestman + 71: scorpion + 72: yellow garden spider + 73: barn spider + 74: European garden spider + 75: southern black widow + 76: tarantula + 77: wolf spider + 78: tick + 79: centipede + 80: black grouse + 81: ptarmigan + 82: ruffed grouse + 83: prairie grouse + 84: peacock + 85: quail + 86: partridge + 87: grey parrot + 88: macaw + 89: sulphur-crested cockatoo + 90: lorikeet + 91: coucal + 92: bee eater + 93: hornbill + 94: hummingbird + 95: jacamar + 96: toucan + 97: duck + 98: red-breasted merganser + 99: goose + 100: black swan + 101: tusker + 102: echidna + 103: platypus + 104: wallaby + 105: koala + 106: wombat + 107: jellyfish + 108: sea anemone + 109: brain coral + 110: flatworm + 111: nematode + 112: conch + 113: snail + 114: slug + 115: sea slug + 116: chiton + 117: chambered nautilus + 118: Dungeness crab + 119: rock crab + 120: fiddler crab + 121: red king crab + 122: American lobster + 123: spiny lobster + 124: crayfish + 125: hermit crab + 126: isopod + 127: white stork + 128: black stork + 129: spoonbill + 130: flamingo + 131: little blue heron + 132: great egret + 133: bittern + 134: crane (bird) + 135: limpkin + 136: common gallinule + 137: American coot + 138: bustard + 139: ruddy turnstone + 140: dunlin + 141: common redshank + 142: dowitcher + 143: oystercatcher + 144: pelican + 145: king penguin + 146: albatross + 147: grey whale + 148: killer whale + 149: dugong + 150: sea lion + 151: Chihuahua + 152: Japanese Chin + 153: Maltese + 154: Pekingese + 155: Shih Tzu + 156: King Charles Spaniel + 157: Papillon + 158: toy terrier + 159: Rhodesian Ridgeback + 160: Afghan Hound + 161: Basset Hound + 162: Beagle + 163: Bloodhound + 164: Bluetick Coonhound + 165: Black and Tan Coonhound + 166: Treeing Walker Coonhound + 167: English foxhound + 168: Redbone Coonhound + 169: borzoi + 170: Irish Wolfhound + 171: Italian Greyhound + 172: Whippet + 173: Ibizan Hound + 174: Norwegian Elkhound + 175: Otterhound + 176: Saluki + 177: Scottish Deerhound + 178: Weimaraner + 179: Staffordshire Bull Terrier + 180: American Staffordshire Terrier + 181: Bedlington Terrier + 182: Border Terrier + 183: Kerry Blue Terrier + 184: Irish Terrier + 185: Norfolk Terrier + 186: Norwich Terrier + 187: Yorkshire Terrier + 188: Wire Fox Terrier + 189: Lakeland Terrier + 190: Sealyham Terrier + 191: Airedale Terrier + 192: Cairn Terrier + 193: Australian Terrier + 194: Dandie Dinmont Terrier + 195: Boston Terrier + 196: Miniature Schnauzer + 197: Giant Schnauzer + 198: Standard Schnauzer + 199: Scottish Terrier + 200: Tibetan Terrier + 201: Australian Silky Terrier + 202: Soft-coated Wheaten Terrier + 203: West Highland White Terrier + 204: Lhasa Apso + 205: Flat-Coated Retriever + 206: Curly-coated Retriever + 207: Golden Retriever + 208: Labrador Retriever + 209: Chesapeake Bay Retriever + 210: German Shorthaired Pointer + 211: Vizsla + 212: English Setter + 213: Irish Setter + 214: Gordon Setter + 215: Brittany + 216: Clumber Spaniel + 217: English Springer Spaniel + 218: Welsh Springer Spaniel + 219: Cocker Spaniels + 220: Sussex Spaniel + 221: Irish Water Spaniel + 222: Kuvasz + 223: Schipperke + 224: Groenendael + 225: Malinois + 226: Briard + 227: Australian Kelpie + 228: Komondor + 229: Old English Sheepdog + 230: Shetland Sheepdog + 231: collie + 232: Border Collie + 233: Bouvier des Flandres + 234: Rottweiler + 235: German Shepherd Dog + 236: Dobermann + 237: Miniature Pinscher + 238: Greater Swiss Mountain Dog + 239: Bernese Mountain Dog + 240: Appenzeller Sennenhund + 241: Entlebucher Sennenhund + 242: Boxer + 243: Bullmastiff + 244: Tibetan Mastiff + 245: French Bulldog + 246: Great Dane + 247: St. Bernard + 248: husky + 249: Alaskan Malamute + 250: Siberian Husky + 251: Dalmatian + 252: Affenpinscher + 253: Basenji + 254: pug + 255: Leonberger + 256: Newfoundland + 257: Pyrenean Mountain Dog + 258: Samoyed + 259: Pomeranian + 260: Chow Chow + 261: Keeshond + 262: Griffon Bruxellois + 263: Pembroke Welsh Corgi + 264: Cardigan Welsh Corgi + 265: Toy Poodle + 266: Miniature Poodle + 267: Standard Poodle + 268: Mexican hairless dog + 269: grey wolf + 270: Alaskan tundra wolf + 271: red wolf + 272: coyote + 273: dingo + 274: dhole + 275: African wild dog + 276: hyena + 277: red fox + 278: kit fox + 279: Arctic fox + 280: grey fox + 281: tabby cat + 282: tiger cat + 283: Persian cat + 284: Siamese cat + 285: Egyptian Mau + 286: cougar + 287: lynx + 288: leopard + 289: snow leopard + 290: jaguar + 291: lion + 292: tiger + 293: cheetah + 294: brown bear + 295: American black bear + 296: polar bear + 297: sloth bear + 298: mongoose + 299: meerkat + 300: tiger beetle + 301: ladybug + 302: ground beetle + 303: longhorn beetle + 304: leaf beetle + 305: dung beetle + 306: rhinoceros beetle + 307: weevil + 308: fly + 309: bee + 310: ant + 311: grasshopper + 312: cricket + 313: stick insect + 314: cockroach + 315: mantis + 316: cicada + 317: leafhopper + 318: lacewing + 319: dragonfly + 320: damselfly + 321: red admiral + 322: ringlet + 323: monarch butterfly + 324: small white + 325: sulfur butterfly + 326: gossamer-winged butterfly + 327: starfish + 328: sea urchin + 329: sea cucumber + 330: cottontail rabbit + 331: hare + 332: Angora rabbit + 333: hamster + 334: porcupine + 335: fox squirrel + 336: marmot + 337: beaver + 338: guinea pig + 339: common sorrel + 340: zebra + 341: pig + 342: wild boar + 343: warthog + 344: hippopotamus + 345: ox + 346: water buffalo + 347: bison + 348: ram + 349: bighorn sheep + 350: Alpine ibex + 351: hartebeest + 352: impala + 353: gazelle + 354: dromedary + 355: llama + 356: weasel + 357: mink + 358: European polecat + 359: black-footed ferret + 360: otter + 361: skunk + 362: badger + 363: armadillo + 364: three-toed sloth + 365: orangutan + 366: gorilla + 367: chimpanzee + 368: gibbon + 369: siamang + 370: guenon + 371: patas monkey + 372: baboon + 373: macaque + 374: langur + 375: black-and-white colobus + 376: proboscis monkey + 377: marmoset + 378: white-headed capuchin + 379: howler monkey + 380: titi + 381: Geoffroy's spider monkey + 382: common squirrel monkey + 383: ring-tailed lemur + 384: indri + 385: Asian elephant + 386: African bush elephant + 387: red panda + 388: giant panda + 389: snoek + 390: eel + 391: coho salmon + 392: rock beauty + 393: clownfish + 394: sturgeon + 395: garfish + 396: lionfish + 397: pufferfish + 398: abacus + 399: abaya + 400: academic gown + 401: accordion + 402: acoustic guitar + 403: aircraft carrier + 404: airliner + 405: airship + 406: altar + 407: ambulance + 408: amphibious vehicle + 409: analog clock + 410: apiary + 411: apron + 412: waste container + 413: assault rifle + 414: backpack + 415: bakery + 416: balance beam + 417: balloon + 418: ballpoint pen + 419: Band-Aid + 420: banjo + 421: baluster + 422: barbell + 423: barber chair + 424: barbershop + 425: barn + 426: barometer + 427: barrel + 428: wheelbarrow + 429: baseball + 430: basketball + 431: bassinet + 432: bassoon + 433: swimming cap + 434: bath towel + 435: bathtub + 436: station wagon + 437: lighthouse + 438: beaker + 439: military cap + 440: beer bottle + 441: beer glass + 442: bell-cot + 443: bib + 444: tandem bicycle + 445: bikini + 446: ring binder + 447: binoculars + 448: birdhouse + 449: boathouse + 450: bobsleigh + 451: bolo tie + 452: poke bonnet + 453: bookcase + 454: bookstore + 455: bottle cap + 456: bow + 457: bow tie + 458: brass + 459: bra + 460: breakwater + 461: breastplate + 462: broom + 463: bucket + 464: buckle + 465: bulletproof vest + 466: high-speed train + 467: butcher shop + 468: taxicab + 469: cauldron + 470: candle + 471: cannon + 472: canoe + 473: can opener + 474: cardigan + 475: car mirror + 476: carousel + 477: tool kit + 478: carton + 479: car wheel + 480: automated teller machine + 481: cassette + 482: cassette player + 483: castle + 484: catamaran + 485: CD player + 486: cello + 487: mobile phone + 488: chain + 489: chain-link fence + 490: chain mail + 491: chainsaw + 492: chest + 493: chiffonier + 494: chime + 495: china cabinet + 496: Christmas stocking + 497: church + 498: movie theater + 499: cleaver + 500: cliff dwelling + 501: cloak + 502: clogs + 503: cocktail shaker + 504: coffee mug + 505: coffeemaker + 506: coil + 507: combination lock + 508: computer keyboard + 509: confectionery store + 510: container ship + 511: convertible + 512: corkscrew + 513: cornet + 514: cowboy boot + 515: cowboy hat + 516: cradle + 517: crane (machine) + 518: crash helmet + 519: crate + 520: infant bed + 521: Crock Pot + 522: croquet ball + 523: crutch + 524: cuirass + 525: dam + 526: desk + 527: desktop computer + 528: rotary dial telephone + 529: diaper + 530: digital clock + 531: digital watch + 532: dining table + 533: dishcloth + 534: dishwasher + 535: disc brake + 536: dock + 537: dog sled + 538: dome + 539: doormat + 540: drilling rig + 541: drum + 542: drumstick + 543: dumbbell + 544: Dutch oven + 545: electric fan + 546: electric guitar + 547: electric locomotive + 548: entertainment center + 549: envelope + 550: espresso machine + 551: face powder + 552: feather boa + 553: filing cabinet + 554: fireboat + 555: fire engine + 556: fire screen sheet + 557: flagpole + 558: flute + 559: folding chair + 560: football helmet + 561: forklift + 562: fountain + 563: fountain pen + 564: four-poster bed + 565: freight car + 566: French horn + 567: frying pan + 568: fur coat + 569: garbage truck + 570: gas mask + 571: gas pump + 572: goblet + 573: go-kart + 574: golf ball + 575: golf cart + 576: gondola + 577: gong + 578: gown + 579: grand piano + 580: greenhouse + 581: grille + 582: grocery store + 583: guillotine + 584: barrette + 585: hair spray + 586: half-track + 587: hammer + 588: hamper + 589: hair dryer + 590: hand-held computer + 591: handkerchief + 592: hard disk drive + 593: harmonica + 594: harp + 595: harvester + 596: hatchet + 597: holster + 598: home theater + 599: honeycomb + 600: hook + 601: hoop skirt + 602: horizontal bar + 603: horse-drawn vehicle + 604: hourglass + 605: iPod + 606: clothes iron + 607: jack-o'-lantern + 608: jeans + 609: jeep + 610: T-shirt + 611: jigsaw puzzle + 612: pulled rickshaw + 613: joystick + 614: kimono + 615: knee pad + 616: knot + 617: lab coat + 618: ladle + 619: lampshade + 620: laptop computer + 621: lawn mower + 622: lens cap + 623: paper knife + 624: library + 625: lifeboat + 626: lighter + 627: limousine + 628: ocean liner + 629: lipstick + 630: slip-on shoe + 631: lotion + 632: speaker + 633: loupe + 634: sawmill + 635: magnetic compass + 636: mail bag + 637: mailbox + 638: tights + 639: tank suit + 640: manhole cover + 641: maraca + 642: marimba + 643: mask + 644: match + 645: maypole + 646: maze + 647: measuring cup + 648: medicine chest + 649: megalith + 650: microphone + 651: microwave oven + 652: military uniform + 653: milk can + 654: minibus + 655: miniskirt + 656: minivan + 657: missile + 658: mitten + 659: mixing bowl + 660: mobile home + 661: Model T + 662: modem + 663: monastery + 664: monitor + 665: moped + 666: mortar + 667: square academic cap + 668: mosque + 669: mosquito net + 670: scooter + 671: mountain bike + 672: tent + 673: computer mouse + 674: mousetrap + 675: moving van + 676: muzzle + 677: nail + 678: neck brace + 679: necklace + 680: nipple + 681: notebook computer + 682: obelisk + 683: oboe + 684: ocarina + 685: odometer + 686: oil filter + 687: organ + 688: oscilloscope + 689: overskirt + 690: bullock cart + 691: oxygen mask + 692: packet + 693: paddle + 694: paddle wheel + 695: padlock + 696: paintbrush + 697: pajamas + 698: palace + 699: pan flute + 700: paper towel + 701: parachute + 702: parallel bars + 703: park bench + 704: parking meter + 705: passenger car + 706: patio + 707: payphone + 708: pedestal + 709: pencil case + 710: pencil sharpener + 711: perfume + 712: Petri dish + 713: photocopier + 714: plectrum + 715: Pickelhaube + 716: picket fence + 717: pickup truck + 718: pier + 719: piggy bank + 720: pill bottle + 721: pillow + 722: ping-pong ball + 723: pinwheel + 724: pirate ship + 725: pitcher + 726: hand plane + 727: planetarium + 728: plastic bag + 729: plate rack + 730: plow + 731: plunger + 732: Polaroid camera + 733: pole + 734: police van + 735: poncho + 736: billiard table + 737: soda bottle + 738: pot + 739: potter's wheel + 740: power drill + 741: prayer rug + 742: printer + 743: prison + 744: projectile + 745: projector + 746: hockey puck + 747: punching bag + 748: purse + 749: quill + 750: quilt + 751: race car + 752: racket + 753: radiator + 754: radio + 755: radio telescope + 756: rain barrel + 757: recreational vehicle + 758: reel + 759: reflex camera + 760: refrigerator + 761: remote control + 762: restaurant + 763: revolver + 764: rifle + 765: rocking chair + 766: rotisserie + 767: eraser + 768: rugby ball + 769: ruler + 770: running shoe + 771: safe + 772: safety pin + 773: salt shaker + 774: sandal + 775: sarong + 776: saxophone + 777: scabbard + 778: weighing scale + 779: school bus + 780: schooner + 781: scoreboard + 782: CRT screen + 783: screw + 784: screwdriver + 785: seat belt + 786: sewing machine + 787: shield + 788: shoe store + 789: shoji + 790: shopping basket + 791: shopping cart + 792: shovel + 793: shower cap + 794: shower curtain + 795: ski + 796: ski mask + 797: sleeping bag + 798: slide rule + 799: sliding door + 800: slot machine + 801: snorkel + 802: snowmobile + 803: snowplow + 804: soap dispenser + 805: soccer ball + 806: sock + 807: solar thermal collector + 808: sombrero + 809: soup bowl + 810: space bar + 811: space heater + 812: space shuttle + 813: spatula + 814: motorboat + 815: spider web + 816: spindle + 817: sports car + 818: spotlight + 819: stage + 820: steam locomotive + 821: through arch bridge + 822: steel drum + 823: stethoscope + 824: scarf + 825: stone wall + 826: stopwatch + 827: stove + 828: strainer + 829: tram + 830: stretcher + 831: couch + 832: stupa + 833: submarine + 834: suit + 835: sundial + 836: sunglass + 837: sunglasses + 838: sunscreen + 839: suspension bridge + 840: mop + 841: sweatshirt + 842: swimsuit + 843: swing + 844: switch + 845: syringe + 846: table lamp + 847: tank + 848: tape player + 849: teapot + 850: teddy bear + 851: television + 852: tennis ball + 853: thatched roof + 854: front curtain + 855: thimble + 856: threshing machine + 857: throne + 858: tile roof + 859: toaster + 860: tobacco shop + 861: toilet seat + 862: torch + 863: totem pole + 864: tow truck + 865: toy store + 866: tractor + 867: semi-trailer truck + 868: tray + 869: trench coat + 870: tricycle + 871: trimaran + 872: tripod + 873: triumphal arch + 874: trolleybus + 875: trombone + 876: tub + 877: turnstile + 878: typewriter keyboard + 879: umbrella + 880: unicycle + 881: upright piano + 882: vacuum cleaner + 883: vase + 884: vault + 885: velvet + 886: vending machine + 887: vestment + 888: viaduct + 889: violin + 890: volleyball + 891: waffle iron + 892: wall clock + 893: wallet + 894: wardrobe + 895: military aircraft + 896: sink + 897: washing machine + 898: water bottle + 899: water jug + 900: water tower + 901: whiskey jug + 902: whistle + 903: wig + 904: window screen + 905: window shade + 906: Windsor tie + 907: wine bottle + 908: wing + 909: wok + 910: wooden spoon + 911: wool + 912: split-rail fence + 913: shipwreck + 914: yawl + 915: yurt + 916: website + 917: comic book + 918: crossword + 919: traffic sign + 920: traffic light + 921: dust jacket + 922: menu + 923: plate + 924: guacamole + 925: consomme + 926: hot pot + 927: trifle + 928: ice cream + 929: ice pop + 930: baguette + 931: bagel + 932: pretzel + 933: cheeseburger + 934: hot dog + 935: mashed potato + 936: cabbage + 937: broccoli + 938: cauliflower + 939: zucchini + 940: spaghetti squash + 941: acorn squash + 942: butternut squash + 943: cucumber + 944: artichoke + 945: bell pepper + 946: cardoon + 947: mushroom + 948: Granny Smith + 949: strawberry + 950: orange + 951: lemon + 952: fig + 953: pineapple + 954: banana + 955: jackfruit + 956: custard apple + 957: pomegranate + 958: hay + 959: carbonara + 960: chocolate syrup + 961: dough + 962: meatloaf + 963: pizza + 964: pot pie + 965: burrito + 966: red wine + 967: espresso + 968: cup + 969: eggnog + 970: alp + 971: bubble + 972: cliff + 973: coral reef + 974: geyser + 975: lakeshore + 976: promontory + 977: shoal + 978: seashore + 979: valley + 980: volcano + 981: baseball player + 982: bridegroom + 983: scuba diver + 984: rapeseed + 985: daisy + 986: yellow lady's slipper + 987: corn + 988: acorn + 989: rose hip + 990: horse chestnut seed + 991: coral fungus + 992: agaric + 993: gyromitra + 994: stinkhorn mushroom + 995: earth star + 996: hen-of-the-woods + 997: bolete + 998: ear + 999: toilet paper + +# Download script/URL (optional) +download: data/scripts/get_imagenet.sh diff --git a/data/SKU-110K.yaml b/data/SKU-110K.yaml new file mode 100644 index 0000000000..695b89cd43 --- /dev/null +++ b/data/SKU-110K.yaml @@ -0,0 +1,52 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# SKU-110K retail items dataset https://github.com/eg4000/SKU110K_CVPR19 by Trax Retail +# Example usage: python train.py --data SKU-110K.yaml +# parent +# ├── yolov5 +# └── datasets +# └── SKU-110K ← downloads here (13.6 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/SKU-110K # dataset root dir +train: train.txt # train images (relative to 'path') 8219 images +val: val.txt # val images (relative to 'path') 588 images +test: test.txt # test images (optional) 2936 images + +# Classes +names: + 0: object + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + import shutil + from tqdm import tqdm + from utils.general import np, pd, Path, download, xyxy2xywh + + + # Download + dir = Path(yaml['path']) # dataset root dir + parent = Path(dir.parent) # download dir + urls = ['http://trax-geometry.s3.amazonaws.com/cvpr_challenge/SKU110K_fixed.tar.gz'] + download(urls, dir=parent, delete=False) + + # Rename directories + if dir.exists(): + shutil.rmtree(dir) + (parent / 'SKU110K_fixed').rename(dir) # rename dir + (dir / 'labels').mkdir(parents=True, exist_ok=True) # create labels dir + + # Convert labels + names = 'image', 'x1', 'y1', 'x2', 'y2', 'class', 'image_width', 'image_height' # column names + for d in 'annotations_train.csv', 'annotations_val.csv', 'annotations_test.csv': + x = pd.read_csv(dir / 'annotations' / d, names=names).values # annotations + images, unique_images = x[:, 0], np.unique(x[:, 0]) + with open((dir / d).with_suffix('.txt').__str__().replace('annotations_', ''), 'w') as f: + f.writelines(f'./images/{s}\n' for s in unique_images) + for im in tqdm(unique_images, desc=f'Converting {dir / d}'): + cls = 0 # single-class dataset + with open((dir / 'labels' / im).with_suffix('.txt'), 'a') as f: + for r in x[images == im]: + w, h = r[6], r[7] # image width, height + xywh = xyxy2xywh(np.array([[r[1] / w, r[2] / h, r[3] / w, r[4] / h]]))[0] # instance + f.write(f"{cls} {xywh[0]:.5f} {xywh[1]:.5f} {xywh[2]:.5f} {xywh[3]:.5f}\n") # write label diff --git a/data/VisDrone.yaml b/data/VisDrone.yaml new file mode 100644 index 0000000000..637433b509 --- /dev/null +++ b/data/VisDrone.yaml @@ -0,0 +1,69 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# VisDrone2019-DET dataset https://github.com/VisDrone/VisDrone-Dataset by Tianjin University +# Example usage: python train.py --data VisDrone.yaml +# parent +# ├── yolov5 +# └── datasets +# └── VisDrone ← downloads here (2.3 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/VisDrone # dataset root dir +train: VisDrone2019-DET-train/images # train images (relative to 'path') 6471 images +val: VisDrone2019-DET-val/images # val images (relative to 'path') 548 images +test: VisDrone2019-DET-test-dev/images # test images (optional) 1610 images + +# Classes +names: + 0: pedestrian + 1: people + 2: bicycle + 3: car + 4: van + 5: truck + 6: tricycle + 7: awning-tricycle + 8: bus + 9: motor + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + from utils.general import download, os, Path + + def visdrone2yolo(dir): + from PIL import Image + from tqdm import tqdm + + def convert_box(size, box): + # Convert VisDrone box to YOLO xywh box + dw = 1. / size[0] + dh = 1. / size[1] + return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh + + (dir / 'labels').mkdir(parents=True, exist_ok=True) # make labels directory + pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}') + for f in pbar: + img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size + lines = [] + with open(f, 'r') as file: # read annotation.txt + for row in [x.split(',') for x in file.read().strip().splitlines()]: + if row[4] == '0': # VisDrone 'ignored regions' class 0 + continue + cls = int(row[5]) - 1 + box = convert_box(img_size, tuple(map(int, row[:4]))) + lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n") + with open(str(f).replace(os.sep + 'annotations' + os.sep, os.sep + 'labels' + os.sep), 'w') as fl: + fl.writelines(lines) # write label.txt + + + # Download + dir = Path(yaml['path']) # dataset root dir + urls = ['https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-train.zip', + 'https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-val.zip', + 'https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-test-dev.zip', + 'https://github.com/ultralytics/assets/releases/download/v0.0.0/VisDrone2019-DET-test-challenge.zip'] + download(urls, dir=dir, curl=True, threads=4) + + # Convert + for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev': + visdrone2yolo(dir / d) # convert VisDrone annotations to YOLO labels diff --git a/data/coco.data b/data/coco.data deleted file mode 100644 index d248a4cd73..0000000000 --- a/data/coco.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=../coco/trainvalno5k.txt -valid=../coco/5k.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco.names b/data/coco.names deleted file mode 100755 index 941cb4e139..0000000000 --- a/data/coco.names +++ /dev/null @@ -1,80 +0,0 @@ -person -bicycle -car -motorcycle -airplane -bus -train -truck -boat -traffic light -fire hydrant -stop sign -parking meter -bench -bird -cat -dog -horse -sheep -cow -elephant -bear -zebra -giraffe -backpack -umbrella -handbag -tie -suitcase -frisbee -skis -snowboard -sports ball -kite -baseball bat -baseball glove -skateboard -surfboard -tennis racket -bottle -wine glass -cup -fork -knife -spoon -bowl -banana -apple -sandwich -orange -broccoli -carrot -hot dog -pizza -donut -cake -chair -couch -potted plant -bed -dining table -toilet -tv -laptop -mouse -remote -keyboard -cell phone -microwave -oven -toaster -sink -refrigerator -book -clock -vase -scissors -teddy bear -hair drier -toothbrush diff --git a/data/coco.yaml b/data/coco.yaml new file mode 100644 index 0000000000..7f872e8ca6 --- /dev/null +++ b/data/coco.yaml @@ -0,0 +1,115 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# COCO 2017 dataset http://cocodataset.org by Microsoft +# Example usage: python train.py --data coco.yaml +# parent +# ├── yolov5 +# └── datasets +# └── coco ← downloads here (20.1 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/coco # dataset root dir +train: train2017.txt # train images (relative to 'path') 118287 images +val: val2017.txt # val images (relative to 'path') 5000 images +test: test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794 + +# Classes +names: + 0: person + 1: bicycle + 2: car + 3: motorcycle + 4: airplane + 5: bus + 6: train + 7: truck + 8: boat + 9: traffic light + 10: fire hydrant + 11: stop sign + 12: parking meter + 13: bench + 14: bird + 15: cat + 16: dog + 17: horse + 18: sheep + 19: cow + 20: elephant + 21: bear + 22: zebra + 23: giraffe + 24: backpack + 25: umbrella + 26: handbag + 27: tie + 28: suitcase + 29: frisbee + 30: skis + 31: snowboard + 32: sports ball + 33: kite + 34: baseball bat + 35: baseball glove + 36: skateboard + 37: surfboard + 38: tennis racket + 39: bottle + 40: wine glass + 41: cup + 42: fork + 43: knife + 44: spoon + 45: bowl + 46: banana + 47: apple + 48: sandwich + 49: orange + 50: broccoli + 51: carrot + 52: hot dog + 53: pizza + 54: donut + 55: cake + 56: chair + 57: couch + 58: potted plant + 59: bed + 60: dining table + 61: toilet + 62: tv + 63: laptop + 64: mouse + 65: remote + 66: keyboard + 67: cell phone + 68: microwave + 69: oven + 70: toaster + 71: sink + 72: refrigerator + 73: book + 74: clock + 75: vase + 76: scissors + 77: teddy bear + 78: hair drier + 79: toothbrush + +# Download script/URL (optional) +download: | + from utils.general import download, Path + + + # Download labels + segments = False # segment or box labels + dir = Path(yaml['path']) # dataset root dir + url = 'https://github.com/ultralytics/assets/releases/download/v0.0.0/' + urls = [url + ('coco2017labels-segments.zip' if segments else 'coco2017labels.zip')] # labels + download(urls, dir=dir.parent) + + # Download data + urls = ['http://images.cocodataset.org/zips/train2017.zip', # 19G, 118k images + 'http://images.cocodataset.org/zips/val2017.zip', # 1G, 5k images + 'http://images.cocodataset.org/zips/test2017.zip'] # 7G, 41k images (optional) + download(urls, dir=dir / 'images', threads=3) diff --git a/data/coco128-seg.yaml b/data/coco128-seg.yaml new file mode 100644 index 0000000000..fa618d87e7 --- /dev/null +++ b/data/coco128-seg.yaml @@ -0,0 +1,100 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# COCO128-seg dataset https://www.kaggle.com/datasets/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics +# Example usage: python train.py --data coco128.yaml +# parent +# ├── yolov5 +# └── datasets +# └── coco128-seg ← downloads here (7 MB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/coco128-seg # dataset root dir +train: images/train2017 # train images (relative to 'path') 128 images +val: images/train2017 # val images (relative to 'path') 128 images +test: # test images (optional) + +# Classes +names: + 0: person + 1: bicycle + 2: car + 3: motorcycle + 4: airplane + 5: bus + 6: train + 7: truck + 8: boat + 9: traffic light + 10: fire hydrant + 11: stop sign + 12: parking meter + 13: bench + 14: bird + 15: cat + 16: dog + 17: horse + 18: sheep + 19: cow + 20: elephant + 21: bear + 22: zebra + 23: giraffe + 24: backpack + 25: umbrella + 26: handbag + 27: tie + 28: suitcase + 29: frisbee + 30: skis + 31: snowboard + 32: sports ball + 33: kite + 34: baseball bat + 35: baseball glove + 36: skateboard + 37: surfboard + 38: tennis racket + 39: bottle + 40: wine glass + 41: cup + 42: fork + 43: knife + 44: spoon + 45: bowl + 46: banana + 47: apple + 48: sandwich + 49: orange + 50: broccoli + 51: carrot + 52: hot dog + 53: pizza + 54: donut + 55: cake + 56: chair + 57: couch + 58: potted plant + 59: bed + 60: dining table + 61: toilet + 62: tv + 63: laptop + 64: mouse + 65: remote + 66: keyboard + 67: cell phone + 68: microwave + 69: oven + 70: toaster + 71: sink + 72: refrigerator + 73: book + 74: clock + 75: vase + 76: scissors + 77: teddy bear + 78: hair drier + 79: toothbrush + +# Download script/URL (optional) +download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128-seg.zip diff --git a/data/coco128.yaml b/data/coco128.yaml new file mode 100644 index 0000000000..e81fb1ff4b --- /dev/null +++ b/data/coco128.yaml @@ -0,0 +1,100 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# COCO128 dataset https://www.kaggle.com/datasets/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics +# Example usage: python train.py --data coco128.yaml +# parent +# ├── yolov5 +# └── datasets +# └── coco128 ← downloads here (7 MB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/coco128 # dataset root dir +train: images/train2017 # train images (relative to 'path') 128 images +val: images/train2017 # val images (relative to 'path') 128 images +test: # test images (optional) + +# Classes +names: + 0: person + 1: bicycle + 2: car + 3: motorcycle + 4: airplane + 5: bus + 6: train + 7: truck + 8: boat + 9: traffic light + 10: fire hydrant + 11: stop sign + 12: parking meter + 13: bench + 14: bird + 15: cat + 16: dog + 17: horse + 18: sheep + 19: cow + 20: elephant + 21: bear + 22: zebra + 23: giraffe + 24: backpack + 25: umbrella + 26: handbag + 27: tie + 28: suitcase + 29: frisbee + 30: skis + 31: snowboard + 32: sports ball + 33: kite + 34: baseball bat + 35: baseball glove + 36: skateboard + 37: surfboard + 38: tennis racket + 39: bottle + 40: wine glass + 41: cup + 42: fork + 43: knife + 44: spoon + 45: bowl + 46: banana + 47: apple + 48: sandwich + 49: orange + 50: broccoli + 51: carrot + 52: hot dog + 53: pizza + 54: donut + 55: cake + 56: chair + 57: couch + 58: potted plant + 59: bed + 60: dining table + 61: toilet + 62: tv + 63: laptop + 64: mouse + 65: remote + 66: keyboard + 67: cell phone + 68: microwave + 69: oven + 70: toaster + 71: sink + 72: refrigerator + 73: book + 74: clock + 75: vase + 76: scissors + 77: teddy bear + 78: hair drier + 79: toothbrush + +# Download script/URL (optional) +download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.zip diff --git a/data/coco_1000img.data b/data/coco_1000img.data deleted file mode 100644 index 958c45c4fe..0000000000 --- a/data/coco_1000img.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_1000img.txt -valid=./data/coco_1000img.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_1000img.txt b/data/coco_1000img.txt deleted file mode 100644 index a6d6143eae..0000000000 --- a/data/coco_1000img.txt +++ /dev/null @@ -1,1000 +0,0 @@ -../coco/images/train2014/COCO_train2014_000000000009.jpg -../coco/images/train2014/COCO_train2014_000000000025.jpg -../coco/images/train2014/COCO_train2014_000000000030.jpg -../coco/images/train2014/COCO_train2014_000000000034.jpg -../coco/images/train2014/COCO_train2014_000000000036.jpg -../coco/images/train2014/COCO_train2014_000000000049.jpg -../coco/images/train2014/COCO_train2014_000000000061.jpg -../coco/images/train2014/COCO_train2014_000000000064.jpg -../coco/images/train2014/COCO_train2014_000000000071.jpg -../coco/images/train2014/COCO_train2014_000000000072.jpg -../coco/images/train2014/COCO_train2014_000000000077.jpg -../coco/images/train2014/COCO_train2014_000000000078.jpg -../coco/images/train2014/COCO_train2014_000000000081.jpg -../coco/images/train2014/COCO_train2014_000000000086.jpg -../coco/images/train2014/COCO_train2014_000000000089.jpg -../coco/images/train2014/COCO_train2014_000000000092.jpg -../coco/images/train2014/COCO_train2014_000000000094.jpg -../coco/images/train2014/COCO_train2014_000000000109.jpg -../coco/images/train2014/COCO_train2014_000000000110.jpg -../coco/images/train2014/COCO_train2014_000000000113.jpg -../coco/images/train2014/COCO_train2014_000000000127.jpg -../coco/images/train2014/COCO_train2014_000000000138.jpg -../coco/images/train2014/COCO_train2014_000000000142.jpg -../coco/images/train2014/COCO_train2014_000000000144.jpg -../coco/images/train2014/COCO_train2014_000000000149.jpg -../coco/images/train2014/COCO_train2014_000000000151.jpg -../coco/images/train2014/COCO_train2014_000000000154.jpg -../coco/images/train2014/COCO_train2014_000000000165.jpg -../coco/images/train2014/COCO_train2014_000000000194.jpg -../coco/images/train2014/COCO_train2014_000000000201.jpg -../coco/images/train2014/COCO_train2014_000000000247.jpg -../coco/images/train2014/COCO_train2014_000000000260.jpg -../coco/images/train2014/COCO_train2014_000000000263.jpg -../coco/images/train2014/COCO_train2014_000000000307.jpg -../coco/images/train2014/COCO_train2014_000000000308.jpg -../coco/images/train2014/COCO_train2014_000000000309.jpg -../coco/images/train2014/COCO_train2014_000000000312.jpg -../coco/images/train2014/COCO_train2014_000000000315.jpg -../coco/images/train2014/COCO_train2014_000000000321.jpg -../coco/images/train2014/COCO_train2014_000000000322.jpg -../coco/images/train2014/COCO_train2014_000000000326.jpg -../coco/images/train2014/COCO_train2014_000000000332.jpg -../coco/images/train2014/COCO_train2014_000000000349.jpg -../coco/images/train2014/COCO_train2014_000000000368.jpg -../coco/images/train2014/COCO_train2014_000000000370.jpg -../coco/images/train2014/COCO_train2014_000000000382.jpg -../coco/images/train2014/COCO_train2014_000000000384.jpg -../coco/images/train2014/COCO_train2014_000000000389.jpg -../coco/images/train2014/COCO_train2014_000000000394.jpg -../coco/images/train2014/COCO_train2014_000000000404.jpg -../coco/images/train2014/COCO_train2014_000000000419.jpg -../coco/images/train2014/COCO_train2014_000000000431.jpg -../coco/images/train2014/COCO_train2014_000000000436.jpg -../coco/images/train2014/COCO_train2014_000000000438.jpg -../coco/images/train2014/COCO_train2014_000000000443.jpg -../coco/images/train2014/COCO_train2014_000000000446.jpg -../coco/images/train2014/COCO_train2014_000000000450.jpg -../coco/images/train2014/COCO_train2014_000000000471.jpg -../coco/images/train2014/COCO_train2014_000000000490.jpg -../coco/images/train2014/COCO_train2014_000000000491.jpg -../coco/images/train2014/COCO_train2014_000000000510.jpg -../coco/images/train2014/COCO_train2014_000000000514.jpg -../coco/images/train2014/COCO_train2014_000000000529.jpg -../coco/images/train2014/COCO_train2014_000000000531.jpg -../coco/images/train2014/COCO_train2014_000000000532.jpg -../coco/images/train2014/COCO_train2014_000000000540.jpg -../coco/images/train2014/COCO_train2014_000000000542.jpg -../coco/images/train2014/COCO_train2014_000000000560.jpg -../coco/images/train2014/COCO_train2014_000000000562.jpg -../coco/images/train2014/COCO_train2014_000000000572.jpg -../coco/images/train2014/COCO_train2014_000000000575.jpg -../coco/images/train2014/COCO_train2014_000000000581.jpg -../coco/images/train2014/COCO_train2014_000000000584.jpg -../coco/images/train2014/COCO_train2014_000000000595.jpg -../coco/images/train2014/COCO_train2014_000000000597.jpg -../coco/images/train2014/COCO_train2014_000000000605.jpg -../coco/images/train2014/COCO_train2014_000000000612.jpg -../coco/images/train2014/COCO_train2014_000000000620.jpg -../coco/images/train2014/COCO_train2014_000000000625.jpg -../coco/images/train2014/COCO_train2014_000000000629.jpg -../coco/images/train2014/COCO_train2014_000000000634.jpg -../coco/images/train2014/COCO_train2014_000000000643.jpg -../coco/images/train2014/COCO_train2014_000000000650.jpg -../coco/images/train2014/COCO_train2014_000000000656.jpg -../coco/images/train2014/COCO_train2014_000000000659.jpg -../coco/images/train2014/COCO_train2014_000000000670.jpg -../coco/images/train2014/COCO_train2014_000000000671.jpg -../coco/images/train2014/COCO_train2014_000000000673.jpg -../coco/images/train2014/COCO_train2014_000000000681.jpg -../coco/images/train2014/COCO_train2014_000000000684.jpg -../coco/images/train2014/COCO_train2014_000000000690.jpg -../coco/images/train2014/COCO_train2014_000000000706.jpg -../coco/images/train2014/COCO_train2014_000000000714.jpg -../coco/images/train2014/COCO_train2014_000000000716.jpg -../coco/images/train2014/COCO_train2014_000000000722.jpg -../coco/images/train2014/COCO_train2014_000000000723.jpg -../coco/images/train2014/COCO_train2014_000000000731.jpg -../coco/images/train2014/COCO_train2014_000000000735.jpg -../coco/images/train2014/COCO_train2014_000000000753.jpg -../coco/images/train2014/COCO_train2014_000000000754.jpg -../coco/images/train2014/COCO_train2014_000000000762.jpg -../coco/images/train2014/COCO_train2014_000000000781.jpg -../coco/images/train2014/COCO_train2014_000000000790.jpg -../coco/images/train2014/COCO_train2014_000000000795.jpg -../coco/images/train2014/COCO_train2014_000000000797.jpg -../coco/images/train2014/COCO_train2014_000000000801.jpg -../coco/images/train2014/COCO_train2014_000000000813.jpg -../coco/images/train2014/COCO_train2014_000000000821.jpg -../coco/images/train2014/COCO_train2014_000000000825.jpg -../coco/images/train2014/COCO_train2014_000000000828.jpg -../coco/images/train2014/COCO_train2014_000000000839.jpg -../coco/images/train2014/COCO_train2014_000000000853.jpg -../coco/images/train2014/COCO_train2014_000000000882.jpg -../coco/images/train2014/COCO_train2014_000000000897.jpg -../coco/images/train2014/COCO_train2014_000000000901.jpg -../coco/images/train2014/COCO_train2014_000000000902.jpg -../coco/images/train2014/COCO_train2014_000000000908.jpg -../coco/images/train2014/COCO_train2014_000000000909.jpg -../coco/images/train2014/COCO_train2014_000000000913.jpg -../coco/images/train2014/COCO_train2014_000000000925.jpg -../coco/images/train2014/COCO_train2014_000000000927.jpg -../coco/images/train2014/COCO_train2014_000000000934.jpg -../coco/images/train2014/COCO_train2014_000000000941.jpg -../coco/images/train2014/COCO_train2014_000000000943.jpg -../coco/images/train2014/COCO_train2014_000000000955.jpg -../coco/images/train2014/COCO_train2014_000000000960.jpg -../coco/images/train2014/COCO_train2014_000000000965.jpg -../coco/images/train2014/COCO_train2014_000000000977.jpg -../coco/images/train2014/COCO_train2014_000000000982.jpg -../coco/images/train2014/COCO_train2014_000000000984.jpg -../coco/images/train2014/COCO_train2014_000000000996.jpg -../coco/images/train2014/COCO_train2014_000000001006.jpg -../coco/images/train2014/COCO_train2014_000000001011.jpg -../coco/images/train2014/COCO_train2014_000000001014.jpg -../coco/images/train2014/COCO_train2014_000000001025.jpg -../coco/images/train2014/COCO_train2014_000000001036.jpg -../coco/images/train2014/COCO_train2014_000000001053.jpg -../coco/images/train2014/COCO_train2014_000000001059.jpg -../coco/images/train2014/COCO_train2014_000000001072.jpg -../coco/images/train2014/COCO_train2014_000000001084.jpg -../coco/images/train2014/COCO_train2014_000000001085.jpg -../coco/images/train2014/COCO_train2014_000000001090.jpg -../coco/images/train2014/COCO_train2014_000000001098.jpg -../coco/images/train2014/COCO_train2014_000000001099.jpg -../coco/images/train2014/COCO_train2014_000000001102.jpg -../coco/images/train2014/COCO_train2014_000000001107.jpg -../coco/images/train2014/COCO_train2014_000000001108.jpg -../coco/images/train2014/COCO_train2014_000000001122.jpg -../coco/images/train2014/COCO_train2014_000000001139.jpg -../coco/images/train2014/COCO_train2014_000000001144.jpg -../coco/images/train2014/COCO_train2014_000000001145.jpg -../coco/images/train2014/COCO_train2014_000000001155.jpg -../coco/images/train2014/COCO_train2014_000000001166.jpg -../coco/images/train2014/COCO_train2014_000000001168.jpg -../coco/images/train2014/COCO_train2014_000000001183.jpg -../coco/images/train2014/COCO_train2014_000000001200.jpg -../coco/images/train2014/COCO_train2014_000000001204.jpg -../coco/images/train2014/COCO_train2014_000000001213.jpg -../coco/images/train2014/COCO_train2014_000000001216.jpg -../coco/images/train2014/COCO_train2014_000000001224.jpg -../coco/images/train2014/COCO_train2014_000000001232.jpg -../coco/images/train2014/COCO_train2014_000000001237.jpg -../coco/images/train2014/COCO_train2014_000000001238.jpg -../coco/images/train2014/COCO_train2014_000000001261.jpg -../coco/images/train2014/COCO_train2014_000000001264.jpg -../coco/images/train2014/COCO_train2014_000000001271.jpg -../coco/images/train2014/COCO_train2014_000000001282.jpg -../coco/images/train2014/COCO_train2014_000000001295.jpg -../coco/images/train2014/COCO_train2014_000000001298.jpg -../coco/images/train2014/COCO_train2014_000000001306.jpg -../coco/images/train2014/COCO_train2014_000000001307.jpg -../coco/images/train2014/COCO_train2014_000000001308.jpg -../coco/images/train2014/COCO_train2014_000000001311.jpg -../coco/images/train2014/COCO_train2014_000000001315.jpg -../coco/images/train2014/COCO_train2014_000000001319.jpg -../coco/images/train2014/COCO_train2014_000000001323.jpg -../coco/images/train2014/COCO_train2014_000000001330.jpg -../coco/images/train2014/COCO_train2014_000000001332.jpg -../coco/images/train2014/COCO_train2014_000000001350.jpg -../coco/images/train2014/COCO_train2014_000000001355.jpg -../coco/images/train2014/COCO_train2014_000000001359.jpg -../coco/images/train2014/COCO_train2014_000000001360.jpg -../coco/images/train2014/COCO_train2014_000000001366.jpg -../coco/images/train2014/COCO_train2014_000000001375.jpg -../coco/images/train2014/COCO_train2014_000000001381.jpg -../coco/images/train2014/COCO_train2014_000000001386.jpg -../coco/images/train2014/COCO_train2014_000000001390.jpg -../coco/images/train2014/COCO_train2014_000000001392.jpg -../coco/images/train2014/COCO_train2014_000000001397.jpg -../coco/images/train2014/COCO_train2014_000000001401.jpg -../coco/images/train2014/COCO_train2014_000000001403.jpg -../coco/images/train2014/COCO_train2014_000000001407.jpg -../coco/images/train2014/COCO_train2014_000000001408.jpg -../coco/images/train2014/COCO_train2014_000000001424.jpg -../coco/images/train2014/COCO_train2014_000000001431.jpg -../coco/images/train2014/COCO_train2014_000000001451.jpg -../coco/images/train2014/COCO_train2014_000000001453.jpg -../coco/images/train2014/COCO_train2014_000000001455.jpg -../coco/images/train2014/COCO_train2014_000000001488.jpg -../coco/images/train2014/COCO_train2014_000000001496.jpg -../coco/images/train2014/COCO_train2014_000000001497.jpg -../coco/images/train2014/COCO_train2014_000000001501.jpg -../coco/images/train2014/COCO_train2014_000000001505.jpg -../coco/images/train2014/COCO_train2014_000000001507.jpg -../coco/images/train2014/COCO_train2014_000000001510.jpg -../coco/images/train2014/COCO_train2014_000000001515.jpg -../coco/images/train2014/COCO_train2014_000000001518.jpg -../coco/images/train2014/COCO_train2014_000000001522.jpg -../coco/images/train2014/COCO_train2014_000000001523.jpg -../coco/images/train2014/COCO_train2014_000000001526.jpg -../coco/images/train2014/COCO_train2014_000000001527.jpg -../coco/images/train2014/COCO_train2014_000000001536.jpg -../coco/images/train2014/COCO_train2014_000000001548.jpg -../coco/images/train2014/COCO_train2014_000000001558.jpg -../coco/images/train2014/COCO_train2014_000000001562.jpg -../coco/images/train2014/COCO_train2014_000000001569.jpg -../coco/images/train2014/COCO_train2014_000000001579.jpg -../coco/images/train2014/COCO_train2014_000000001580.jpg -../coco/images/train2014/COCO_train2014_000000001586.jpg -../coco/images/train2014/COCO_train2014_000000001589.jpg -../coco/images/train2014/COCO_train2014_000000001596.jpg -../coco/images/train2014/COCO_train2014_000000001611.jpg -../coco/images/train2014/COCO_train2014_000000001622.jpg -../coco/images/train2014/COCO_train2014_000000001625.jpg -../coco/images/train2014/COCO_train2014_000000001637.jpg -../coco/images/train2014/COCO_train2014_000000001639.jpg -../coco/images/train2014/COCO_train2014_000000001645.jpg -../coco/images/train2014/COCO_train2014_000000001670.jpg -../coco/images/train2014/COCO_train2014_000000001674.jpg -../coco/images/train2014/COCO_train2014_000000001681.jpg -../coco/images/train2014/COCO_train2014_000000001688.jpg -../coco/images/train2014/COCO_train2014_000000001697.jpg -../coco/images/train2014/COCO_train2014_000000001706.jpg -../coco/images/train2014/COCO_train2014_000000001709.jpg -../coco/images/train2014/COCO_train2014_000000001712.jpg -../coco/images/train2014/COCO_train2014_000000001720.jpg -../coco/images/train2014/COCO_train2014_000000001732.jpg -../coco/images/train2014/COCO_train2014_000000001737.jpg -../coco/images/train2014/COCO_train2014_000000001756.jpg -../coco/images/train2014/COCO_train2014_000000001762.jpg -../coco/images/train2014/COCO_train2014_000000001764.jpg -../coco/images/train2014/COCO_train2014_000000001771.jpg -../coco/images/train2014/COCO_train2014_000000001774.jpg -../coco/images/train2014/COCO_train2014_000000001777.jpg -../coco/images/train2014/COCO_train2014_000000001781.jpg -../coco/images/train2014/COCO_train2014_000000001785.jpg -../coco/images/train2014/COCO_train2014_000000001786.jpg -../coco/images/train2014/COCO_train2014_000000001790.jpg -../coco/images/train2014/COCO_train2014_000000001792.jpg -../coco/images/train2014/COCO_train2014_000000001804.jpg -../coco/images/train2014/COCO_train2014_000000001810.jpg -../coco/images/train2014/COCO_train2014_000000001811.jpg -../coco/images/train2014/COCO_train2014_000000001813.jpg -../coco/images/train2014/COCO_train2014_000000001815.jpg -../coco/images/train2014/COCO_train2014_000000001822.jpg -../coco/images/train2014/COCO_train2014_000000001837.jpg -../coco/images/train2014/COCO_train2014_000000001864.jpg -../coco/images/train2014/COCO_train2014_000000001875.jpg -../coco/images/train2014/COCO_train2014_000000001877.jpg -../coco/images/train2014/COCO_train2014_000000001888.jpg -../coco/images/train2014/COCO_train2014_000000001895.jpg -../coco/images/train2014/COCO_train2014_000000001900.jpg -../coco/images/train2014/COCO_train2014_000000001902.jpg -../coco/images/train2014/COCO_train2014_000000001906.jpg -../coco/images/train2014/COCO_train2014_000000001907.jpg -../coco/images/train2014/COCO_train2014_000000001911.jpg -../coco/images/train2014/COCO_train2014_000000001912.jpg -../coco/images/train2014/COCO_train2014_000000001915.jpg -../coco/images/train2014/COCO_train2014_000000001924.jpg -../coco/images/train2014/COCO_train2014_000000001926.jpg -../coco/images/train2014/COCO_train2014_000000001941.jpg -../coco/images/train2014/COCO_train2014_000000001942.jpg -../coco/images/train2014/COCO_train2014_000000001943.jpg -../coco/images/train2014/COCO_train2014_000000001947.jpg -../coco/images/train2014/COCO_train2014_000000001958.jpg -../coco/images/train2014/COCO_train2014_000000001966.jpg -../coco/images/train2014/COCO_train2014_000000001994.jpg -../coco/images/train2014/COCO_train2014_000000001999.jpg -../coco/images/train2014/COCO_train2014_000000002001.jpg -../coco/images/train2014/COCO_train2014_000000002007.jpg -../coco/images/train2014/COCO_train2014_000000002024.jpg -../coco/images/train2014/COCO_train2014_000000002055.jpg -../coco/images/train2014/COCO_train2014_000000002056.jpg -../coco/images/train2014/COCO_train2014_000000002066.jpg -../coco/images/train2014/COCO_train2014_000000002068.jpg -../coco/images/train2014/COCO_train2014_000000002072.jpg -../coco/images/train2014/COCO_train2014_000000002083.jpg -../coco/images/train2014/COCO_train2014_000000002089.jpg -../coco/images/train2014/COCO_train2014_000000002093.jpg -../coco/images/train2014/COCO_train2014_000000002106.jpg -../coco/images/train2014/COCO_train2014_000000002114.jpg -../coco/images/train2014/COCO_train2014_000000002135.jpg -../coco/images/train2014/COCO_train2014_000000002148.jpg -../coco/images/train2014/COCO_train2014_000000002150.jpg -../coco/images/train2014/COCO_train2014_000000002178.jpg -../coco/images/train2014/COCO_train2014_000000002184.jpg -../coco/images/train2014/COCO_train2014_000000002193.jpg -../coco/images/train2014/COCO_train2014_000000002197.jpg -../coco/images/train2014/COCO_train2014_000000002209.jpg -../coco/images/train2014/COCO_train2014_000000002211.jpg -../coco/images/train2014/COCO_train2014_000000002217.jpg -../coco/images/train2014/COCO_train2014_000000002229.jpg -../coco/images/train2014/COCO_train2014_000000002232.jpg -../coco/images/train2014/COCO_train2014_000000002244.jpg -../coco/images/train2014/COCO_train2014_000000002258.jpg -../coco/images/train2014/COCO_train2014_000000002270.jpg -../coco/images/train2014/COCO_train2014_000000002276.jpg -../coco/images/train2014/COCO_train2014_000000002278.jpg -../coco/images/train2014/COCO_train2014_000000002279.jpg -../coco/images/train2014/COCO_train2014_000000002280.jpg -../coco/images/train2014/COCO_train2014_000000002281.jpg -../coco/images/train2014/COCO_train2014_000000002283.jpg -../coco/images/train2014/COCO_train2014_000000002284.jpg -../coco/images/train2014/COCO_train2014_000000002296.jpg -../coco/images/train2014/COCO_train2014_000000002309.jpg -../coco/images/train2014/COCO_train2014_000000002337.jpg -../coco/images/train2014/COCO_train2014_000000002342.jpg -../coco/images/train2014/COCO_train2014_000000002347.jpg -../coco/images/train2014/COCO_train2014_000000002349.jpg -../coco/images/train2014/COCO_train2014_000000002369.jpg -../coco/images/train2014/COCO_train2014_000000002372.jpg -../coco/images/train2014/COCO_train2014_000000002374.jpg -../coco/images/train2014/COCO_train2014_000000002377.jpg -../coco/images/train2014/COCO_train2014_000000002389.jpg -../coco/images/train2014/COCO_train2014_000000002400.jpg -../coco/images/train2014/COCO_train2014_000000002402.jpg -../coco/images/train2014/COCO_train2014_000000002411.jpg -../coco/images/train2014/COCO_train2014_000000002415.jpg -../coco/images/train2014/COCO_train2014_000000002429.jpg -../coco/images/train2014/COCO_train2014_000000002444.jpg -../coco/images/train2014/COCO_train2014_000000002445.jpg -../coco/images/train2014/COCO_train2014_000000002446.jpg -../coco/images/train2014/COCO_train2014_000000002448.jpg -../coco/images/train2014/COCO_train2014_000000002451.jpg -../coco/images/train2014/COCO_train2014_000000002459.jpg -../coco/images/train2014/COCO_train2014_000000002466.jpg -../coco/images/train2014/COCO_train2014_000000002470.jpg -../coco/images/train2014/COCO_train2014_000000002471.jpg -../coco/images/train2014/COCO_train2014_000000002496.jpg -../coco/images/train2014/COCO_train2014_000000002498.jpg -../coco/images/train2014/COCO_train2014_000000002531.jpg -../coco/images/train2014/COCO_train2014_000000002536.jpg -../coco/images/train2014/COCO_train2014_000000002543.jpg -../coco/images/train2014/COCO_train2014_000000002544.jpg -../coco/images/train2014/COCO_train2014_000000002545.jpg -../coco/images/train2014/COCO_train2014_000000002555.jpg -../coco/images/train2014/COCO_train2014_000000002559.jpg -../coco/images/train2014/COCO_train2014_000000002560.jpg -../coco/images/train2014/COCO_train2014_000000002563.jpg -../coco/images/train2014/COCO_train2014_000000002567.jpg -../coco/images/train2014/COCO_train2014_000000002570.jpg -../coco/images/train2014/COCO_train2014_000000002575.jpg -../coco/images/train2014/COCO_train2014_000000002583.jpg -../coco/images/train2014/COCO_train2014_000000002585.jpg -../coco/images/train2014/COCO_train2014_000000002591.jpg -../coco/images/train2014/COCO_train2014_000000002602.jpg -../coco/images/train2014/COCO_train2014_000000002606.jpg -../coco/images/train2014/COCO_train2014_000000002608.jpg -../coco/images/train2014/COCO_train2014_000000002614.jpg -../coco/images/train2014/COCO_train2014_000000002618.jpg -../coco/images/train2014/COCO_train2014_000000002619.jpg -../coco/images/train2014/COCO_train2014_000000002623.jpg -../coco/images/train2014/COCO_train2014_000000002624.jpg -../coco/images/train2014/COCO_train2014_000000002639.jpg -../coco/images/train2014/COCO_train2014_000000002644.jpg -../coco/images/train2014/COCO_train2014_000000002645.jpg -../coco/images/train2014/COCO_train2014_000000002658.jpg -../coco/images/train2014/COCO_train2014_000000002664.jpg -../coco/images/train2014/COCO_train2014_000000002672.jpg -../coco/images/train2014/COCO_train2014_000000002686.jpg -../coco/images/train2014/COCO_train2014_000000002687.jpg -../coco/images/train2014/COCO_train2014_000000002691.jpg -../coco/images/train2014/COCO_train2014_000000002693.jpg -../coco/images/train2014/COCO_train2014_000000002697.jpg -../coco/images/train2014/COCO_train2014_000000002703.jpg -../coco/images/train2014/COCO_train2014_000000002732.jpg -../coco/images/train2014/COCO_train2014_000000002742.jpg -../coco/images/train2014/COCO_train2014_000000002752.jpg -../coco/images/train2014/COCO_train2014_000000002754.jpg -../coco/images/train2014/COCO_train2014_000000002755.jpg -../coco/images/train2014/COCO_train2014_000000002758.jpg -../coco/images/train2014/COCO_train2014_000000002770.jpg -../coco/images/train2014/COCO_train2014_000000002774.jpg -../coco/images/train2014/COCO_train2014_000000002776.jpg -../coco/images/train2014/COCO_train2014_000000002782.jpg -../coco/images/train2014/COCO_train2014_000000002823.jpg -../coco/images/train2014/COCO_train2014_000000002833.jpg -../coco/images/train2014/COCO_train2014_000000002842.jpg -../coco/images/train2014/COCO_train2014_000000002843.jpg -../coco/images/train2014/COCO_train2014_000000002849.jpg -../coco/images/train2014/COCO_train2014_000000002860.jpg -../coco/images/train2014/COCO_train2014_000000002886.jpg -../coco/images/train2014/COCO_train2014_000000002892.jpg -../coco/images/train2014/COCO_train2014_000000002896.jpg -../coco/images/train2014/COCO_train2014_000000002902.jpg -../coco/images/train2014/COCO_train2014_000000002907.jpg -../coco/images/train2014/COCO_train2014_000000002931.jpg -../coco/images/train2014/COCO_train2014_000000002951.jpg -../coco/images/train2014/COCO_train2014_000000002963.jpg -../coco/images/train2014/COCO_train2014_000000002964.jpg -../coco/images/train2014/COCO_train2014_000000002982.jpg -../coco/images/train2014/COCO_train2014_000000002983.jpg -../coco/images/train2014/COCO_train2014_000000002989.jpg -../coco/images/train2014/COCO_train2014_000000002992.jpg -../coco/images/train2014/COCO_train2014_000000002998.jpg -../coco/images/train2014/COCO_train2014_000000003000.jpg -../coco/images/train2014/COCO_train2014_000000003003.jpg -../coco/images/train2014/COCO_train2014_000000003008.jpg -../coco/images/train2014/COCO_train2014_000000003040.jpg -../coco/images/train2014/COCO_train2014_000000003048.jpg -../coco/images/train2014/COCO_train2014_000000003076.jpg -../coco/images/train2014/COCO_train2014_000000003077.jpg -../coco/images/train2014/COCO_train2014_000000003080.jpg -../coco/images/train2014/COCO_train2014_000000003118.jpg -../coco/images/train2014/COCO_train2014_000000003124.jpg -../coco/images/train2014/COCO_train2014_000000003131.jpg -../coco/images/train2014/COCO_train2014_000000003148.jpg -../coco/images/train2014/COCO_train2014_000000003157.jpg -../coco/images/train2014/COCO_train2014_000000003160.jpg -../coco/images/train2014/COCO_train2014_000000003178.jpg -../coco/images/train2014/COCO_train2014_000000003197.jpg -../coco/images/train2014/COCO_train2014_000000003219.jpg -../coco/images/train2014/COCO_train2014_000000003220.jpg -../coco/images/train2014/COCO_train2014_000000003224.jpg -../coco/images/train2014/COCO_train2014_000000003225.jpg -../coco/images/train2014/COCO_train2014_000000003234.jpg -../coco/images/train2014/COCO_train2014_000000003236.jpg -../coco/images/train2014/COCO_train2014_000000003242.jpg -../coco/images/train2014/COCO_train2014_000000003249.jpg -../coco/images/train2014/COCO_train2014_000000003259.jpg -../coco/images/train2014/COCO_train2014_000000003264.jpg -../coco/images/train2014/COCO_train2014_000000003270.jpg -../coco/images/train2014/COCO_train2014_000000003272.jpg -../coco/images/train2014/COCO_train2014_000000003276.jpg -../coco/images/train2014/COCO_train2014_000000003286.jpg -../coco/images/train2014/COCO_train2014_000000003293.jpg -../coco/images/train2014/COCO_train2014_000000003305.jpg -../coco/images/train2014/COCO_train2014_000000003314.jpg -../coco/images/train2014/COCO_train2014_000000003320.jpg -../coco/images/train2014/COCO_train2014_000000003321.jpg -../coco/images/train2014/COCO_train2014_000000003325.jpg -../coco/images/train2014/COCO_train2014_000000003348.jpg -../coco/images/train2014/COCO_train2014_000000003353.jpg -../coco/images/train2014/COCO_train2014_000000003361.jpg -../coco/images/train2014/COCO_train2014_000000003365.jpg -../coco/images/train2014/COCO_train2014_000000003366.jpg -../coco/images/train2014/COCO_train2014_000000003375.jpg -../coco/images/train2014/COCO_train2014_000000003386.jpg -../coco/images/train2014/COCO_train2014_000000003389.jpg -../coco/images/train2014/COCO_train2014_000000003398.jpg -../coco/images/train2014/COCO_train2014_000000003412.jpg -../coco/images/train2014/COCO_train2014_000000003432.jpg -../coco/images/train2014/COCO_train2014_000000003442.jpg -../coco/images/train2014/COCO_train2014_000000003457.jpg -../coco/images/train2014/COCO_train2014_000000003461.jpg -../coco/images/train2014/COCO_train2014_000000003464.jpg -../coco/images/train2014/COCO_train2014_000000003474.jpg -../coco/images/train2014/COCO_train2014_000000003478.jpg -../coco/images/train2014/COCO_train2014_000000003481.jpg -../coco/images/train2014/COCO_train2014_000000003483.jpg -../coco/images/train2014/COCO_train2014_000000003493.jpg -../coco/images/train2014/COCO_train2014_000000003511.jpg -../coco/images/train2014/COCO_train2014_000000003514.jpg -../coco/images/train2014/COCO_train2014_000000003517.jpg -../coco/images/train2014/COCO_train2014_000000003518.jpg -../coco/images/train2014/COCO_train2014_000000003521.jpg -../coco/images/train2014/COCO_train2014_000000003528.jpg -../coco/images/train2014/COCO_train2014_000000003532.jpg -../coco/images/train2014/COCO_train2014_000000003535.jpg -../coco/images/train2014/COCO_train2014_000000003538.jpg -../coco/images/train2014/COCO_train2014_000000003579.jpg -../coco/images/train2014/COCO_train2014_000000003602.jpg -../coco/images/train2014/COCO_train2014_000000003613.jpg -../coco/images/train2014/COCO_train2014_000000003623.jpg -../coco/images/train2014/COCO_train2014_000000003628.jpg -../coco/images/train2014/COCO_train2014_000000003637.jpg -../coco/images/train2014/COCO_train2014_000000003668.jpg -../coco/images/train2014/COCO_train2014_000000003671.jpg -../coco/images/train2014/COCO_train2014_000000003682.jpg -../coco/images/train2014/COCO_train2014_000000003685.jpg -../coco/images/train2014/COCO_train2014_000000003713.jpg -../coco/images/train2014/COCO_train2014_000000003729.jpg -../coco/images/train2014/COCO_train2014_000000003735.jpg -../coco/images/train2014/COCO_train2014_000000003737.jpg -../coco/images/train2014/COCO_train2014_000000003745.jpg -../coco/images/train2014/COCO_train2014_000000003751.jpg -../coco/images/train2014/COCO_train2014_000000003764.jpg -../coco/images/train2014/COCO_train2014_000000003770.jpg -../coco/images/train2014/COCO_train2014_000000003782.jpg -../coco/images/train2014/COCO_train2014_000000003789.jpg -../coco/images/train2014/COCO_train2014_000000003804.jpg -../coco/images/train2014/COCO_train2014_000000003812.jpg -../coco/images/train2014/COCO_train2014_000000003823.jpg -../coco/images/train2014/COCO_train2014_000000003827.jpg -../coco/images/train2014/COCO_train2014_000000003830.jpg -../coco/images/train2014/COCO_train2014_000000003860.jpg -../coco/images/train2014/COCO_train2014_000000003862.jpg -../coco/images/train2014/COCO_train2014_000000003866.jpg -../coco/images/train2014/COCO_train2014_000000003870.jpg -../coco/images/train2014/COCO_train2014_000000003877.jpg -../coco/images/train2014/COCO_train2014_000000003897.jpg -../coco/images/train2014/COCO_train2014_000000003899.jpg -../coco/images/train2014/COCO_train2014_000000003911.jpg -../coco/images/train2014/COCO_train2014_000000003915.jpg -../coco/images/train2014/COCO_train2014_000000003917.jpg -../coco/images/train2014/COCO_train2014_000000003920.jpg -../coco/images/train2014/COCO_train2014_000000003935.jpg -../coco/images/train2014/COCO_train2014_000000003967.jpg -../coco/images/train2014/COCO_train2014_000000003982.jpg -../coco/images/train2014/COCO_train2014_000000003988.jpg -../coco/images/train2014/COCO_train2014_000000003992.jpg -../coco/images/train2014/COCO_train2014_000000003995.jpg -../coco/images/train2014/COCO_train2014_000000003999.jpg -../coco/images/train2014/COCO_train2014_000000004020.jpg -../coco/images/train2014/COCO_train2014_000000004032.jpg -../coco/images/train2014/COCO_train2014_000000004038.jpg -../coco/images/train2014/COCO_train2014_000000004042.jpg -../coco/images/train2014/COCO_train2014_000000004051.jpg -../coco/images/train2014/COCO_train2014_000000004057.jpg -../coco/images/train2014/COCO_train2014_000000004065.jpg -../coco/images/train2014/COCO_train2014_000000004068.jpg -../coco/images/train2014/COCO_train2014_000000004080.jpg -../coco/images/train2014/COCO_train2014_000000004129.jpg -../coco/images/train2014/COCO_train2014_000000004130.jpg -../coco/images/train2014/COCO_train2014_000000004131.jpg -../coco/images/train2014/COCO_train2014_000000004132.jpg -../coco/images/train2014/COCO_train2014_000000004138.jpg -../coco/images/train2014/COCO_train2014_000000004139.jpg -../coco/images/train2014/COCO_train2014_000000004140.jpg -../coco/images/train2014/COCO_train2014_000000004159.jpg -../coco/images/train2014/COCO_train2014_000000004172.jpg -../coco/images/train2014/COCO_train2014_000000004173.jpg -../coco/images/train2014/COCO_train2014_000000004180.jpg -../coco/images/train2014/COCO_train2014_000000004189.jpg -../coco/images/train2014/COCO_train2014_000000004201.jpg -../coco/images/train2014/COCO_train2014_000000004208.jpg -../coco/images/train2014/COCO_train2014_000000004219.jpg -../coco/images/train2014/COCO_train2014_000000004239.jpg -../coco/images/train2014/COCO_train2014_000000004244.jpg -../coco/images/train2014/COCO_train2014_000000004245.jpg -../coco/images/train2014/COCO_train2014_000000004259.jpg -../coco/images/train2014/COCO_train2014_000000004260.jpg -../coco/images/train2014/COCO_train2014_000000004278.jpg -../coco/images/train2014/COCO_train2014_000000004282.jpg -../coco/images/train2014/COCO_train2014_000000004289.jpg -../coco/images/train2014/COCO_train2014_000000004309.jpg -../coco/images/train2014/COCO_train2014_000000004318.jpg -../coco/images/train2014/COCO_train2014_000000004319.jpg -../coco/images/train2014/COCO_train2014_000000004322.jpg -../coco/images/train2014/COCO_train2014_000000004331.jpg -../coco/images/train2014/COCO_train2014_000000004360.jpg -../coco/images/train2014/COCO_train2014_000000004376.jpg -../coco/images/train2014/COCO_train2014_000000004377.jpg -../coco/images/train2014/COCO_train2014_000000004385.jpg -../coco/images/train2014/COCO_train2014_000000004394.jpg -../coco/images/train2014/COCO_train2014_000000004404.jpg -../coco/images/train2014/COCO_train2014_000000004410.jpg -../coco/images/train2014/COCO_train2014_000000004415.jpg -../coco/images/train2014/COCO_train2014_000000004421.jpg -../coco/images/train2014/COCO_train2014_000000004424.jpg -../coco/images/train2014/COCO_train2014_000000004426.jpg -../coco/images/train2014/COCO_train2014_000000004428.jpg -../coco/images/train2014/COCO_train2014_000000004441.jpg -../coco/images/train2014/COCO_train2014_000000004442.jpg -../coco/images/train2014/COCO_train2014_000000004444.jpg -../coco/images/train2014/COCO_train2014_000000004462.jpg -../coco/images/train2014/COCO_train2014_000000004463.jpg -../coco/images/train2014/COCO_train2014_000000004471.jpg -../coco/images/train2014/COCO_train2014_000000004477.jpg -../coco/images/train2014/COCO_train2014_000000004478.jpg -../coco/images/train2014/COCO_train2014_000000004488.jpg -../coco/images/train2014/COCO_train2014_000000004489.jpg -../coco/images/train2014/COCO_train2014_000000004490.jpg -../coco/images/train2014/COCO_train2014_000000004502.jpg -../coco/images/train2014/COCO_train2014_000000004508.jpg -../coco/images/train2014/COCO_train2014_000000004527.jpg -../coco/images/train2014/COCO_train2014_000000004535.jpg -../coco/images/train2014/COCO_train2014_000000004537.jpg -../coco/images/train2014/COCO_train2014_000000004546.jpg -../coco/images/train2014/COCO_train2014_000000004549.jpg -../coco/images/train2014/COCO_train2014_000000004555.jpg -../coco/images/train2014/COCO_train2014_000000004567.jpg -../coco/images/train2014/COCO_train2014_000000004571.jpg -../coco/images/train2014/COCO_train2014_000000004574.jpg -../coco/images/train2014/COCO_train2014_000000004575.jpg -../coco/images/train2014/COCO_train2014_000000004578.jpg -../coco/images/train2014/COCO_train2014_000000004579.jpg -../coco/images/train2014/COCO_train2014_000000004587.jpg -../coco/images/train2014/COCO_train2014_000000004595.jpg -../coco/images/train2014/COCO_train2014_000000004608.jpg -../coco/images/train2014/COCO_train2014_000000004616.jpg -../coco/images/train2014/COCO_train2014_000000004622.jpg -../coco/images/train2014/COCO_train2014_000000004624.jpg -../coco/images/train2014/COCO_train2014_000000004642.jpg -../coco/images/train2014/COCO_train2014_000000004647.jpg -../coco/images/train2014/COCO_train2014_000000004662.jpg -../coco/images/train2014/COCO_train2014_000000004673.jpg -../coco/images/train2014/COCO_train2014_000000004684.jpg -../coco/images/train2014/COCO_train2014_000000004694.jpg -../coco/images/train2014/COCO_train2014_000000004702.jpg -../coco/images/train2014/COCO_train2014_000000004704.jpg -../coco/images/train2014/COCO_train2014_000000004705.jpg -../coco/images/train2014/COCO_train2014_000000004706.jpg -../coco/images/train2014/COCO_train2014_000000004711.jpg -../coco/images/train2014/COCO_train2014_000000004714.jpg -../coco/images/train2014/COCO_train2014_000000004716.jpg -../coco/images/train2014/COCO_train2014_000000004719.jpg -../coco/images/train2014/COCO_train2014_000000004739.jpg -../coco/images/train2014/COCO_train2014_000000004741.jpg -../coco/images/train2014/COCO_train2014_000000004761.jpg -../coco/images/train2014/COCO_train2014_000000004762.jpg -../coco/images/train2014/COCO_train2014_000000004785.jpg -../coco/images/train2014/COCO_train2014_000000004794.jpg -../coco/images/train2014/COCO_train2014_000000004796.jpg -../coco/images/train2014/COCO_train2014_000000004809.jpg -../coco/images/train2014/COCO_train2014_000000004820.jpg -../coco/images/train2014/COCO_train2014_000000004823.jpg -../coco/images/train2014/COCO_train2014_000000004827.jpg -../coco/images/train2014/COCO_train2014_000000004830.jpg -../coco/images/train2014/COCO_train2014_000000004834.jpg -../coco/images/train2014/COCO_train2014_000000004843.jpg -../coco/images/train2014/COCO_train2014_000000004844.jpg -../coco/images/train2014/COCO_train2014_000000004859.jpg -../coco/images/train2014/COCO_train2014_000000004876.jpg -../coco/images/train2014/COCO_train2014_000000004880.jpg -../coco/images/train2014/COCO_train2014_000000004885.jpg -../coco/images/train2014/COCO_train2014_000000004888.jpg -../coco/images/train2014/COCO_train2014_000000004891.jpg -../coco/images/train2014/COCO_train2014_000000004893.jpg -../coco/images/train2014/COCO_train2014_000000004901.jpg -../coco/images/train2014/COCO_train2014_000000004903.jpg -../coco/images/train2014/COCO_train2014_000000004904.jpg -../coco/images/train2014/COCO_train2014_000000004920.jpg -../coco/images/train2014/COCO_train2014_000000004931.jpg -../coco/images/train2014/COCO_train2014_000000004947.jpg -../coco/images/train2014/COCO_train2014_000000004956.jpg -../coco/images/train2014/COCO_train2014_000000004963.jpg -../coco/images/train2014/COCO_train2014_000000004968.jpg -../coco/images/train2014/COCO_train2014_000000004970.jpg -../coco/images/train2014/COCO_train2014_000000004971.jpg -../coco/images/train2014/COCO_train2014_000000004978.jpg -../coco/images/train2014/COCO_train2014_000000004981.jpg -../coco/images/train2014/COCO_train2014_000000004984.jpg -../coco/images/train2014/COCO_train2014_000000004993.jpg -../coco/images/train2014/COCO_train2014_000000005005.jpg -../coco/images/train2014/COCO_train2014_000000005010.jpg -../coco/images/train2014/COCO_train2014_000000005011.jpg -../coco/images/train2014/COCO_train2014_000000005016.jpg -../coco/images/train2014/COCO_train2014_000000005018.jpg -../coco/images/train2014/COCO_train2014_000000005021.jpg -../coco/images/train2014/COCO_train2014_000000005028.jpg -../coco/images/train2014/COCO_train2014_000000005046.jpg -../coco/images/train2014/COCO_train2014_000000005073.jpg -../coco/images/train2014/COCO_train2014_000000005083.jpg -../coco/images/train2014/COCO_train2014_000000005085.jpg -../coco/images/train2014/COCO_train2014_000000005086.jpg -../coco/images/train2014/COCO_train2014_000000005088.jpg -../coco/images/train2014/COCO_train2014_000000005094.jpg -../coco/images/train2014/COCO_train2014_000000005095.jpg -../coco/images/train2014/COCO_train2014_000000005099.jpg -../coco/images/train2014/COCO_train2014_000000005111.jpg -../coco/images/train2014/COCO_train2014_000000005113.jpg -../coco/images/train2014/COCO_train2014_000000005115.jpg -../coco/images/train2014/COCO_train2014_000000005131.jpg -../coco/images/train2014/COCO_train2014_000000005139.jpg -../coco/images/train2014/COCO_train2014_000000005140.jpg -../coco/images/train2014/COCO_train2014_000000005142.jpg -../coco/images/train2014/COCO_train2014_000000005151.jpg -../coco/images/train2014/COCO_train2014_000000005152.jpg -../coco/images/train2014/COCO_train2014_000000005156.jpg -../coco/images/train2014/COCO_train2014_000000005165.jpg -../coco/images/train2014/COCO_train2014_000000005169.jpg -../coco/images/train2014/COCO_train2014_000000005172.jpg -../coco/images/train2014/COCO_train2014_000000005174.jpg -../coco/images/train2014/COCO_train2014_000000005180.jpg -../coco/images/train2014/COCO_train2014_000000005198.jpg -../coco/images/train2014/COCO_train2014_000000005210.jpg -../coco/images/train2014/COCO_train2014_000000005215.jpg -../coco/images/train2014/COCO_train2014_000000005219.jpg -../coco/images/train2014/COCO_train2014_000000005237.jpg -../coco/images/train2014/COCO_train2014_000000005244.jpg -../coco/images/train2014/COCO_train2014_000000005253.jpg -../coco/images/train2014/COCO_train2014_000000005256.jpg -../coco/images/train2014/COCO_train2014_000000005259.jpg -../coco/images/train2014/COCO_train2014_000000005260.jpg -../coco/images/train2014/COCO_train2014_000000005263.jpg -../coco/images/train2014/COCO_train2014_000000005277.jpg -../coco/images/train2014/COCO_train2014_000000005288.jpg -../coco/images/train2014/COCO_train2014_000000005294.jpg -../coco/images/train2014/COCO_train2014_000000005303.jpg -../coco/images/train2014/COCO_train2014_000000005312.jpg -../coco/images/train2014/COCO_train2014_000000005313.jpg -../coco/images/train2014/COCO_train2014_000000005324.jpg -../coco/images/train2014/COCO_train2014_000000005326.jpg -../coco/images/train2014/COCO_train2014_000000005335.jpg -../coco/images/train2014/COCO_train2014_000000005336.jpg -../coco/images/train2014/COCO_train2014_000000005339.jpg -../coco/images/train2014/COCO_train2014_000000005340.jpg -../coco/images/train2014/COCO_train2014_000000005344.jpg -../coco/images/train2014/COCO_train2014_000000005345.jpg -../coco/images/train2014/COCO_train2014_000000005355.jpg -../coco/images/train2014/COCO_train2014_000000005359.jpg -../coco/images/train2014/COCO_train2014_000000005360.jpg -../coco/images/train2014/COCO_train2014_000000005362.jpg -../coco/images/train2014/COCO_train2014_000000005368.jpg -../coco/images/train2014/COCO_train2014_000000005373.jpg -../coco/images/train2014/COCO_train2014_000000005376.jpg -../coco/images/train2014/COCO_train2014_000000005377.jpg -../coco/images/train2014/COCO_train2014_000000005383.jpg -../coco/images/train2014/COCO_train2014_000000005396.jpg -../coco/images/train2014/COCO_train2014_000000005424.jpg -../coco/images/train2014/COCO_train2014_000000005425.jpg -../coco/images/train2014/COCO_train2014_000000005430.jpg -../coco/images/train2014/COCO_train2014_000000005434.jpg -../coco/images/train2014/COCO_train2014_000000005435.jpg -../coco/images/train2014/COCO_train2014_000000005453.jpg -../coco/images/train2014/COCO_train2014_000000005459.jpg -../coco/images/train2014/COCO_train2014_000000005469.jpg -../coco/images/train2014/COCO_train2014_000000005471.jpg -../coco/images/train2014/COCO_train2014_000000005472.jpg -../coco/images/train2014/COCO_train2014_000000005482.jpg -../coco/images/train2014/COCO_train2014_000000005483.jpg -../coco/images/train2014/COCO_train2014_000000005505.jpg -../coco/images/train2014/COCO_train2014_000000005508.jpg -../coco/images/train2014/COCO_train2014_000000005522.jpg -../coco/images/train2014/COCO_train2014_000000005554.jpg -../coco/images/train2014/COCO_train2014_000000005557.jpg -../coco/images/train2014/COCO_train2014_000000005559.jpg -../coco/images/train2014/COCO_train2014_000000005564.jpg -../coco/images/train2014/COCO_train2014_000000005574.jpg -../coco/images/train2014/COCO_train2014_000000005587.jpg -../coco/images/train2014/COCO_train2014_000000005589.jpg -../coco/images/train2014/COCO_train2014_000000005608.jpg -../coco/images/train2014/COCO_train2014_000000005612.jpg -../coco/images/train2014/COCO_train2014_000000005614.jpg -../coco/images/train2014/COCO_train2014_000000005615.jpg -../coco/images/train2014/COCO_train2014_000000005619.jpg -../coco/images/train2014/COCO_train2014_000000005620.jpg -../coco/images/train2014/COCO_train2014_000000005632.jpg -../coco/images/train2014/COCO_train2014_000000005638.jpg -../coco/images/train2014/COCO_train2014_000000005641.jpg -../coco/images/train2014/COCO_train2014_000000005643.jpg -../coco/images/train2014/COCO_train2014_000000005649.jpg -../coco/images/train2014/COCO_train2014_000000005667.jpg -../coco/images/train2014/COCO_train2014_000000005669.jpg -../coco/images/train2014/COCO_train2014_000000005678.jpg -../coco/images/train2014/COCO_train2014_000000005683.jpg -../coco/images/train2014/COCO_train2014_000000005684.jpg -../coco/images/train2014/COCO_train2014_000000005688.jpg -../coco/images/train2014/COCO_train2014_000000005689.jpg -../coco/images/train2014/COCO_train2014_000000005692.jpg -../coco/images/train2014/COCO_train2014_000000005699.jpg -../coco/images/train2014/COCO_train2014_000000005700.jpg -../coco/images/train2014/COCO_train2014_000000005701.jpg -../coco/images/train2014/COCO_train2014_000000005703.jpg -../coco/images/train2014/COCO_train2014_000000005715.jpg -../coco/images/train2014/COCO_train2014_000000005736.jpg -../coco/images/train2014/COCO_train2014_000000005740.jpg -../coco/images/train2014/COCO_train2014_000000005745.jpg -../coco/images/train2014/COCO_train2014_000000005755.jpg -../coco/images/train2014/COCO_train2014_000000005756.jpg -../coco/images/train2014/COCO_train2014_000000005757.jpg -../coco/images/train2014/COCO_train2014_000000005769.jpg -../coco/images/train2014/COCO_train2014_000000005782.jpg -../coco/images/train2014/COCO_train2014_000000005785.jpg -../coco/images/train2014/COCO_train2014_000000005809.jpg -../coco/images/train2014/COCO_train2014_000000005811.jpg -../coco/images/train2014/COCO_train2014_000000005823.jpg -../coco/images/train2014/COCO_train2014_000000005828.jpg -../coco/images/train2014/COCO_train2014_000000005830.jpg -../coco/images/train2014/COCO_train2014_000000005832.jpg -../coco/images/train2014/COCO_train2014_000000005862.jpg -../coco/images/train2014/COCO_train2014_000000005882.jpg -../coco/images/train2014/COCO_train2014_000000005883.jpg -../coco/images/train2014/COCO_train2014_000000005903.jpg -../coco/images/train2014/COCO_train2014_000000005906.jpg -../coco/images/train2014/COCO_train2014_000000005907.jpg -../coco/images/train2014/COCO_train2014_000000005913.jpg -../coco/images/train2014/COCO_train2014_000000005915.jpg -../coco/images/train2014/COCO_train2014_000000005916.jpg -../coco/images/train2014/COCO_train2014_000000005917.jpg -../coco/images/train2014/COCO_train2014_000000005933.jpg -../coco/images/train2014/COCO_train2014_000000005946.jpg -../coco/images/train2014/COCO_train2014_000000005947.jpg -../coco/images/train2014/COCO_train2014_000000005962.jpg -../coco/images/train2014/COCO_train2014_000000005967.jpg -../coco/images/train2014/COCO_train2014_000000005991.jpg -../coco/images/train2014/COCO_train2014_000000005994.jpg -../coco/images/train2014/COCO_train2014_000000006004.jpg -../coco/images/train2014/COCO_train2014_000000006010.jpg -../coco/images/train2014/COCO_train2014_000000006016.jpg -../coco/images/train2014/COCO_train2014_000000006026.jpg -../coco/images/train2014/COCO_train2014_000000006031.jpg -../coco/images/train2014/COCO_train2014_000000006041.jpg -../coco/images/train2014/COCO_train2014_000000006042.jpg -../coco/images/train2014/COCO_train2014_000000006051.jpg -../coco/images/train2014/COCO_train2014_000000006053.jpg -../coco/images/train2014/COCO_train2014_000000006057.jpg -../coco/images/train2014/COCO_train2014_000000006066.jpg -../coco/images/train2014/COCO_train2014_000000006068.jpg -../coco/images/train2014/COCO_train2014_000000006075.jpg -../coco/images/train2014/COCO_train2014_000000006101.jpg -../coco/images/train2014/COCO_train2014_000000006107.jpg -../coco/images/train2014/COCO_train2014_000000006120.jpg -../coco/images/train2014/COCO_train2014_000000006140.jpg -../coco/images/train2014/COCO_train2014_000000006146.jpg -../coco/images/train2014/COCO_train2014_000000006148.jpg -../coco/images/train2014/COCO_train2014_000000006151.jpg -../coco/images/train2014/COCO_train2014_000000006155.jpg -../coco/images/train2014/COCO_train2014_000000006160.jpg -../coco/images/train2014/COCO_train2014_000000006178.jpg -../coco/images/train2014/COCO_train2014_000000006182.jpg -../coco/images/train2014/COCO_train2014_000000006190.jpg -../coco/images/train2014/COCO_train2014_000000006197.jpg -../coco/images/train2014/COCO_train2014_000000006200.jpg -../coco/images/train2014/COCO_train2014_000000006216.jpg -../coco/images/train2014/COCO_train2014_000000006225.jpg -../coco/images/train2014/COCO_train2014_000000006229.jpg -../coco/images/train2014/COCO_train2014_000000006230.jpg -../coco/images/train2014/COCO_train2014_000000006233.jpg -../coco/images/train2014/COCO_train2014_000000006241.jpg -../coco/images/train2014/COCO_train2014_000000006247.jpg -../coco/images/train2014/COCO_train2014_000000006253.jpg -../coco/images/train2014/COCO_train2014_000000006262.jpg -../coco/images/train2014/COCO_train2014_000000006263.jpg -../coco/images/train2014/COCO_train2014_000000006268.jpg -../coco/images/train2014/COCO_train2014_000000006270.jpg -../coco/images/train2014/COCO_train2014_000000006287.jpg -../coco/images/train2014/COCO_train2014_000000006293.jpg -../coco/images/train2014/COCO_train2014_000000006295.jpg -../coco/images/train2014/COCO_train2014_000000006318.jpg -../coco/images/train2014/COCO_train2014_000000006327.jpg -../coco/images/train2014/COCO_train2014_000000006332.jpg -../coco/images/train2014/COCO_train2014_000000006334.jpg -../coco/images/train2014/COCO_train2014_000000006336.jpg -../coco/images/train2014/COCO_train2014_000000006338.jpg -../coco/images/train2014/COCO_train2014_000000006339.jpg -../coco/images/train2014/COCO_train2014_000000006352.jpg -../coco/images/train2014/COCO_train2014_000000006355.jpg -../coco/images/train2014/COCO_train2014_000000006357.jpg -../coco/images/train2014/COCO_train2014_000000006358.jpg -../coco/images/train2014/COCO_train2014_000000006363.jpg -../coco/images/train2014/COCO_train2014_000000006364.jpg -../coco/images/train2014/COCO_train2014_000000006379.jpg -../coco/images/train2014/COCO_train2014_000000006380.jpg -../coco/images/train2014/COCO_train2014_000000006406.jpg -../coco/images/train2014/COCO_train2014_000000006407.jpg -../coco/images/train2014/COCO_train2014_000000006409.jpg -../coco/images/train2014/COCO_train2014_000000006414.jpg -../coco/images/train2014/COCO_train2014_000000006421.jpg -../coco/images/train2014/COCO_train2014_000000006422.jpg -../coco/images/train2014/COCO_train2014_000000006424.jpg -../coco/images/train2014/COCO_train2014_000000006428.jpg -../coco/images/train2014/COCO_train2014_000000006432.jpg -../coco/images/train2014/COCO_train2014_000000006447.jpg -../coco/images/train2014/COCO_train2014_000000006451.jpg -../coco/images/train2014/COCO_train2014_000000006464.jpg -../coco/images/train2014/COCO_train2014_000000006465.jpg -../coco/images/train2014/COCO_train2014_000000006481.jpg -../coco/images/train2014/COCO_train2014_000000006488.jpg -../coco/images/train2014/COCO_train2014_000000006489.jpg -../coco/images/train2014/COCO_train2014_000000006491.jpg -../coco/images/train2014/COCO_train2014_000000006512.jpg -../coco/images/train2014/COCO_train2014_000000006517.jpg -../coco/images/train2014/COCO_train2014_000000006518.jpg -../coco/images/train2014/COCO_train2014_000000006520.jpg -../coco/images/train2014/COCO_train2014_000000006522.jpg -../coco/images/train2014/COCO_train2014_000000006531.jpg -../coco/images/train2014/COCO_train2014_000000006539.jpg -../coco/images/train2014/COCO_train2014_000000006541.jpg -../coco/images/train2014/COCO_train2014_000000006560.jpg -../coco/images/train2014/COCO_train2014_000000006562.jpg -../coco/images/train2014/COCO_train2014_000000006572.jpg -../coco/images/train2014/COCO_train2014_000000006578.jpg -../coco/images/train2014/COCO_train2014_000000006586.jpg -../coco/images/train2014/COCO_train2014_000000006590.jpg -../coco/images/train2014/COCO_train2014_000000006595.jpg -../coco/images/train2014/COCO_train2014_000000006599.jpg -../coco/images/train2014/COCO_train2014_000000006602.jpg -../coco/images/train2014/COCO_train2014_000000006603.jpg -../coco/images/train2014/COCO_train2014_000000006627.jpg -../coco/images/train2014/COCO_train2014_000000006631.jpg -../coco/images/train2014/COCO_train2014_000000006632.jpg -../coco/images/train2014/COCO_train2014_000000006640.jpg -../coco/images/train2014/COCO_train2014_000000006647.jpg -../coco/images/train2014/COCO_train2014_000000006651.jpg -../coco/images/train2014/COCO_train2014_000000006664.jpg -../coco/images/train2014/COCO_train2014_000000006675.jpg -../coco/images/train2014/COCO_train2014_000000006692.jpg -../coco/images/train2014/COCO_train2014_000000006709.jpg -../coco/images/train2014/COCO_train2014_000000006710.jpg -../coco/images/train2014/COCO_train2014_000000006715.jpg -../coco/images/train2014/COCO_train2014_000000006721.jpg -../coco/images/train2014/COCO_train2014_000000006725.jpg -../coco/images/train2014/COCO_train2014_000000006730.jpg -../coco/images/train2014/COCO_train2014_000000006733.jpg -../coco/images/train2014/COCO_train2014_000000006744.jpg -../coco/images/train2014/COCO_train2014_000000006747.jpg -../coco/images/train2014/COCO_train2014_000000006749.jpg -../coco/images/train2014/COCO_train2014_000000006753.jpg -../coco/images/train2014/COCO_train2014_000000006760.jpg -../coco/images/train2014/COCO_train2014_000000006764.jpg -../coco/images/train2014/COCO_train2014_000000006765.jpg -../coco/images/train2014/COCO_train2014_000000006773.jpg -../coco/images/train2014/COCO_train2014_000000006777.jpg -../coco/images/train2014/COCO_train2014_000000006780.jpg -../coco/images/train2014/COCO_train2014_000000006790.jpg -../coco/images/train2014/COCO_train2014_000000006792.jpg -../coco/images/train2014/COCO_train2014_000000006800.jpg -../coco/images/train2014/COCO_train2014_000000006809.jpg -../coco/images/train2014/COCO_train2014_000000006811.jpg -../coco/images/train2014/COCO_train2014_000000006819.jpg -../coco/images/train2014/COCO_train2014_000000006824.jpg -../coco/images/train2014/COCO_train2014_000000006842.jpg -../coco/images/train2014/COCO_train2014_000000006846.jpg -../coco/images/train2014/COCO_train2014_000000006860.jpg -../coco/images/train2014/COCO_train2014_000000006862.jpg -../coco/images/train2014/COCO_train2014_000000006873.jpg -../coco/images/train2014/COCO_train2014_000000006901.jpg -../coco/images/train2014/COCO_train2014_000000006914.jpg -../coco/images/train2014/COCO_train2014_000000006920.jpg -../coco/images/train2014/COCO_train2014_000000006935.jpg -../coco/images/train2014/COCO_train2014_000000006936.jpg -../coco/images/train2014/COCO_train2014_000000006941.jpg -../coco/images/train2014/COCO_train2014_000000006943.jpg -../coco/images/train2014/COCO_train2014_000000006945.jpg -../coco/images/train2014/COCO_train2014_000000006957.jpg -../coco/images/train2014/COCO_train2014_000000006964.jpg -../coco/images/train2014/COCO_train2014_000000006973.jpg -../coco/images/train2014/COCO_train2014_000000006981.jpg -../coco/images/train2014/COCO_train2014_000000006990.jpg -../coco/images/train2014/COCO_train2014_000000006996.jpg -../coco/images/train2014/COCO_train2014_000000006998.jpg -../coco/images/train2014/COCO_train2014_000000007022.jpg -../coco/images/train2014/COCO_train2014_000000007028.jpg -../coco/images/train2014/COCO_train2014_000000007035.jpg -../coco/images/train2014/COCO_train2014_000000007040.jpg -../coco/images/train2014/COCO_train2014_000000007048.jpg -../coco/images/train2014/COCO_train2014_000000007049.jpg -../coco/images/train2014/COCO_train2014_000000007069.jpg -../coco/images/train2014/COCO_train2014_000000007090.jpg -../coco/images/train2014/COCO_train2014_000000007095.jpg -../coco/images/train2014/COCO_train2014_000000007103.jpg -../coco/images/train2014/COCO_train2014_000000007104.jpg -../coco/images/train2014/COCO_train2014_000000007116.jpg -../coco/images/train2014/COCO_train2014_000000007123.jpg -../coco/images/train2014/COCO_train2014_000000007124.jpg -../coco/images/train2014/COCO_train2014_000000007129.jpg -../coco/images/train2014/COCO_train2014_000000007139.jpg -../coco/images/train2014/COCO_train2014_000000007143.jpg -../coco/images/train2014/COCO_train2014_000000007145.jpg -../coco/images/train2014/COCO_train2014_000000007150.jpg -../coco/images/train2014/COCO_train2014_000000007159.jpg -../coco/images/train2014/COCO_train2014_000000007167.jpg -../coco/images/train2014/COCO_train2014_000000007174.jpg -../coco/images/train2014/COCO_train2014_000000007179.jpg -../coco/images/train2014/COCO_train2014_000000007201.jpg -../coco/images/train2014/COCO_train2014_000000007205.jpg -../coco/images/train2014/COCO_train2014_000000007220.jpg -../coco/images/train2014/COCO_train2014_000000007221.jpg -../coco/images/train2014/COCO_train2014_000000007224.jpg -../coco/images/train2014/COCO_train2014_000000007228.jpg -../coco/images/train2014/COCO_train2014_000000007232.jpg -../coco/images/train2014/COCO_train2014_000000007239.jpg -../coco/images/train2014/COCO_train2014_000000007247.jpg -../coco/images/train2014/COCO_train2014_000000007251.jpg -../coco/images/train2014/COCO_train2014_000000007275.jpg -../coco/images/train2014/COCO_train2014_000000007277.jpg -../coco/images/train2014/COCO_train2014_000000007307.jpg -../coco/images/train2014/COCO_train2014_000000007318.jpg -../coco/images/train2014/COCO_train2014_000000007319.jpg -../coco/images/train2014/COCO_train2014_000000007357.jpg -../coco/images/train2014/COCO_train2014_000000007361.jpg -../coco/images/train2014/COCO_train2014_000000007367.jpg -../coco/images/train2014/COCO_train2014_000000007393.jpg -../coco/images/train2014/COCO_train2014_000000007396.jpg -../coco/images/train2014/COCO_train2014_000000007420.jpg -../coco/images/train2014/COCO_train2014_000000007424.jpg -../coco/images/train2014/COCO_train2014_000000007452.jpg -../coco/images/train2014/COCO_train2014_000000007455.jpg -../coco/images/train2014/COCO_train2014_000000007476.jpg -../coco/images/train2014/COCO_train2014_000000007489.jpg -../coco/images/train2014/COCO_train2014_000000007498.jpg -../coco/images/train2014/COCO_train2014_000000007500.jpg -../coco/images/train2014/COCO_train2014_000000007503.jpg -../coco/images/train2014/COCO_train2014_000000007504.jpg -../coco/images/train2014/COCO_train2014_000000007510.jpg -../coco/images/train2014/COCO_train2014_000000007517.jpg -../coco/images/train2014/COCO_train2014_000000007524.jpg -../coco/images/train2014/COCO_train2014_000000007535.jpg -../coco/images/train2014/COCO_train2014_000000007539.jpg -../coco/images/train2014/COCO_train2014_000000007544.jpg -../coco/images/train2014/COCO_train2014_000000007558.jpg -../coco/images/train2014/COCO_train2014_000000007567.jpg -../coco/images/train2014/COCO_train2014_000000007583.jpg -../coco/images/train2014/COCO_train2014_000000007584.jpg -../coco/images/train2014/COCO_train2014_000000007594.jpg -../coco/images/train2014/COCO_train2014_000000007596.jpg -../coco/images/train2014/COCO_train2014_000000007601.jpg -../coco/images/train2014/COCO_train2014_000000007603.jpg diff --git a/data/coco_1000val.data b/data/coco_1000val.data deleted file mode 100644 index 726906b298..0000000000 --- a/data/coco_1000val.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_1000img.txt -valid=./data/coco_1000val.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_1000val.txt b/data/coco_1000val.txt deleted file mode 100644 index dd97b56856..0000000000 --- a/data/coco_1000val.txt +++ /dev/null @@ -1,1000 +0,0 @@ -../coco/images/val2014/COCO_val2014_000000000164.jpg -../coco/images/val2014/COCO_val2014_000000000192.jpg -../coco/images/val2014/COCO_val2014_000000000283.jpg -../coco/images/val2014/COCO_val2014_000000000397.jpg -../coco/images/val2014/COCO_val2014_000000000589.jpg -../coco/images/val2014/COCO_val2014_000000000599.jpg -../coco/images/val2014/COCO_val2014_000000000711.jpg -../coco/images/val2014/COCO_val2014_000000000757.jpg -../coco/images/val2014/COCO_val2014_000000000764.jpg -../coco/images/val2014/COCO_val2014_000000000872.jpg -../coco/images/val2014/COCO_val2014_000000001063.jpg -../coco/images/val2014/COCO_val2014_000000001554.jpg -../coco/images/val2014/COCO_val2014_000000001667.jpg -../coco/images/val2014/COCO_val2014_000000001700.jpg -../coco/images/val2014/COCO_val2014_000000001869.jpg -../coco/images/val2014/COCO_val2014_000000002124.jpg -../coco/images/val2014/COCO_val2014_000000002261.jpg -../coco/images/val2014/COCO_val2014_000000002621.jpg -../coco/images/val2014/COCO_val2014_000000002684.jpg -../coco/images/val2014/COCO_val2014_000000002764.jpg -../coco/images/val2014/COCO_val2014_000000002894.jpg -../coco/images/val2014/COCO_val2014_000000002972.jpg -../coco/images/val2014/COCO_val2014_000000003035.jpg -../coco/images/val2014/COCO_val2014_000000003084.jpg -../coco/images/val2014/COCO_val2014_000000003103.jpg -../coco/images/val2014/COCO_val2014_000000003109.jpg -../coco/images/val2014/COCO_val2014_000000003134.jpg -../coco/images/val2014/COCO_val2014_000000003209.jpg -../coco/images/val2014/COCO_val2014_000000003244.jpg -../coco/images/val2014/COCO_val2014_000000003326.jpg -../coco/images/val2014/COCO_val2014_000000003337.jpg -../coco/images/val2014/COCO_val2014_000000003661.jpg -../coco/images/val2014/COCO_val2014_000000003711.jpg -../coco/images/val2014/COCO_val2014_000000003779.jpg -../coco/images/val2014/COCO_val2014_000000003865.jpg -../coco/images/val2014/COCO_val2014_000000004079.jpg -../coco/images/val2014/COCO_val2014_000000004092.jpg -../coco/images/val2014/COCO_val2014_000000004283.jpg -../coco/images/val2014/COCO_val2014_000000004296.jpg -../coco/images/val2014/COCO_val2014_000000004392.jpg -../coco/images/val2014/COCO_val2014_000000004742.jpg -../coco/images/val2014/COCO_val2014_000000004754.jpg -../coco/images/val2014/COCO_val2014_000000004764.jpg -../coco/images/val2014/COCO_val2014_000000005038.jpg -../coco/images/val2014/COCO_val2014_000000005060.jpg -../coco/images/val2014/COCO_val2014_000000005124.jpg -../coco/images/val2014/COCO_val2014_000000005178.jpg -../coco/images/val2014/COCO_val2014_000000005205.jpg -../coco/images/val2014/COCO_val2014_000000005443.jpg -../coco/images/val2014/COCO_val2014_000000005652.jpg -../coco/images/val2014/COCO_val2014_000000005723.jpg -../coco/images/val2014/COCO_val2014_000000005804.jpg -../coco/images/val2014/COCO_val2014_000000006074.jpg -../coco/images/val2014/COCO_val2014_000000006091.jpg -../coco/images/val2014/COCO_val2014_000000006153.jpg -../coco/images/val2014/COCO_val2014_000000006213.jpg -../coco/images/val2014/COCO_val2014_000000006497.jpg -../coco/images/val2014/COCO_val2014_000000006789.jpg -../coco/images/val2014/COCO_val2014_000000006847.jpg -../coco/images/val2014/COCO_val2014_000000007241.jpg -../coco/images/val2014/COCO_val2014_000000007256.jpg -../coco/images/val2014/COCO_val2014_000000007281.jpg -../coco/images/val2014/COCO_val2014_000000007795.jpg -../coco/images/val2014/COCO_val2014_000000007867.jpg -../coco/images/val2014/COCO_val2014_000000007873.jpg -../coco/images/val2014/COCO_val2014_000000007899.jpg -../coco/images/val2014/COCO_val2014_000000008010.jpg -../coco/images/val2014/COCO_val2014_000000008179.jpg -../coco/images/val2014/COCO_val2014_000000008190.jpg -../coco/images/val2014/COCO_val2014_000000008204.jpg -../coco/images/val2014/COCO_val2014_000000008350.jpg -../coco/images/val2014/COCO_val2014_000000008493.jpg -../coco/images/val2014/COCO_val2014_000000008853.jpg -../coco/images/val2014/COCO_val2014_000000009105.jpg -../coco/images/val2014/COCO_val2014_000000009156.jpg -../coco/images/val2014/COCO_val2014_000000009217.jpg -../coco/images/val2014/COCO_val2014_000000009270.jpg -../coco/images/val2014/COCO_val2014_000000009286.jpg -../coco/images/val2014/COCO_val2014_000000009548.jpg -../coco/images/val2014/COCO_val2014_000000009553.jpg -../coco/images/val2014/COCO_val2014_000000009727.jpg -../coco/images/val2014/COCO_val2014_000000009908.jpg -../coco/images/val2014/COCO_val2014_000000010114.jpg -../coco/images/val2014/COCO_val2014_000000010249.jpg -../coco/images/val2014/COCO_val2014_000000010395.jpg -../coco/images/val2014/COCO_val2014_000000010400.jpg -../coco/images/val2014/COCO_val2014_000000010463.jpg -../coco/images/val2014/COCO_val2014_000000010613.jpg -../coco/images/val2014/COCO_val2014_000000010764.jpg -../coco/images/val2014/COCO_val2014_000000010779.jpg -../coco/images/val2014/COCO_val2014_000000010928.jpg -../coco/images/val2014/COCO_val2014_000000011099.jpg -../coco/images/val2014/COCO_val2014_000000011181.jpg -../coco/images/val2014/COCO_val2014_000000011184.jpg -../coco/images/val2014/COCO_val2014_000000011197.jpg -../coco/images/val2014/COCO_val2014_000000011320.jpg -../coco/images/val2014/COCO_val2014_000000011721.jpg -../coco/images/val2014/COCO_val2014_000000011813.jpg -../coco/images/val2014/COCO_val2014_000000012014.jpg -../coco/images/val2014/COCO_val2014_000000012047.jpg -../coco/images/val2014/COCO_val2014_000000012085.jpg -../coco/images/val2014/COCO_val2014_000000012115.jpg -../coco/images/val2014/COCO_val2014_000000012166.jpg -../coco/images/val2014/COCO_val2014_000000012230.jpg -../coco/images/val2014/COCO_val2014_000000012370.jpg -../coco/images/val2014/COCO_val2014_000000012375.jpg -../coco/images/val2014/COCO_val2014_000000012448.jpg -../coco/images/val2014/COCO_val2014_000000012543.jpg -../coco/images/val2014/COCO_val2014_000000012744.jpg -../coco/images/val2014/COCO_val2014_000000012897.jpg -../coco/images/val2014/COCO_val2014_000000012966.jpg -../coco/images/val2014/COCO_val2014_000000012993.jpg -../coco/images/val2014/COCO_val2014_000000013004.jpg -../coco/images/val2014/COCO_val2014_000000013333.jpg -../coco/images/val2014/COCO_val2014_000000013357.jpg -../coco/images/val2014/COCO_val2014_000000013774.jpg -../coco/images/val2014/COCO_val2014_000000014029.jpg -../coco/images/val2014/COCO_val2014_000000014056.jpg -../coco/images/val2014/COCO_val2014_000000014108.jpg -../coco/images/val2014/COCO_val2014_000000014135.jpg -../coco/images/val2014/COCO_val2014_000000014226.jpg -../coco/images/val2014/COCO_val2014_000000014306.jpg -../coco/images/val2014/COCO_val2014_000000014591.jpg -../coco/images/val2014/COCO_val2014_000000014629.jpg -../coco/images/val2014/COCO_val2014_000000014756.jpg -../coco/images/val2014/COCO_val2014_000000014874.jpg -../coco/images/val2014/COCO_val2014_000000014990.jpg -../coco/images/val2014/COCO_val2014_000000015386.jpg -../coco/images/val2014/COCO_val2014_000000015559.jpg -../coco/images/val2014/COCO_val2014_000000015599.jpg -../coco/images/val2014/COCO_val2014_000000015709.jpg -../coco/images/val2014/COCO_val2014_000000015735.jpg -../coco/images/val2014/COCO_val2014_000000015751.jpg -../coco/images/val2014/COCO_val2014_000000015883.jpg -../coco/images/val2014/COCO_val2014_000000015953.jpg -../coco/images/val2014/COCO_val2014_000000015956.jpg -../coco/images/val2014/COCO_val2014_000000015968.jpg -../coco/images/val2014/COCO_val2014_000000015987.jpg -../coco/images/val2014/COCO_val2014_000000016030.jpg -../coco/images/val2014/COCO_val2014_000000016076.jpg -../coco/images/val2014/COCO_val2014_000000016228.jpg -../coco/images/val2014/COCO_val2014_000000016241.jpg -../coco/images/val2014/COCO_val2014_000000016257.jpg -../coco/images/val2014/COCO_val2014_000000016327.jpg -../coco/images/val2014/COCO_val2014_000000016410.jpg -../coco/images/val2014/COCO_val2014_000000016574.jpg -../coco/images/val2014/COCO_val2014_000000016716.jpg -../coco/images/val2014/COCO_val2014_000000016928.jpg -../coco/images/val2014/COCO_val2014_000000016995.jpg -../coco/images/val2014/COCO_val2014_000000017235.jpg -../coco/images/val2014/COCO_val2014_000000017379.jpg -../coco/images/val2014/COCO_val2014_000000017667.jpg -../coco/images/val2014/COCO_val2014_000000017755.jpg -../coco/images/val2014/COCO_val2014_000000018295.jpg -../coco/images/val2014/COCO_val2014_000000018358.jpg -../coco/images/val2014/COCO_val2014_000000018476.jpg -../coco/images/val2014/COCO_val2014_000000018750.jpg -../coco/images/val2014/COCO_val2014_000000018783.jpg -../coco/images/val2014/COCO_val2014_000000019025.jpg -../coco/images/val2014/COCO_val2014_000000019042.jpg -../coco/images/val2014/COCO_val2014_000000019129.jpg -../coco/images/val2014/COCO_val2014_000000019176.jpg -../coco/images/val2014/COCO_val2014_000000019491.jpg -../coco/images/val2014/COCO_val2014_000000019890.jpg -../coco/images/val2014/COCO_val2014_000000019923.jpg -../coco/images/val2014/COCO_val2014_000000020001.jpg -../coco/images/val2014/COCO_val2014_000000020038.jpg -../coco/images/val2014/COCO_val2014_000000020175.jpg -../coco/images/val2014/COCO_val2014_000000020268.jpg -../coco/images/val2014/COCO_val2014_000000020273.jpg -../coco/images/val2014/COCO_val2014_000000020349.jpg -../coco/images/val2014/COCO_val2014_000000020553.jpg -../coco/images/val2014/COCO_val2014_000000020788.jpg -../coco/images/val2014/COCO_val2014_000000020912.jpg -../coco/images/val2014/COCO_val2014_000000020947.jpg -../coco/images/val2014/COCO_val2014_000000020972.jpg -../coco/images/val2014/COCO_val2014_000000021161.jpg -../coco/images/val2014/COCO_val2014_000000021483.jpg -../coco/images/val2014/COCO_val2014_000000021588.jpg -../coco/images/val2014/COCO_val2014_000000021639.jpg -../coco/images/val2014/COCO_val2014_000000021644.jpg -../coco/images/val2014/COCO_val2014_000000021645.jpg -../coco/images/val2014/COCO_val2014_000000021671.jpg -../coco/images/val2014/COCO_val2014_000000021746.jpg -../coco/images/val2014/COCO_val2014_000000021839.jpg -../coco/images/val2014/COCO_val2014_000000022002.jpg -../coco/images/val2014/COCO_val2014_000000022129.jpg -../coco/images/val2014/COCO_val2014_000000022191.jpg -../coco/images/val2014/COCO_val2014_000000022215.jpg -../coco/images/val2014/COCO_val2014_000000022341.jpg -../coco/images/val2014/COCO_val2014_000000022492.jpg -../coco/images/val2014/COCO_val2014_000000022563.jpg -../coco/images/val2014/COCO_val2014_000000022660.jpg -../coco/images/val2014/COCO_val2014_000000022705.jpg -../coco/images/val2014/COCO_val2014_000000023017.jpg -../coco/images/val2014/COCO_val2014_000000023309.jpg -../coco/images/val2014/COCO_val2014_000000023411.jpg -../coco/images/val2014/COCO_val2014_000000023754.jpg -../coco/images/val2014/COCO_val2014_000000023802.jpg -../coco/images/val2014/COCO_val2014_000000023981.jpg -../coco/images/val2014/COCO_val2014_000000023995.jpg -../coco/images/val2014/COCO_val2014_000000024112.jpg -../coco/images/val2014/COCO_val2014_000000024247.jpg -../coco/images/val2014/COCO_val2014_000000024396.jpg -../coco/images/val2014/COCO_val2014_000000024776.jpg -../coco/images/val2014/COCO_val2014_000000024924.jpg -../coco/images/val2014/COCO_val2014_000000025096.jpg -../coco/images/val2014/COCO_val2014_000000025191.jpg -../coco/images/val2014/COCO_val2014_000000025252.jpg -../coco/images/val2014/COCO_val2014_000000025293.jpg -../coco/images/val2014/COCO_val2014_000000025360.jpg -../coco/images/val2014/COCO_val2014_000000025595.jpg -../coco/images/val2014/COCO_val2014_000000025685.jpg -../coco/images/val2014/COCO_val2014_000000025807.jpg -../coco/images/val2014/COCO_val2014_000000025864.jpg -../coco/images/val2014/COCO_val2014_000000025989.jpg -../coco/images/val2014/COCO_val2014_000000026026.jpg -../coco/images/val2014/COCO_val2014_000000026430.jpg -../coco/images/val2014/COCO_val2014_000000026432.jpg -../coco/images/val2014/COCO_val2014_000000026534.jpg -../coco/images/val2014/COCO_val2014_000000026560.jpg -../coco/images/val2014/COCO_val2014_000000026564.jpg -../coco/images/val2014/COCO_val2014_000000026671.jpg -../coco/images/val2014/COCO_val2014_000000026690.jpg -../coco/images/val2014/COCO_val2014_000000026734.jpg -../coco/images/val2014/COCO_val2014_000000026799.jpg -../coco/images/val2014/COCO_val2014_000000026907.jpg -../coco/images/val2014/COCO_val2014_000000026908.jpg -../coco/images/val2014/COCO_val2014_000000026946.jpg -../coco/images/val2014/COCO_val2014_000000027530.jpg -../coco/images/val2014/COCO_val2014_000000027610.jpg -../coco/images/val2014/COCO_val2014_000000027620.jpg -../coco/images/val2014/COCO_val2014_000000027787.jpg -../coco/images/val2014/COCO_val2014_000000027789.jpg -../coco/images/val2014/COCO_val2014_000000027874.jpg -../coco/images/val2014/COCO_val2014_000000027946.jpg -../coco/images/val2014/COCO_val2014_000000027975.jpg -../coco/images/val2014/COCO_val2014_000000028022.jpg -../coco/images/val2014/COCO_val2014_000000028039.jpg -../coco/images/val2014/COCO_val2014_000000028273.jpg -../coco/images/val2014/COCO_val2014_000000028540.jpg -../coco/images/val2014/COCO_val2014_000000028702.jpg -../coco/images/val2014/COCO_val2014_000000028820.jpg -../coco/images/val2014/COCO_val2014_000000028874.jpg -../coco/images/val2014/COCO_val2014_000000029019.jpg -../coco/images/val2014/COCO_val2014_000000029030.jpg -../coco/images/val2014/COCO_val2014_000000029170.jpg -../coco/images/val2014/COCO_val2014_000000029308.jpg -../coco/images/val2014/COCO_val2014_000000029393.jpg -../coco/images/val2014/COCO_val2014_000000029524.jpg -../coco/images/val2014/COCO_val2014_000000029577.jpg -../coco/images/val2014/COCO_val2014_000000029648.jpg -../coco/images/val2014/COCO_val2014_000000029656.jpg -../coco/images/val2014/COCO_val2014_000000029697.jpg -../coco/images/val2014/COCO_val2014_000000029709.jpg -../coco/images/val2014/COCO_val2014_000000029719.jpg -../coco/images/val2014/COCO_val2014_000000030034.jpg -../coco/images/val2014/COCO_val2014_000000030062.jpg -../coco/images/val2014/COCO_val2014_000000030383.jpg -../coco/images/val2014/COCO_val2014_000000030470.jpg -../coco/images/val2014/COCO_val2014_000000030548.jpg -../coco/images/val2014/COCO_val2014_000000030668.jpg -../coco/images/val2014/COCO_val2014_000000030793.jpg -../coco/images/val2014/COCO_val2014_000000030843.jpg -../coco/images/val2014/COCO_val2014_000000030998.jpg -../coco/images/val2014/COCO_val2014_000000031151.jpg -../coco/images/val2014/COCO_val2014_000000031164.jpg -../coco/images/val2014/COCO_val2014_000000031176.jpg -../coco/images/val2014/COCO_val2014_000000031247.jpg -../coco/images/val2014/COCO_val2014_000000031392.jpg -../coco/images/val2014/COCO_val2014_000000031521.jpg -../coco/images/val2014/COCO_val2014_000000031542.jpg -../coco/images/val2014/COCO_val2014_000000031817.jpg -../coco/images/val2014/COCO_val2014_000000032081.jpg -../coco/images/val2014/COCO_val2014_000000032193.jpg -../coco/images/val2014/COCO_val2014_000000032331.jpg -../coco/images/val2014/COCO_val2014_000000032464.jpg -../coco/images/val2014/COCO_val2014_000000032510.jpg -../coco/images/val2014/COCO_val2014_000000032524.jpg -../coco/images/val2014/COCO_val2014_000000032625.jpg -../coco/images/val2014/COCO_val2014_000000032677.jpg -../coco/images/val2014/COCO_val2014_000000032715.jpg -../coco/images/val2014/COCO_val2014_000000032947.jpg -../coco/images/val2014/COCO_val2014_000000032964.jpg -../coco/images/val2014/COCO_val2014_000000033006.jpg -../coco/images/val2014/COCO_val2014_000000033055.jpg -../coco/images/val2014/COCO_val2014_000000033158.jpg -../coco/images/val2014/COCO_val2014_000000033243.jpg -../coco/images/val2014/COCO_val2014_000000033345.jpg -../coco/images/val2014/COCO_val2014_000000033499.jpg -../coco/images/val2014/COCO_val2014_000000033561.jpg -../coco/images/val2014/COCO_val2014_000000033830.jpg -../coco/images/val2014/COCO_val2014_000000033835.jpg -../coco/images/val2014/COCO_val2014_000000033924.jpg -../coco/images/val2014/COCO_val2014_000000034056.jpg -../coco/images/val2014/COCO_val2014_000000034114.jpg -../coco/images/val2014/COCO_val2014_000000034137.jpg -../coco/images/val2014/COCO_val2014_000000034183.jpg -../coco/images/val2014/COCO_val2014_000000034193.jpg -../coco/images/val2014/COCO_val2014_000000034299.jpg -../coco/images/val2014/COCO_val2014_000000034452.jpg -../coco/images/val2014/COCO_val2014_000000034689.jpg -../coco/images/val2014/COCO_val2014_000000034877.jpg -../coco/images/val2014/COCO_val2014_000000034892.jpg -../coco/images/val2014/COCO_val2014_000000034930.jpg -../coco/images/val2014/COCO_val2014_000000035012.jpg -../coco/images/val2014/COCO_val2014_000000035222.jpg -../coco/images/val2014/COCO_val2014_000000035326.jpg -../coco/images/val2014/COCO_val2014_000000035368.jpg -../coco/images/val2014/COCO_val2014_000000035474.jpg -../coco/images/val2014/COCO_val2014_000000035498.jpg -../coco/images/val2014/COCO_val2014_000000035738.jpg -../coco/images/val2014/COCO_val2014_000000035826.jpg -../coco/images/val2014/COCO_val2014_000000035940.jpg -../coco/images/val2014/COCO_val2014_000000035966.jpg -../coco/images/val2014/COCO_val2014_000000036049.jpg -../coco/images/val2014/COCO_val2014_000000036252.jpg -../coco/images/val2014/COCO_val2014_000000036508.jpg -../coco/images/val2014/COCO_val2014_000000036522.jpg -../coco/images/val2014/COCO_val2014_000000036539.jpg -../coco/images/val2014/COCO_val2014_000000036563.jpg -../coco/images/val2014/COCO_val2014_000000037038.jpg -../coco/images/val2014/COCO_val2014_000000037629.jpg -../coco/images/val2014/COCO_val2014_000000037675.jpg -../coco/images/val2014/COCO_val2014_000000037846.jpg -../coco/images/val2014/COCO_val2014_000000037865.jpg -../coco/images/val2014/COCO_val2014_000000037907.jpg -../coco/images/val2014/COCO_val2014_000000037988.jpg -../coco/images/val2014/COCO_val2014_000000038031.jpg -../coco/images/val2014/COCO_val2014_000000038190.jpg -../coco/images/val2014/COCO_val2014_000000038252.jpg -../coco/images/val2014/COCO_val2014_000000038296.jpg -../coco/images/val2014/COCO_val2014_000000038465.jpg -../coco/images/val2014/COCO_val2014_000000038488.jpg -../coco/images/val2014/COCO_val2014_000000038531.jpg -../coco/images/val2014/COCO_val2014_000000038539.jpg -../coco/images/val2014/COCO_val2014_000000038645.jpg -../coco/images/val2014/COCO_val2014_000000038685.jpg -../coco/images/val2014/COCO_val2014_000000038825.jpg -../coco/images/val2014/COCO_val2014_000000039322.jpg -../coco/images/val2014/COCO_val2014_000000039480.jpg -../coco/images/val2014/COCO_val2014_000000039697.jpg -../coco/images/val2014/COCO_val2014_000000039731.jpg -../coco/images/val2014/COCO_val2014_000000039743.jpg -../coco/images/val2014/COCO_val2014_000000039785.jpg -../coco/images/val2014/COCO_val2014_000000039961.jpg -../coco/images/val2014/COCO_val2014_000000040426.jpg -../coco/images/val2014/COCO_val2014_000000040485.jpg -../coco/images/val2014/COCO_val2014_000000040681.jpg -../coco/images/val2014/COCO_val2014_000000040686.jpg -../coco/images/val2014/COCO_val2014_000000040886.jpg -../coco/images/val2014/COCO_val2014_000000041119.jpg -../coco/images/val2014/COCO_val2014_000000041147.jpg -../coco/images/val2014/COCO_val2014_000000041322.jpg -../coco/images/val2014/COCO_val2014_000000041373.jpg -../coco/images/val2014/COCO_val2014_000000041550.jpg -../coco/images/val2014/COCO_val2014_000000041635.jpg -../coco/images/val2014/COCO_val2014_000000041867.jpg -../coco/images/val2014/COCO_val2014_000000041872.jpg -../coco/images/val2014/COCO_val2014_000000041924.jpg -../coco/images/val2014/COCO_val2014_000000042137.jpg -../coco/images/val2014/COCO_val2014_000000042279.jpg -../coco/images/val2014/COCO_val2014_000000042492.jpg -../coco/images/val2014/COCO_val2014_000000042576.jpg -../coco/images/val2014/COCO_val2014_000000042661.jpg -../coco/images/val2014/COCO_val2014_000000042743.jpg -../coco/images/val2014/COCO_val2014_000000042805.jpg -../coco/images/val2014/COCO_val2014_000000042837.jpg -../coco/images/val2014/COCO_val2014_000000043165.jpg -../coco/images/val2014/COCO_val2014_000000043218.jpg -../coco/images/val2014/COCO_val2014_000000043261.jpg -../coco/images/val2014/COCO_val2014_000000043404.jpg -../coco/images/val2014/COCO_val2014_000000043542.jpg -../coco/images/val2014/COCO_val2014_000000043605.jpg -../coco/images/val2014/COCO_val2014_000000043614.jpg -../coco/images/val2014/COCO_val2014_000000043673.jpg -../coco/images/val2014/COCO_val2014_000000043816.jpg -../coco/images/val2014/COCO_val2014_000000043850.jpg -../coco/images/val2014/COCO_val2014_000000044220.jpg -../coco/images/val2014/COCO_val2014_000000044269.jpg -../coco/images/val2014/COCO_val2014_000000044309.jpg -../coco/images/val2014/COCO_val2014_000000044478.jpg -../coco/images/val2014/COCO_val2014_000000044536.jpg -../coco/images/val2014/COCO_val2014_000000044559.jpg -../coco/images/val2014/COCO_val2014_000000044575.jpg -../coco/images/val2014/COCO_val2014_000000044612.jpg -../coco/images/val2014/COCO_val2014_000000044677.jpg -../coco/images/val2014/COCO_val2014_000000044699.jpg -../coco/images/val2014/COCO_val2014_000000044823.jpg -../coco/images/val2014/COCO_val2014_000000044989.jpg -../coco/images/val2014/COCO_val2014_000000045094.jpg -../coco/images/val2014/COCO_val2014_000000045176.jpg -../coco/images/val2014/COCO_val2014_000000045197.jpg -../coco/images/val2014/COCO_val2014_000000045367.jpg -../coco/images/val2014/COCO_val2014_000000045392.jpg -../coco/images/val2014/COCO_val2014_000000045433.jpg -../coco/images/val2014/COCO_val2014_000000045463.jpg -../coco/images/val2014/COCO_val2014_000000045550.jpg -../coco/images/val2014/COCO_val2014_000000045574.jpg -../coco/images/val2014/COCO_val2014_000000045627.jpg -../coco/images/val2014/COCO_val2014_000000045685.jpg -../coco/images/val2014/COCO_val2014_000000045728.jpg -../coco/images/val2014/COCO_val2014_000000046252.jpg -../coco/images/val2014/COCO_val2014_000000046269.jpg -../coco/images/val2014/COCO_val2014_000000046329.jpg -../coco/images/val2014/COCO_val2014_000000046805.jpg -../coco/images/val2014/COCO_val2014_000000046869.jpg -../coco/images/val2014/COCO_val2014_000000046919.jpg -../coco/images/val2014/COCO_val2014_000000046924.jpg -../coco/images/val2014/COCO_val2014_000000047008.jpg -../coco/images/val2014/COCO_val2014_000000047131.jpg -../coco/images/val2014/COCO_val2014_000000047226.jpg -../coco/images/val2014/COCO_val2014_000000047263.jpg -../coco/images/val2014/COCO_val2014_000000047395.jpg -../coco/images/val2014/COCO_val2014_000000047552.jpg -../coco/images/val2014/COCO_val2014_000000047570.jpg -../coco/images/val2014/COCO_val2014_000000047720.jpg -../coco/images/val2014/COCO_val2014_000000047775.jpg -../coco/images/val2014/COCO_val2014_000000047886.jpg -../coco/images/val2014/COCO_val2014_000000048504.jpg -../coco/images/val2014/COCO_val2014_000000048564.jpg -../coco/images/val2014/COCO_val2014_000000048668.jpg -../coco/images/val2014/COCO_val2014_000000048731.jpg -../coco/images/val2014/COCO_val2014_000000048739.jpg -../coco/images/val2014/COCO_val2014_000000048791.jpg -../coco/images/val2014/COCO_val2014_000000048840.jpg -../coco/images/val2014/COCO_val2014_000000048905.jpg -../coco/images/val2014/COCO_val2014_000000048910.jpg -../coco/images/val2014/COCO_val2014_000000048924.jpg -../coco/images/val2014/COCO_val2014_000000048956.jpg -../coco/images/val2014/COCO_val2014_000000049075.jpg -../coco/images/val2014/COCO_val2014_000000049236.jpg -../coco/images/val2014/COCO_val2014_000000049676.jpg -../coco/images/val2014/COCO_val2014_000000049881.jpg -../coco/images/val2014/COCO_val2014_000000049985.jpg -../coco/images/val2014/COCO_val2014_000000050100.jpg -../coco/images/val2014/COCO_val2014_000000050145.jpg -../coco/images/val2014/COCO_val2014_000000050177.jpg -../coco/images/val2014/COCO_val2014_000000050324.jpg -../coco/images/val2014/COCO_val2014_000000050331.jpg -../coco/images/val2014/COCO_val2014_000000050481.jpg -../coco/images/val2014/COCO_val2014_000000050485.jpg -../coco/images/val2014/COCO_val2014_000000050493.jpg -../coco/images/val2014/COCO_val2014_000000050746.jpg -../coco/images/val2014/COCO_val2014_000000050844.jpg -../coco/images/val2014/COCO_val2014_000000050896.jpg -../coco/images/val2014/COCO_val2014_000000051249.jpg -../coco/images/val2014/COCO_val2014_000000051250.jpg -../coco/images/val2014/COCO_val2014_000000051289.jpg -../coco/images/val2014/COCO_val2014_000000051314.jpg -../coco/images/val2014/COCO_val2014_000000051339.jpg -../coco/images/val2014/COCO_val2014_000000051461.jpg -../coco/images/val2014/COCO_val2014_000000051476.jpg -../coco/images/val2014/COCO_val2014_000000052005.jpg -../coco/images/val2014/COCO_val2014_000000052020.jpg -../coco/images/val2014/COCO_val2014_000000052290.jpg -../coco/images/val2014/COCO_val2014_000000052314.jpg -../coco/images/val2014/COCO_val2014_000000052425.jpg -../coco/images/val2014/COCO_val2014_000000052575.jpg -../coco/images/val2014/COCO_val2014_000000052871.jpg -../coco/images/val2014/COCO_val2014_000000052982.jpg -../coco/images/val2014/COCO_val2014_000000053139.jpg -../coco/images/val2014/COCO_val2014_000000053183.jpg -../coco/images/val2014/COCO_val2014_000000053263.jpg -../coco/images/val2014/COCO_val2014_000000053491.jpg -../coco/images/val2014/COCO_val2014_000000053503.jpg -../coco/images/val2014/COCO_val2014_000000053580.jpg -../coco/images/val2014/COCO_val2014_000000053616.jpg -../coco/images/val2014/COCO_val2014_000000053907.jpg -../coco/images/val2014/COCO_val2014_000000053949.jpg -../coco/images/val2014/COCO_val2014_000000054301.jpg -../coco/images/val2014/COCO_val2014_000000054334.jpg -../coco/images/val2014/COCO_val2014_000000054490.jpg -../coco/images/val2014/COCO_val2014_000000054527.jpg -../coco/images/val2014/COCO_val2014_000000054533.jpg -../coco/images/val2014/COCO_val2014_000000054603.jpg -../coco/images/val2014/COCO_val2014_000000054643.jpg -../coco/images/val2014/COCO_val2014_000000054679.jpg -../coco/images/val2014/COCO_val2014_000000054723.jpg -../coco/images/val2014/COCO_val2014_000000054959.jpg -../coco/images/val2014/COCO_val2014_000000055167.jpg -../coco/images/val2014/COCO_val2014_000000056137.jpg -../coco/images/val2014/COCO_val2014_000000056326.jpg -../coco/images/val2014/COCO_val2014_000000056541.jpg -../coco/images/val2014/COCO_val2014_000000056562.jpg -../coco/images/val2014/COCO_val2014_000000056624.jpg -../coco/images/val2014/COCO_val2014_000000056633.jpg -../coco/images/val2014/COCO_val2014_000000056724.jpg -../coco/images/val2014/COCO_val2014_000000056739.jpg -../coco/images/val2014/COCO_val2014_000000057027.jpg -../coco/images/val2014/COCO_val2014_000000057091.jpg -../coco/images/val2014/COCO_val2014_000000057095.jpg -../coco/images/val2014/COCO_val2014_000000057100.jpg -../coco/images/val2014/COCO_val2014_000000057149.jpg -../coco/images/val2014/COCO_val2014_000000057238.jpg -../coco/images/val2014/COCO_val2014_000000057359.jpg -../coco/images/val2014/COCO_val2014_000000057454.jpg -../coco/images/val2014/COCO_val2014_000000058001.jpg -../coco/images/val2014/COCO_val2014_000000058157.jpg -../coco/images/val2014/COCO_val2014_000000058223.jpg -../coco/images/val2014/COCO_val2014_000000058232.jpg -../coco/images/val2014/COCO_val2014_000000058344.jpg -../coco/images/val2014/COCO_val2014_000000058522.jpg -../coco/images/val2014/COCO_val2014_000000058636.jpg -../coco/images/val2014/COCO_val2014_000000058800.jpg -../coco/images/val2014/COCO_val2014_000000058949.jpg -../coco/images/val2014/COCO_val2014_000000059009.jpg -../coco/images/val2014/COCO_val2014_000000059202.jpg -../coco/images/val2014/COCO_val2014_000000059393.jpg -../coco/images/val2014/COCO_val2014_000000059652.jpg -../coco/images/val2014/COCO_val2014_000000060010.jpg -../coco/images/val2014/COCO_val2014_000000060049.jpg -../coco/images/val2014/COCO_val2014_000000060126.jpg -../coco/images/val2014/COCO_val2014_000000060128.jpg -../coco/images/val2014/COCO_val2014_000000060448.jpg -../coco/images/val2014/COCO_val2014_000000060548.jpg -../coco/images/val2014/COCO_val2014_000000060677.jpg -../coco/images/val2014/COCO_val2014_000000060760.jpg -../coco/images/val2014/COCO_val2014_000000060823.jpg -../coco/images/val2014/COCO_val2014_000000060859.jpg -../coco/images/val2014/COCO_val2014_000000060899.jpg -../coco/images/val2014/COCO_val2014_000000061171.jpg -../coco/images/val2014/COCO_val2014_000000061503.jpg -../coco/images/val2014/COCO_val2014_000000061520.jpg -../coco/images/val2014/COCO_val2014_000000061531.jpg -../coco/images/val2014/COCO_val2014_000000061564.jpg -../coco/images/val2014/COCO_val2014_000000061658.jpg -../coco/images/val2014/COCO_val2014_000000061693.jpg -../coco/images/val2014/COCO_val2014_000000061717.jpg -../coco/images/val2014/COCO_val2014_000000061836.jpg -../coco/images/val2014/COCO_val2014_000000062041.jpg -../coco/images/val2014/COCO_val2014_000000062060.jpg -../coco/images/val2014/COCO_val2014_000000062198.jpg -../coco/images/val2014/COCO_val2014_000000062200.jpg -../coco/images/val2014/COCO_val2014_000000062220.jpg -../coco/images/val2014/COCO_val2014_000000062623.jpg -../coco/images/val2014/COCO_val2014_000000062726.jpg -../coco/images/val2014/COCO_val2014_000000062875.jpg -../coco/images/val2014/COCO_val2014_000000063047.jpg -../coco/images/val2014/COCO_val2014_000000063114.jpg -../coco/images/val2014/COCO_val2014_000000063488.jpg -../coco/images/val2014/COCO_val2014_000000063671.jpg -../coco/images/val2014/COCO_val2014_000000063715.jpg -../coco/images/val2014/COCO_val2014_000000063804.jpg -../coco/images/val2014/COCO_val2014_000000063882.jpg -../coco/images/val2014/COCO_val2014_000000063939.jpg -../coco/images/val2014/COCO_val2014_000000063965.jpg -../coco/images/val2014/COCO_val2014_000000064155.jpg -../coco/images/val2014/COCO_val2014_000000064189.jpg -../coco/images/val2014/COCO_val2014_000000064196.jpg -../coco/images/val2014/COCO_val2014_000000064495.jpg -../coco/images/val2014/COCO_val2014_000000064610.jpg -../coco/images/val2014/COCO_val2014_000000064693.jpg -../coco/images/val2014/COCO_val2014_000000064746.jpg -../coco/images/val2014/COCO_val2014_000000064760.jpg -../coco/images/val2014/COCO_val2014_000000064796.jpg -../coco/images/val2014/COCO_val2014_000000064865.jpg -../coco/images/val2014/COCO_val2014_000000064915.jpg -../coco/images/val2014/COCO_val2014_000000065074.jpg -../coco/images/val2014/COCO_val2014_000000065124.jpg -../coco/images/val2014/COCO_val2014_000000065258.jpg -../coco/images/val2014/COCO_val2014_000000065267.jpg -../coco/images/val2014/COCO_val2014_000000065430.jpg -../coco/images/val2014/COCO_val2014_000000065465.jpg -../coco/images/val2014/COCO_val2014_000000065942.jpg -../coco/images/val2014/COCO_val2014_000000066001.jpg -../coco/images/val2014/COCO_val2014_000000066064.jpg -../coco/images/val2014/COCO_val2014_000000066072.jpg -../coco/images/val2014/COCO_val2014_000000066239.jpg -../coco/images/val2014/COCO_val2014_000000066243.jpg -../coco/images/val2014/COCO_val2014_000000066355.jpg -../coco/images/val2014/COCO_val2014_000000066412.jpg -../coco/images/val2014/COCO_val2014_000000066423.jpg -../coco/images/val2014/COCO_val2014_000000066427.jpg -../coco/images/val2014/COCO_val2014_000000066502.jpg -../coco/images/val2014/COCO_val2014_000000066519.jpg -../coco/images/val2014/COCO_val2014_000000066561.jpg -../coco/images/val2014/COCO_val2014_000000066700.jpg -../coco/images/val2014/COCO_val2014_000000066717.jpg -../coco/images/val2014/COCO_val2014_000000066879.jpg -../coco/images/val2014/COCO_val2014_000000067178.jpg -../coco/images/val2014/COCO_val2014_000000067207.jpg -../coco/images/val2014/COCO_val2014_000000067218.jpg -../coco/images/val2014/COCO_val2014_000000067412.jpg -../coco/images/val2014/COCO_val2014_000000067532.jpg -../coco/images/val2014/COCO_val2014_000000067590.jpg -../coco/images/val2014/COCO_val2014_000000067660.jpg -../coco/images/val2014/COCO_val2014_000000067686.jpg -../coco/images/val2014/COCO_val2014_000000067704.jpg -../coco/images/val2014/COCO_val2014_000000067776.jpg -../coco/images/val2014/COCO_val2014_000000067948.jpg -../coco/images/val2014/COCO_val2014_000000067953.jpg -../coco/images/val2014/COCO_val2014_000000068059.jpg -../coco/images/val2014/COCO_val2014_000000068204.jpg -../coco/images/val2014/COCO_val2014_000000068205.jpg -../coco/images/val2014/COCO_val2014_000000068409.jpg -../coco/images/val2014/COCO_val2014_000000068435.jpg -../coco/images/val2014/COCO_val2014_000000068520.jpg -../coco/images/val2014/COCO_val2014_000000068546.jpg -../coco/images/val2014/COCO_val2014_000000068674.jpg -../coco/images/val2014/COCO_val2014_000000068745.jpg -../coco/images/val2014/COCO_val2014_000000069009.jpg -../coco/images/val2014/COCO_val2014_000000069077.jpg -../coco/images/val2014/COCO_val2014_000000069196.jpg -../coco/images/val2014/COCO_val2014_000000069356.jpg -../coco/images/val2014/COCO_val2014_000000069568.jpg -../coco/images/val2014/COCO_val2014_000000069577.jpg -../coco/images/val2014/COCO_val2014_000000069698.jpg -../coco/images/val2014/COCO_val2014_000000070493.jpg -../coco/images/val2014/COCO_val2014_000000070896.jpg -../coco/images/val2014/COCO_val2014_000000071023.jpg -../coco/images/val2014/COCO_val2014_000000071123.jpg -../coco/images/val2014/COCO_val2014_000000071241.jpg -../coco/images/val2014/COCO_val2014_000000071301.jpg -../coco/images/val2014/COCO_val2014_000000071345.jpg -../coco/images/val2014/COCO_val2014_000000071451.jpg -../coco/images/val2014/COCO_val2014_000000071673.jpg -../coco/images/val2014/COCO_val2014_000000071826.jpg -../coco/images/val2014/COCO_val2014_000000071986.jpg -../coco/images/val2014/COCO_val2014_000000072004.jpg -../coco/images/val2014/COCO_val2014_000000072020.jpg -../coco/images/val2014/COCO_val2014_000000072052.jpg -../coco/images/val2014/COCO_val2014_000000072281.jpg -../coco/images/val2014/COCO_val2014_000000072368.jpg -../coco/images/val2014/COCO_val2014_000000072737.jpg -../coco/images/val2014/COCO_val2014_000000072797.jpg -../coco/images/val2014/COCO_val2014_000000072860.jpg -../coco/images/val2014/COCO_val2014_000000073009.jpg -../coco/images/val2014/COCO_val2014_000000073039.jpg -../coco/images/val2014/COCO_val2014_000000073239.jpg -../coco/images/val2014/COCO_val2014_000000073467.jpg -../coco/images/val2014/COCO_val2014_000000073491.jpg -../coco/images/val2014/COCO_val2014_000000073588.jpg -../coco/images/val2014/COCO_val2014_000000073729.jpg -../coco/images/val2014/COCO_val2014_000000073973.jpg -../coco/images/val2014/COCO_val2014_000000074037.jpg -../coco/images/val2014/COCO_val2014_000000074137.jpg -../coco/images/val2014/COCO_val2014_000000074268.jpg -../coco/images/val2014/COCO_val2014_000000074434.jpg -../coco/images/val2014/COCO_val2014_000000074789.jpg -../coco/images/val2014/COCO_val2014_000000074963.jpg -../coco/images/val2014/COCO_val2014_000000075033.jpg -../coco/images/val2014/COCO_val2014_000000075372.jpg -../coco/images/val2014/COCO_val2014_000000075527.jpg -../coco/images/val2014/COCO_val2014_000000075646.jpg -../coco/images/val2014/COCO_val2014_000000075713.jpg -../coco/images/val2014/COCO_val2014_000000075775.jpg -../coco/images/val2014/COCO_val2014_000000075786.jpg -../coco/images/val2014/COCO_val2014_000000075886.jpg -../coco/images/val2014/COCO_val2014_000000076087.jpg -../coco/images/val2014/COCO_val2014_000000076257.jpg -../coco/images/val2014/COCO_val2014_000000076521.jpg -../coco/images/val2014/COCO_val2014_000000076572.jpg -../coco/images/val2014/COCO_val2014_000000076844.jpg -../coco/images/val2014/COCO_val2014_000000077178.jpg -../coco/images/val2014/COCO_val2014_000000077181.jpg -../coco/images/val2014/COCO_val2014_000000077184.jpg -../coco/images/val2014/COCO_val2014_000000077396.jpg -../coco/images/val2014/COCO_val2014_000000077400.jpg -../coco/images/val2014/COCO_val2014_000000077415.jpg -../coco/images/val2014/COCO_val2014_000000078565.jpg -../coco/images/val2014/COCO_val2014_000000078701.jpg -../coco/images/val2014/COCO_val2014_000000078843.jpg -../coco/images/val2014/COCO_val2014_000000078929.jpg -../coco/images/val2014/COCO_val2014_000000079084.jpg -../coco/images/val2014/COCO_val2014_000000079188.jpg -../coco/images/val2014/COCO_val2014_000000079544.jpg -../coco/images/val2014/COCO_val2014_000000079566.jpg -../coco/images/val2014/COCO_val2014_000000079588.jpg -../coco/images/val2014/COCO_val2014_000000079689.jpg -../coco/images/val2014/COCO_val2014_000000080104.jpg -../coco/images/val2014/COCO_val2014_000000080172.jpg -../coco/images/val2014/COCO_val2014_000000080219.jpg -../coco/images/val2014/COCO_val2014_000000080300.jpg -../coco/images/val2014/COCO_val2014_000000080395.jpg -../coco/images/val2014/COCO_val2014_000000080522.jpg -../coco/images/val2014/COCO_val2014_000000080714.jpg -../coco/images/val2014/COCO_val2014_000000080737.jpg -../coco/images/val2014/COCO_val2014_000000080747.jpg -../coco/images/val2014/COCO_val2014_000000081000.jpg -../coco/images/val2014/COCO_val2014_000000081081.jpg -../coco/images/val2014/COCO_val2014_000000081100.jpg -../coco/images/val2014/COCO_val2014_000000081287.jpg -../coco/images/val2014/COCO_val2014_000000081394.jpg -../coco/images/val2014/COCO_val2014_000000081552.jpg -../coco/images/val2014/COCO_val2014_000000082157.jpg -../coco/images/val2014/COCO_val2014_000000082252.jpg -../coco/images/val2014/COCO_val2014_000000082259.jpg -../coco/images/val2014/COCO_val2014_000000082367.jpg -../coco/images/val2014/COCO_val2014_000000082431.jpg -../coco/images/val2014/COCO_val2014_000000082456.jpg -../coco/images/val2014/COCO_val2014_000000082794.jpg -../coco/images/val2014/COCO_val2014_000000082807.jpg -../coco/images/val2014/COCO_val2014_000000082846.jpg -../coco/images/val2014/COCO_val2014_000000082847.jpg -../coco/images/val2014/COCO_val2014_000000082889.jpg -../coco/images/val2014/COCO_val2014_000000082981.jpg -../coco/images/val2014/COCO_val2014_000000083036.jpg -../coco/images/val2014/COCO_val2014_000000083065.jpg -../coco/images/val2014/COCO_val2014_000000083142.jpg -../coco/images/val2014/COCO_val2014_000000083275.jpg -../coco/images/val2014/COCO_val2014_000000083557.jpg -../coco/images/val2014/COCO_val2014_000000084073.jpg -../coco/images/val2014/COCO_val2014_000000084447.jpg -../coco/images/val2014/COCO_val2014_000000084463.jpg -../coco/images/val2014/COCO_val2014_000000084592.jpg -../coco/images/val2014/COCO_val2014_000000084674.jpg -../coco/images/val2014/COCO_val2014_000000084762.jpg -../coco/images/val2014/COCO_val2014_000000084870.jpg -../coco/images/val2014/COCO_val2014_000000084929.jpg -../coco/images/val2014/COCO_val2014_000000084980.jpg -../coco/images/val2014/COCO_val2014_000000085101.jpg -../coco/images/val2014/COCO_val2014_000000085292.jpg -../coco/images/val2014/COCO_val2014_000000085353.jpg -../coco/images/val2014/COCO_val2014_000000085674.jpg -../coco/images/val2014/COCO_val2014_000000085813.jpg -../coco/images/val2014/COCO_val2014_000000086011.jpg -../coco/images/val2014/COCO_val2014_000000086133.jpg -../coco/images/val2014/COCO_val2014_000000086136.jpg -../coco/images/val2014/COCO_val2014_000000086215.jpg -../coco/images/val2014/COCO_val2014_000000086220.jpg -../coco/images/val2014/COCO_val2014_000000086249.jpg -../coco/images/val2014/COCO_val2014_000000086320.jpg -../coco/images/val2014/COCO_val2014_000000086357.jpg -../coco/images/val2014/COCO_val2014_000000086429.jpg -../coco/images/val2014/COCO_val2014_000000086467.jpg -../coco/images/val2014/COCO_val2014_000000086483.jpg -../coco/images/val2014/COCO_val2014_000000086646.jpg -../coco/images/val2014/COCO_val2014_000000086755.jpg -../coco/images/val2014/COCO_val2014_000000086839.jpg -../coco/images/val2014/COCO_val2014_000000086848.jpg -../coco/images/val2014/COCO_val2014_000000086877.jpg -../coco/images/val2014/COCO_val2014_000000087038.jpg -../coco/images/val2014/COCO_val2014_000000087244.jpg -../coco/images/val2014/COCO_val2014_000000087354.jpg -../coco/images/val2014/COCO_val2014_000000087387.jpg -../coco/images/val2014/COCO_val2014_000000087489.jpg -../coco/images/val2014/COCO_val2014_000000087503.jpg -../coco/images/val2014/COCO_val2014_000000087617.jpg -../coco/images/val2014/COCO_val2014_000000087638.jpg -../coco/images/val2014/COCO_val2014_000000087740.jpg -../coco/images/val2014/COCO_val2014_000000087875.jpg -../coco/images/val2014/COCO_val2014_000000088360.jpg -../coco/images/val2014/COCO_val2014_000000088507.jpg -../coco/images/val2014/COCO_val2014_000000088560.jpg -../coco/images/val2014/COCO_val2014_000000088846.jpg -../coco/images/val2014/COCO_val2014_000000088859.jpg -../coco/images/val2014/COCO_val2014_000000088902.jpg -../coco/images/val2014/COCO_val2014_000000089027.jpg -../coco/images/val2014/COCO_val2014_000000089258.jpg -../coco/images/val2014/COCO_val2014_000000089285.jpg -../coco/images/val2014/COCO_val2014_000000089359.jpg -../coco/images/val2014/COCO_val2014_000000089378.jpg -../coco/images/val2014/COCO_val2014_000000089391.jpg -../coco/images/val2014/COCO_val2014_000000089487.jpg -../coco/images/val2014/COCO_val2014_000000089618.jpg -../coco/images/val2014/COCO_val2014_000000089670.jpg -../coco/images/val2014/COCO_val2014_000000090003.jpg -../coco/images/val2014/COCO_val2014_000000090062.jpg -../coco/images/val2014/COCO_val2014_000000090155.jpg -../coco/images/val2014/COCO_val2014_000000090208.jpg -../coco/images/val2014/COCO_val2014_000000090351.jpg -../coco/images/val2014/COCO_val2014_000000090476.jpg -../coco/images/val2014/COCO_val2014_000000090594.jpg -../coco/images/val2014/COCO_val2014_000000090753.jpg -../coco/images/val2014/COCO_val2014_000000090754.jpg -../coco/images/val2014/COCO_val2014_000000090864.jpg -../coco/images/val2014/COCO_val2014_000000091079.jpg -../coco/images/val2014/COCO_val2014_000000091341.jpg -../coco/images/val2014/COCO_val2014_000000091402.jpg -../coco/images/val2014/COCO_val2014_000000091517.jpg -../coco/images/val2014/COCO_val2014_000000091520.jpg -../coco/images/val2014/COCO_val2014_000000091612.jpg -../coco/images/val2014/COCO_val2014_000000091716.jpg -../coco/images/val2014/COCO_val2014_000000091766.jpg -../coco/images/val2014/COCO_val2014_000000091857.jpg -../coco/images/val2014/COCO_val2014_000000091899.jpg -../coco/images/val2014/COCO_val2014_000000091912.jpg -../coco/images/val2014/COCO_val2014_000000092093.jpg -../coco/images/val2014/COCO_val2014_000000092124.jpg -../coco/images/val2014/COCO_val2014_000000092679.jpg -../coco/images/val2014/COCO_val2014_000000092683.jpg -../coco/images/val2014/COCO_val2014_000000092939.jpg -../coco/images/val2014/COCO_val2014_000000092985.jpg -../coco/images/val2014/COCO_val2014_000000093175.jpg -../coco/images/val2014/COCO_val2014_000000093236.jpg -../coco/images/val2014/COCO_val2014_000000093331.jpg -../coco/images/val2014/COCO_val2014_000000093434.jpg -../coco/images/val2014/COCO_val2014_000000093607.jpg -../coco/images/val2014/COCO_val2014_000000093806.jpg -../coco/images/val2014/COCO_val2014_000000093964.jpg -../coco/images/val2014/COCO_val2014_000000094012.jpg -../coco/images/val2014/COCO_val2014_000000094033.jpg -../coco/images/val2014/COCO_val2014_000000094046.jpg -../coco/images/val2014/COCO_val2014_000000094052.jpg -../coco/images/val2014/COCO_val2014_000000094055.jpg -../coco/images/val2014/COCO_val2014_000000094501.jpg -../coco/images/val2014/COCO_val2014_000000094619.jpg -../coco/images/val2014/COCO_val2014_000000094746.jpg -../coco/images/val2014/COCO_val2014_000000094795.jpg -../coco/images/val2014/COCO_val2014_000000094846.jpg -../coco/images/val2014/COCO_val2014_000000095062.jpg -../coco/images/val2014/COCO_val2014_000000095063.jpg -../coco/images/val2014/COCO_val2014_000000095227.jpg -../coco/images/val2014/COCO_val2014_000000095441.jpg -../coco/images/val2014/COCO_val2014_000000095551.jpg -../coco/images/val2014/COCO_val2014_000000095670.jpg -../coco/images/val2014/COCO_val2014_000000095770.jpg -../coco/images/val2014/COCO_val2014_000000096110.jpg -../coco/images/val2014/COCO_val2014_000000096288.jpg -../coco/images/val2014/COCO_val2014_000000096327.jpg -../coco/images/val2014/COCO_val2014_000000096351.jpg -../coco/images/val2014/COCO_val2014_000000096618.jpg -../coco/images/val2014/COCO_val2014_000000096654.jpg -../coco/images/val2014/COCO_val2014_000000096762.jpg -../coco/images/val2014/COCO_val2014_000000096769.jpg -../coco/images/val2014/COCO_val2014_000000096998.jpg -../coco/images/val2014/COCO_val2014_000000097017.jpg -../coco/images/val2014/COCO_val2014_000000097048.jpg -../coco/images/val2014/COCO_val2014_000000097080.jpg -../coco/images/val2014/COCO_val2014_000000097240.jpg -../coco/images/val2014/COCO_val2014_000000097479.jpg -../coco/images/val2014/COCO_val2014_000000097577.jpg -../coco/images/val2014/COCO_val2014_000000097610.jpg -../coco/images/val2014/COCO_val2014_000000097656.jpg -../coco/images/val2014/COCO_val2014_000000097667.jpg -../coco/images/val2014/COCO_val2014_000000097682.jpg -../coco/images/val2014/COCO_val2014_000000097748.jpg -../coco/images/val2014/COCO_val2014_000000097868.jpg -../coco/images/val2014/COCO_val2014_000000097899.jpg -../coco/images/val2014/COCO_val2014_000000098018.jpg -../coco/images/val2014/COCO_val2014_000000098043.jpg -../coco/images/val2014/COCO_val2014_000000098095.jpg -../coco/images/val2014/COCO_val2014_000000098194.jpg -../coco/images/val2014/COCO_val2014_000000098280.jpg -../coco/images/val2014/COCO_val2014_000000098283.jpg -../coco/images/val2014/COCO_val2014_000000098599.jpg -../coco/images/val2014/COCO_val2014_000000098872.jpg -../coco/images/val2014/COCO_val2014_000000099026.jpg -../coco/images/val2014/COCO_val2014_000000099260.jpg -../coco/images/val2014/COCO_val2014_000000099389.jpg -../coco/images/val2014/COCO_val2014_000000099707.jpg -../coco/images/val2014/COCO_val2014_000000099961.jpg -../coco/images/val2014/COCO_val2014_000000099996.jpg -../coco/images/val2014/COCO_val2014_000000100000.jpg -../coco/images/val2014/COCO_val2014_000000100006.jpg -../coco/images/val2014/COCO_val2014_000000100083.jpg -../coco/images/val2014/COCO_val2014_000000100166.jpg -../coco/images/val2014/COCO_val2014_000000100187.jpg -../coco/images/val2014/COCO_val2014_000000100245.jpg -../coco/images/val2014/COCO_val2014_000000100343.jpg -../coco/images/val2014/COCO_val2014_000000100428.jpg -../coco/images/val2014/COCO_val2014_000000100582.jpg -../coco/images/val2014/COCO_val2014_000000100723.jpg -../coco/images/val2014/COCO_val2014_000000100726.jpg -../coco/images/val2014/COCO_val2014_000000100909.jpg -../coco/images/val2014/COCO_val2014_000000101059.jpg -../coco/images/val2014/COCO_val2014_000000101145.jpg -../coco/images/val2014/COCO_val2014_000000101567.jpg -../coco/images/val2014/COCO_val2014_000000101623.jpg -../coco/images/val2014/COCO_val2014_000000101703.jpg -../coco/images/val2014/COCO_val2014_000000101884.jpg -../coco/images/val2014/COCO_val2014_000000101948.jpg -../coco/images/val2014/COCO_val2014_000000102331.jpg -../coco/images/val2014/COCO_val2014_000000102421.jpg -../coco/images/val2014/COCO_val2014_000000102439.jpg -../coco/images/val2014/COCO_val2014_000000102446.jpg -../coco/images/val2014/COCO_val2014_000000102461.jpg -../coco/images/val2014/COCO_val2014_000000102466.jpg -../coco/images/val2014/COCO_val2014_000000102478.jpg -../coco/images/val2014/COCO_val2014_000000102594.jpg -../coco/images/val2014/COCO_val2014_000000102598.jpg -../coco/images/val2014/COCO_val2014_000000102665.jpg -../coco/images/val2014/COCO_val2014_000000102707.jpg -../coco/images/val2014/COCO_val2014_000000102848.jpg -../coco/images/val2014/COCO_val2014_000000102906.jpg -../coco/images/val2014/COCO_val2014_000000103122.jpg -../coco/images/val2014/COCO_val2014_000000103255.jpg -../coco/images/val2014/COCO_val2014_000000103272.jpg -../coco/images/val2014/COCO_val2014_000000103379.jpg -../coco/images/val2014/COCO_val2014_000000103413.jpg -../coco/images/val2014/COCO_val2014_000000103431.jpg -../coco/images/val2014/COCO_val2014_000000103509.jpg -../coco/images/val2014/COCO_val2014_000000103538.jpg -../coco/images/val2014/COCO_val2014_000000103667.jpg -../coco/images/val2014/COCO_val2014_000000103747.jpg -../coco/images/val2014/COCO_val2014_000000103931.jpg -../coco/images/val2014/COCO_val2014_000000104002.jpg -../coco/images/val2014/COCO_val2014_000000104455.jpg -../coco/images/val2014/COCO_val2014_000000104486.jpg -../coco/images/val2014/COCO_val2014_000000104494.jpg -../coco/images/val2014/COCO_val2014_000000104495.jpg -../coco/images/val2014/COCO_val2014_000000104893.jpg -../coco/images/val2014/COCO_val2014_000000104965.jpg -../coco/images/val2014/COCO_val2014_000000105040.jpg -../coco/images/val2014/COCO_val2014_000000105102.jpg -../coco/images/val2014/COCO_val2014_000000105156.jpg -../coco/images/val2014/COCO_val2014_000000105264.jpg -../coco/images/val2014/COCO_val2014_000000105291.jpg -../coco/images/val2014/COCO_val2014_000000105367.jpg -../coco/images/val2014/COCO_val2014_000000105647.jpg -../coco/images/val2014/COCO_val2014_000000105668.jpg -../coco/images/val2014/COCO_val2014_000000105711.jpg -../coco/images/val2014/COCO_val2014_000000105866.jpg -../coco/images/val2014/COCO_val2014_000000105973.jpg -../coco/images/val2014/COCO_val2014_000000106096.jpg -../coco/images/val2014/COCO_val2014_000000106120.jpg -../coco/images/val2014/COCO_val2014_000000106314.jpg -../coco/images/val2014/COCO_val2014_000000106351.jpg -../coco/images/val2014/COCO_val2014_000000106641.jpg -../coco/images/val2014/COCO_val2014_000000106661.jpg -../coco/images/val2014/COCO_val2014_000000106757.jpg -../coco/images/val2014/COCO_val2014_000000106793.jpg -../coco/images/val2014/COCO_val2014_000000106849.jpg -../coco/images/val2014/COCO_val2014_000000107004.jpg -../coco/images/val2014/COCO_val2014_000000107123.jpg -../coco/images/val2014/COCO_val2014_000000107183.jpg -../coco/images/val2014/COCO_val2014_000000107227.jpg -../coco/images/val2014/COCO_val2014_000000107244.jpg -../coco/images/val2014/COCO_val2014_000000107304.jpg -../coco/images/val2014/COCO_val2014_000000107542.jpg -../coco/images/val2014/COCO_val2014_000000107741.jpg -../coco/images/val2014/COCO_val2014_000000107831.jpg -../coco/images/val2014/COCO_val2014_000000107839.jpg -../coco/images/val2014/COCO_val2014_000000108051.jpg -../coco/images/val2014/COCO_val2014_000000108152.jpg -../coco/images/val2014/COCO_val2014_000000108212.jpg -../coco/images/val2014/COCO_val2014_000000108380.jpg -../coco/images/val2014/COCO_val2014_000000108408.jpg -../coco/images/val2014/COCO_val2014_000000108531.jpg -../coco/images/val2014/COCO_val2014_000000108761.jpg -../coco/images/val2014/COCO_val2014_000000108864.jpg -../coco/images/val2014/COCO_val2014_000000109055.jpg -../coco/images/val2014/COCO_val2014_000000109092.jpg -../coco/images/val2014/COCO_val2014_000000109178.jpg -../coco/images/val2014/COCO_val2014_000000109216.jpg -../coco/images/val2014/COCO_val2014_000000109231.jpg -../coco/images/val2014/COCO_val2014_000000109308.jpg -../coco/images/val2014/COCO_val2014_000000109486.jpg -../coco/images/val2014/COCO_val2014_000000109819.jpg -../coco/images/val2014/COCO_val2014_000000109869.jpg -../coco/images/val2014/COCO_val2014_000000110313.jpg -../coco/images/val2014/COCO_val2014_000000110389.jpg -../coco/images/val2014/COCO_val2014_000000110562.jpg -../coco/images/val2014/COCO_val2014_000000110617.jpg -../coco/images/val2014/COCO_val2014_000000110638.jpg -../coco/images/val2014/COCO_val2014_000000110881.jpg -../coco/images/val2014/COCO_val2014_000000110884.jpg -../coco/images/val2014/COCO_val2014_000000110951.jpg -../coco/images/val2014/COCO_val2014_000000111004.jpg -../coco/images/val2014/COCO_val2014_000000111014.jpg -../coco/images/val2014/COCO_val2014_000000111024.jpg -../coco/images/val2014/COCO_val2014_000000111076.jpg -../coco/images/val2014/COCO_val2014_000000111179.jpg -../coco/images/val2014/COCO_val2014_000000111590.jpg -../coco/images/val2014/COCO_val2014_000000111593.jpg -../coco/images/val2014/COCO_val2014_000000111878.jpg -../coco/images/val2014/COCO_val2014_000000112298.jpg -../coco/images/val2014/COCO_val2014_000000112388.jpg -../coco/images/val2014/COCO_val2014_000000112394.jpg -../coco/images/val2014/COCO_val2014_000000112440.jpg -../coco/images/val2014/COCO_val2014_000000112751.jpg -../coco/images/val2014/COCO_val2014_000000112818.jpg -../coco/images/val2014/COCO_val2014_000000112820.jpg -../coco/images/val2014/COCO_val2014_000000112830.jpg -../coco/images/val2014/COCO_val2014_000000112928.jpg -../coco/images/val2014/COCO_val2014_000000113139.jpg -../coco/images/val2014/COCO_val2014_000000113173.jpg -../coco/images/val2014/COCO_val2014_000000113313.jpg -../coco/images/val2014/COCO_val2014_000000113440.jpg -../coco/images/val2014/COCO_val2014_000000113559.jpg -../coco/images/val2014/COCO_val2014_000000113570.jpg -../coco/images/val2014/COCO_val2014_000000113579.jpg -../coco/images/val2014/COCO_val2014_000000113590.jpg -../coco/images/val2014/COCO_val2014_000000113757.jpg -../coco/images/val2014/COCO_val2014_000000113977.jpg -../coco/images/val2014/COCO_val2014_000000114033.jpg -../coco/images/val2014/COCO_val2014_000000114055.jpg -../coco/images/val2014/COCO_val2014_000000114090.jpg -../coco/images/val2014/COCO_val2014_000000114147.jpg -../coco/images/val2014/COCO_val2014_000000114239.jpg -../coco/images/val2014/COCO_val2014_000000114503.jpg -../coco/images/val2014/COCO_val2014_000000114907.jpg -../coco/images/val2014/COCO_val2014_000000114926.jpg -../coco/images/val2014/COCO_val2014_000000115069.jpg -../coco/images/val2014/COCO_val2014_000000115070.jpg -../coco/images/val2014/COCO_val2014_000000115128.jpg -../coco/images/val2014/COCO_val2014_000000115870.jpg -../coco/images/val2014/COCO_val2014_000000115898.jpg -../coco/images/val2014/COCO_val2014_000000115930.jpg -../coco/images/val2014/COCO_val2014_000000116226.jpg -../coco/images/val2014/COCO_val2014_000000116556.jpg -../coco/images/val2014/COCO_val2014_000000116667.jpg -../coco/images/val2014/COCO_val2014_000000116696.jpg -../coco/images/val2014/COCO_val2014_000000116936.jpg -../coco/images/val2014/COCO_val2014_000000117014.jpg -../coco/images/val2014/COCO_val2014_000000117037.jpg -../coco/images/val2014/COCO_val2014_000000117125.jpg -../coco/images/val2014/COCO_val2014_000000117127.jpg -../coco/images/val2014/COCO_val2014_000000117191.jpg diff --git a/data/coco_16img.data b/data/coco_16img.data deleted file mode 100644 index 2843a88400..0000000000 --- a/data/coco_16img.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_16img.txt -valid=./data/coco_16img.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_16img.txt b/data/coco_16img.txt deleted file mode 100644 index 03d84a2726..0000000000 --- a/data/coco_16img.txt +++ /dev/null @@ -1,16 +0,0 @@ -../coco/images/train2014/COCO_train2014_000000000009.jpg -../coco/images/train2014/COCO_train2014_000000000025.jpg -../coco/images/train2014/COCO_train2014_000000000030.jpg -../coco/images/train2014/COCO_train2014_000000000034.jpg -../coco/images/train2014/COCO_train2014_000000000036.jpg -../coco/images/train2014/COCO_train2014_000000000049.jpg -../coco/images/train2014/COCO_train2014_000000000061.jpg -../coco/images/train2014/COCO_train2014_000000000064.jpg -../coco/images/train2014/COCO_train2014_000000000071.jpg -../coco/images/train2014/COCO_train2014_000000000072.jpg -../coco/images/train2014/COCO_train2014_000000000077.jpg -../coco/images/train2014/COCO_train2014_000000000078.jpg -../coco/images/train2014/COCO_train2014_000000000081.jpg -../coco/images/train2014/COCO_train2014_000000000086.jpg -../coco/images/train2014/COCO_train2014_000000000089.jpg -../coco/images/train2014/COCO_train2014_000000000092.jpg diff --git a/data/coco_1cls.data b/data/coco_1cls.data deleted file mode 100644 index a19e3c0f2a..0000000000 --- a/data/coco_1cls.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=1 -train=./data/coco_1cls.txt -valid=./data/coco_1cls.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_1cls.txt b/data/coco_1cls.txt deleted file mode 100644 index aea1ea87eb..0000000000 --- a/data/coco_1cls.txt +++ /dev/null @@ -1,5 +0,0 @@ -../coco/images/val2014/COCO_val2014_000000013992.jpg -../coco/images/val2014/COCO_val2014_000000047226.jpg -../coco/images/val2014/COCO_val2014_000000050324.jpg -../coco/images/val2014/COCO_val2014_000000121497.jpg -../coco/images/val2014/COCO_val2014_000000001464.jpg diff --git a/data/coco_1img.data b/data/coco_1img.data deleted file mode 100644 index d97252f2d5..0000000000 --- a/data/coco_1img.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_1img.txt -valid=./data/coco_1img.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_1img.txt b/data/coco_1img.txt deleted file mode 100644 index 85defa2913..0000000000 --- a/data/coco_1img.txt +++ /dev/null @@ -1 +0,0 @@ -../coco/images/val2014/COCO_val2014_000000581886.jpg diff --git a/data/coco_1k5k.data b/data/coco_1k5k.data deleted file mode 100644 index a466df4ab2..0000000000 --- a/data/coco_1k5k.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_1000img.txt -valid=./data/5k.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_32img.data b/data/coco_32img.data deleted file mode 100644 index 8fceee7ffe..0000000000 --- a/data/coco_32img.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_32img.txt -valid=./data/coco_32img.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_32img.txt b/data/coco_32img.txt deleted file mode 100644 index 75b86be856..0000000000 --- a/data/coco_32img.txt +++ /dev/null @@ -1,32 +0,0 @@ -../coco/images/train2014/COCO_train2014_000000000009.jpg -../coco/images/train2014/COCO_train2014_000000000025.jpg -../coco/images/train2014/COCO_train2014_000000000030.jpg -../coco/images/train2014/COCO_train2014_000000000034.jpg -../coco/images/train2014/COCO_train2014_000000000036.jpg -../coco/images/train2014/COCO_train2014_000000000049.jpg -../coco/images/train2014/COCO_train2014_000000000061.jpg -../coco/images/train2014/COCO_train2014_000000000064.jpg -../coco/images/train2014/COCO_train2014_000000000071.jpg -../coco/images/train2014/COCO_train2014_000000000072.jpg -../coco/images/train2014/COCO_train2014_000000000077.jpg -../coco/images/train2014/COCO_train2014_000000000078.jpg -../coco/images/train2014/COCO_train2014_000000000081.jpg -../coco/images/train2014/COCO_train2014_000000000086.jpg -../coco/images/train2014/COCO_train2014_000000000089.jpg -../coco/images/train2014/COCO_train2014_000000000092.jpg -../coco/images/train2014/COCO_train2014_000000000094.jpg -../coco/images/train2014/COCO_train2014_000000000109.jpg -../coco/images/train2014/COCO_train2014_000000000110.jpg -../coco/images/train2014/COCO_train2014_000000000113.jpg -../coco/images/train2014/COCO_train2014_000000000127.jpg -../coco/images/train2014/COCO_train2014_000000000138.jpg -../coco/images/train2014/COCO_train2014_000000000142.jpg -../coco/images/train2014/COCO_train2014_000000000144.jpg -../coco/images/train2014/COCO_train2014_000000000149.jpg -../coco/images/train2014/COCO_train2014_000000000151.jpg -../coco/images/train2014/COCO_train2014_000000000154.jpg -../coco/images/train2014/COCO_train2014_000000000165.jpg -../coco/images/train2014/COCO_train2014_000000000194.jpg -../coco/images/train2014/COCO_train2014_000000000201.jpg -../coco/images/train2014/COCO_train2014_000000000247.jpg -../coco/images/train2014/COCO_train2014_000000000260.jpg diff --git a/data/coco_500img.txt b/data/coco_500img.txt deleted file mode 100644 index 5d578ab2ac..0000000000 --- a/data/coco_500img.txt +++ /dev/null @@ -1,500 +0,0 @@ -../coco/images/train2014/COCO_train2014_000000000009.jpg -../coco/images/train2014/COCO_train2014_000000000025.jpg -../coco/images/train2014/COCO_train2014_000000000030.jpg -../coco/images/train2014/COCO_train2014_000000000034.jpg -../coco/images/train2014/COCO_train2014_000000000036.jpg -../coco/images/train2014/COCO_train2014_000000000049.jpg -../coco/images/train2014/COCO_train2014_000000000061.jpg -../coco/images/train2014/COCO_train2014_000000000064.jpg -../coco/images/train2014/COCO_train2014_000000000071.jpg -../coco/images/train2014/COCO_train2014_000000000072.jpg -../coco/images/train2014/COCO_train2014_000000000077.jpg -../coco/images/train2014/COCO_train2014_000000000078.jpg -../coco/images/train2014/COCO_train2014_000000000081.jpg -../coco/images/train2014/COCO_train2014_000000000086.jpg -../coco/images/train2014/COCO_train2014_000000000089.jpg -../coco/images/train2014/COCO_train2014_000000000092.jpg -../coco/images/train2014/COCO_train2014_000000000094.jpg -../coco/images/train2014/COCO_train2014_000000000109.jpg -../coco/images/train2014/COCO_train2014_000000000110.jpg -../coco/images/train2014/COCO_train2014_000000000113.jpg -../coco/images/train2014/COCO_train2014_000000000127.jpg -../coco/images/train2014/COCO_train2014_000000000138.jpg -../coco/images/train2014/COCO_train2014_000000000142.jpg -../coco/images/train2014/COCO_train2014_000000000144.jpg -../coco/images/train2014/COCO_train2014_000000000149.jpg -../coco/images/train2014/COCO_train2014_000000000151.jpg -../coco/images/train2014/COCO_train2014_000000000154.jpg -../coco/images/train2014/COCO_train2014_000000000165.jpg -../coco/images/train2014/COCO_train2014_000000000194.jpg -../coco/images/train2014/COCO_train2014_000000000201.jpg -../coco/images/train2014/COCO_train2014_000000000247.jpg -../coco/images/train2014/COCO_train2014_000000000260.jpg -../coco/images/train2014/COCO_train2014_000000000263.jpg -../coco/images/train2014/COCO_train2014_000000000307.jpg -../coco/images/train2014/COCO_train2014_000000000308.jpg -../coco/images/train2014/COCO_train2014_000000000309.jpg -../coco/images/train2014/COCO_train2014_000000000312.jpg -../coco/images/train2014/COCO_train2014_000000000315.jpg -../coco/images/train2014/COCO_train2014_000000000321.jpg -../coco/images/train2014/COCO_train2014_000000000322.jpg -../coco/images/train2014/COCO_train2014_000000000326.jpg -../coco/images/train2014/COCO_train2014_000000000332.jpg -../coco/images/train2014/COCO_train2014_000000000349.jpg -../coco/images/train2014/COCO_train2014_000000000368.jpg -../coco/images/train2014/COCO_train2014_000000000370.jpg -../coco/images/train2014/COCO_train2014_000000000382.jpg -../coco/images/train2014/COCO_train2014_000000000384.jpg -../coco/images/train2014/COCO_train2014_000000000389.jpg -../coco/images/train2014/COCO_train2014_000000000394.jpg -../coco/images/train2014/COCO_train2014_000000000404.jpg -../coco/images/train2014/COCO_train2014_000000000419.jpg -../coco/images/train2014/COCO_train2014_000000000431.jpg -../coco/images/train2014/COCO_train2014_000000000436.jpg -../coco/images/train2014/COCO_train2014_000000000438.jpg -../coco/images/train2014/COCO_train2014_000000000443.jpg -../coco/images/train2014/COCO_train2014_000000000446.jpg -../coco/images/train2014/COCO_train2014_000000000450.jpg -../coco/images/train2014/COCO_train2014_000000000471.jpg -../coco/images/train2014/COCO_train2014_000000000490.jpg -../coco/images/train2014/COCO_train2014_000000000491.jpg -../coco/images/train2014/COCO_train2014_000000000510.jpg -../coco/images/train2014/COCO_train2014_000000000514.jpg -../coco/images/train2014/COCO_train2014_000000000529.jpg -../coco/images/train2014/COCO_train2014_000000000531.jpg -../coco/images/train2014/COCO_train2014_000000000532.jpg -../coco/images/train2014/COCO_train2014_000000000540.jpg -../coco/images/train2014/COCO_train2014_000000000542.jpg -../coco/images/train2014/COCO_train2014_000000000560.jpg -../coco/images/train2014/COCO_train2014_000000000562.jpg -../coco/images/train2014/COCO_train2014_000000000572.jpg -../coco/images/train2014/COCO_train2014_000000000575.jpg -../coco/images/train2014/COCO_train2014_000000000581.jpg -../coco/images/train2014/COCO_train2014_000000000584.jpg -../coco/images/train2014/COCO_train2014_000000000595.jpg -../coco/images/train2014/COCO_train2014_000000000597.jpg -../coco/images/train2014/COCO_train2014_000000000605.jpg -../coco/images/train2014/COCO_train2014_000000000612.jpg -../coco/images/train2014/COCO_train2014_000000000620.jpg -../coco/images/train2014/COCO_train2014_000000000625.jpg -../coco/images/train2014/COCO_train2014_000000000629.jpg -../coco/images/train2014/COCO_train2014_000000000634.jpg -../coco/images/train2014/COCO_train2014_000000000643.jpg -../coco/images/train2014/COCO_train2014_000000000650.jpg -../coco/images/train2014/COCO_train2014_000000000656.jpg -../coco/images/train2014/COCO_train2014_000000000659.jpg -../coco/images/train2014/COCO_train2014_000000000670.jpg -../coco/images/train2014/COCO_train2014_000000000671.jpg -../coco/images/train2014/COCO_train2014_000000000673.jpg -../coco/images/train2014/COCO_train2014_000000000681.jpg -../coco/images/train2014/COCO_train2014_000000000684.jpg -../coco/images/train2014/COCO_train2014_000000000690.jpg -../coco/images/train2014/COCO_train2014_000000000706.jpg -../coco/images/train2014/COCO_train2014_000000000714.jpg -../coco/images/train2014/COCO_train2014_000000000716.jpg -../coco/images/train2014/COCO_train2014_000000000722.jpg -../coco/images/train2014/COCO_train2014_000000000723.jpg -../coco/images/train2014/COCO_train2014_000000000731.jpg -../coco/images/train2014/COCO_train2014_000000000735.jpg -../coco/images/train2014/COCO_train2014_000000000753.jpg -../coco/images/train2014/COCO_train2014_000000000754.jpg -../coco/images/train2014/COCO_train2014_000000000762.jpg -../coco/images/train2014/COCO_train2014_000000000781.jpg -../coco/images/train2014/COCO_train2014_000000000790.jpg -../coco/images/train2014/COCO_train2014_000000000795.jpg -../coco/images/train2014/COCO_train2014_000000000797.jpg -../coco/images/train2014/COCO_train2014_000000000801.jpg -../coco/images/train2014/COCO_train2014_000000000813.jpg -../coco/images/train2014/COCO_train2014_000000000821.jpg -../coco/images/train2014/COCO_train2014_000000000825.jpg -../coco/images/train2014/COCO_train2014_000000000828.jpg -../coco/images/train2014/COCO_train2014_000000000839.jpg -../coco/images/train2014/COCO_train2014_000000000853.jpg -../coco/images/train2014/COCO_train2014_000000000882.jpg -../coco/images/train2014/COCO_train2014_000000000897.jpg -../coco/images/train2014/COCO_train2014_000000000901.jpg -../coco/images/train2014/COCO_train2014_000000000902.jpg -../coco/images/train2014/COCO_train2014_000000000908.jpg -../coco/images/train2014/COCO_train2014_000000000909.jpg -../coco/images/train2014/COCO_train2014_000000000913.jpg -../coco/images/train2014/COCO_train2014_000000000925.jpg -../coco/images/train2014/COCO_train2014_000000000927.jpg -../coco/images/train2014/COCO_train2014_000000000934.jpg -../coco/images/train2014/COCO_train2014_000000000941.jpg -../coco/images/train2014/COCO_train2014_000000000943.jpg -../coco/images/train2014/COCO_train2014_000000000955.jpg -../coco/images/train2014/COCO_train2014_000000000960.jpg -../coco/images/train2014/COCO_train2014_000000000965.jpg -../coco/images/train2014/COCO_train2014_000000000977.jpg -../coco/images/train2014/COCO_train2014_000000000982.jpg -../coco/images/train2014/COCO_train2014_000000000984.jpg -../coco/images/train2014/COCO_train2014_000000000996.jpg -../coco/images/train2014/COCO_train2014_000000001006.jpg -../coco/images/train2014/COCO_train2014_000000001011.jpg -../coco/images/train2014/COCO_train2014_000000001014.jpg -../coco/images/train2014/COCO_train2014_000000001025.jpg -../coco/images/train2014/COCO_train2014_000000001036.jpg -../coco/images/train2014/COCO_train2014_000000001053.jpg -../coco/images/train2014/COCO_train2014_000000001059.jpg -../coco/images/train2014/COCO_train2014_000000001072.jpg -../coco/images/train2014/COCO_train2014_000000001084.jpg -../coco/images/train2014/COCO_train2014_000000001085.jpg -../coco/images/train2014/COCO_train2014_000000001090.jpg -../coco/images/train2014/COCO_train2014_000000001098.jpg -../coco/images/train2014/COCO_train2014_000000001099.jpg -../coco/images/train2014/COCO_train2014_000000001102.jpg -../coco/images/train2014/COCO_train2014_000000001107.jpg -../coco/images/train2014/COCO_train2014_000000001108.jpg -../coco/images/train2014/COCO_train2014_000000001122.jpg -../coco/images/train2014/COCO_train2014_000000001139.jpg -../coco/images/train2014/COCO_train2014_000000001144.jpg -../coco/images/train2014/COCO_train2014_000000001145.jpg -../coco/images/train2014/COCO_train2014_000000001155.jpg -../coco/images/train2014/COCO_train2014_000000001166.jpg -../coco/images/train2014/COCO_train2014_000000001168.jpg -../coco/images/train2014/COCO_train2014_000000001183.jpg -../coco/images/train2014/COCO_train2014_000000001200.jpg -../coco/images/train2014/COCO_train2014_000000001204.jpg -../coco/images/train2014/COCO_train2014_000000001213.jpg -../coco/images/train2014/COCO_train2014_000000001216.jpg -../coco/images/train2014/COCO_train2014_000000001224.jpg -../coco/images/train2014/COCO_train2014_000000001232.jpg -../coco/images/train2014/COCO_train2014_000000001237.jpg -../coco/images/train2014/COCO_train2014_000000001238.jpg -../coco/images/train2014/COCO_train2014_000000001261.jpg -../coco/images/train2014/COCO_train2014_000000001264.jpg -../coco/images/train2014/COCO_train2014_000000001271.jpg -../coco/images/train2014/COCO_train2014_000000001282.jpg -../coco/images/train2014/COCO_train2014_000000001295.jpg -../coco/images/train2014/COCO_train2014_000000001298.jpg -../coco/images/train2014/COCO_train2014_000000001306.jpg -../coco/images/train2014/COCO_train2014_000000001307.jpg -../coco/images/train2014/COCO_train2014_000000001308.jpg -../coco/images/train2014/COCO_train2014_000000001311.jpg -../coco/images/train2014/COCO_train2014_000000001315.jpg -../coco/images/train2014/COCO_train2014_000000001319.jpg -../coco/images/train2014/COCO_train2014_000000001323.jpg -../coco/images/train2014/COCO_train2014_000000001330.jpg -../coco/images/train2014/COCO_train2014_000000001332.jpg -../coco/images/train2014/COCO_train2014_000000001350.jpg -../coco/images/train2014/COCO_train2014_000000001355.jpg -../coco/images/train2014/COCO_train2014_000000001359.jpg -../coco/images/train2014/COCO_train2014_000000001360.jpg -../coco/images/train2014/COCO_train2014_000000001366.jpg -../coco/images/train2014/COCO_train2014_000000001375.jpg -../coco/images/train2014/COCO_train2014_000000001381.jpg -../coco/images/train2014/COCO_train2014_000000001386.jpg -../coco/images/train2014/COCO_train2014_000000001390.jpg -../coco/images/train2014/COCO_train2014_000000001392.jpg -../coco/images/train2014/COCO_train2014_000000001397.jpg -../coco/images/train2014/COCO_train2014_000000001401.jpg -../coco/images/train2014/COCO_train2014_000000001403.jpg -../coco/images/train2014/COCO_train2014_000000001407.jpg -../coco/images/train2014/COCO_train2014_000000001408.jpg -../coco/images/train2014/COCO_train2014_000000001424.jpg -../coco/images/train2014/COCO_train2014_000000001431.jpg -../coco/images/train2014/COCO_train2014_000000001451.jpg -../coco/images/train2014/COCO_train2014_000000001453.jpg -../coco/images/train2014/COCO_train2014_000000001455.jpg -../coco/images/train2014/COCO_train2014_000000001488.jpg -../coco/images/train2014/COCO_train2014_000000001496.jpg -../coco/images/train2014/COCO_train2014_000000001497.jpg -../coco/images/train2014/COCO_train2014_000000001501.jpg -../coco/images/train2014/COCO_train2014_000000001505.jpg -../coco/images/train2014/COCO_train2014_000000001507.jpg -../coco/images/train2014/COCO_train2014_000000001510.jpg -../coco/images/train2014/COCO_train2014_000000001515.jpg -../coco/images/train2014/COCO_train2014_000000001518.jpg -../coco/images/train2014/COCO_train2014_000000001522.jpg -../coco/images/train2014/COCO_train2014_000000001523.jpg -../coco/images/train2014/COCO_train2014_000000001526.jpg -../coco/images/train2014/COCO_train2014_000000001527.jpg -../coco/images/train2014/COCO_train2014_000000001536.jpg -../coco/images/train2014/COCO_train2014_000000001548.jpg -../coco/images/train2014/COCO_train2014_000000001558.jpg -../coco/images/train2014/COCO_train2014_000000001562.jpg -../coco/images/train2014/COCO_train2014_000000001569.jpg -../coco/images/train2014/COCO_train2014_000000001579.jpg -../coco/images/train2014/COCO_train2014_000000001580.jpg -../coco/images/train2014/COCO_train2014_000000001586.jpg -../coco/images/train2014/COCO_train2014_000000001589.jpg -../coco/images/train2014/COCO_train2014_000000001596.jpg -../coco/images/train2014/COCO_train2014_000000001611.jpg -../coco/images/train2014/COCO_train2014_000000001622.jpg -../coco/images/train2014/COCO_train2014_000000001625.jpg -../coco/images/train2014/COCO_train2014_000000001637.jpg -../coco/images/train2014/COCO_train2014_000000001639.jpg -../coco/images/train2014/COCO_train2014_000000001645.jpg -../coco/images/train2014/COCO_train2014_000000001670.jpg -../coco/images/train2014/COCO_train2014_000000001674.jpg -../coco/images/train2014/COCO_train2014_000000001681.jpg -../coco/images/train2014/COCO_train2014_000000001688.jpg -../coco/images/train2014/COCO_train2014_000000001697.jpg -../coco/images/train2014/COCO_train2014_000000001706.jpg -../coco/images/train2014/COCO_train2014_000000001709.jpg -../coco/images/train2014/COCO_train2014_000000001712.jpg -../coco/images/train2014/COCO_train2014_000000001720.jpg -../coco/images/train2014/COCO_train2014_000000001732.jpg -../coco/images/train2014/COCO_train2014_000000001737.jpg -../coco/images/train2014/COCO_train2014_000000001756.jpg -../coco/images/train2014/COCO_train2014_000000001762.jpg -../coco/images/train2014/COCO_train2014_000000001764.jpg -../coco/images/train2014/COCO_train2014_000000001771.jpg -../coco/images/train2014/COCO_train2014_000000001774.jpg -../coco/images/train2014/COCO_train2014_000000001777.jpg -../coco/images/train2014/COCO_train2014_000000001781.jpg -../coco/images/train2014/COCO_train2014_000000001785.jpg -../coco/images/train2014/COCO_train2014_000000001786.jpg -../coco/images/train2014/COCO_train2014_000000001790.jpg -../coco/images/train2014/COCO_train2014_000000001792.jpg -../coco/images/train2014/COCO_train2014_000000001804.jpg -../coco/images/train2014/COCO_train2014_000000001810.jpg -../coco/images/train2014/COCO_train2014_000000001811.jpg -../coco/images/train2014/COCO_train2014_000000001813.jpg -../coco/images/train2014/COCO_train2014_000000001815.jpg -../coco/images/train2014/COCO_train2014_000000001822.jpg -../coco/images/train2014/COCO_train2014_000000001837.jpg -../coco/images/train2014/COCO_train2014_000000001864.jpg -../coco/images/train2014/COCO_train2014_000000001875.jpg -../coco/images/train2014/COCO_train2014_000000001877.jpg -../coco/images/train2014/COCO_train2014_000000001888.jpg -../coco/images/train2014/COCO_train2014_000000001895.jpg -../coco/images/train2014/COCO_train2014_000000001900.jpg -../coco/images/train2014/COCO_train2014_000000001902.jpg -../coco/images/train2014/COCO_train2014_000000001906.jpg -../coco/images/train2014/COCO_train2014_000000001907.jpg -../coco/images/train2014/COCO_train2014_000000001911.jpg -../coco/images/train2014/COCO_train2014_000000001912.jpg -../coco/images/train2014/COCO_train2014_000000001915.jpg -../coco/images/train2014/COCO_train2014_000000001924.jpg -../coco/images/train2014/COCO_train2014_000000001926.jpg -../coco/images/train2014/COCO_train2014_000000001941.jpg -../coco/images/train2014/COCO_train2014_000000001942.jpg -../coco/images/train2014/COCO_train2014_000000001943.jpg -../coco/images/train2014/COCO_train2014_000000001947.jpg -../coco/images/train2014/COCO_train2014_000000001958.jpg -../coco/images/train2014/COCO_train2014_000000001966.jpg -../coco/images/train2014/COCO_train2014_000000001994.jpg -../coco/images/train2014/COCO_train2014_000000001999.jpg -../coco/images/train2014/COCO_train2014_000000002001.jpg -../coco/images/train2014/COCO_train2014_000000002007.jpg -../coco/images/train2014/COCO_train2014_000000002024.jpg -../coco/images/train2014/COCO_train2014_000000002055.jpg -../coco/images/train2014/COCO_train2014_000000002056.jpg -../coco/images/train2014/COCO_train2014_000000002066.jpg -../coco/images/train2014/COCO_train2014_000000002068.jpg -../coco/images/train2014/COCO_train2014_000000002072.jpg -../coco/images/train2014/COCO_train2014_000000002083.jpg -../coco/images/train2014/COCO_train2014_000000002089.jpg -../coco/images/train2014/COCO_train2014_000000002093.jpg -../coco/images/train2014/COCO_train2014_000000002106.jpg -../coco/images/train2014/COCO_train2014_000000002114.jpg -../coco/images/train2014/COCO_train2014_000000002135.jpg -../coco/images/train2014/COCO_train2014_000000002148.jpg -../coco/images/train2014/COCO_train2014_000000002150.jpg -../coco/images/train2014/COCO_train2014_000000002178.jpg -../coco/images/train2014/COCO_train2014_000000002184.jpg -../coco/images/train2014/COCO_train2014_000000002193.jpg -../coco/images/train2014/COCO_train2014_000000002197.jpg -../coco/images/train2014/COCO_train2014_000000002209.jpg -../coco/images/train2014/COCO_train2014_000000002211.jpg -../coco/images/train2014/COCO_train2014_000000002217.jpg -../coco/images/train2014/COCO_train2014_000000002229.jpg -../coco/images/train2014/COCO_train2014_000000002232.jpg -../coco/images/train2014/COCO_train2014_000000002244.jpg -../coco/images/train2014/COCO_train2014_000000002258.jpg -../coco/images/train2014/COCO_train2014_000000002270.jpg -../coco/images/train2014/COCO_train2014_000000002276.jpg -../coco/images/train2014/COCO_train2014_000000002278.jpg -../coco/images/train2014/COCO_train2014_000000002279.jpg -../coco/images/train2014/COCO_train2014_000000002280.jpg -../coco/images/train2014/COCO_train2014_000000002281.jpg -../coco/images/train2014/COCO_train2014_000000002283.jpg -../coco/images/train2014/COCO_train2014_000000002284.jpg -../coco/images/train2014/COCO_train2014_000000002296.jpg -../coco/images/train2014/COCO_train2014_000000002309.jpg -../coco/images/train2014/COCO_train2014_000000002337.jpg -../coco/images/train2014/COCO_train2014_000000002342.jpg -../coco/images/train2014/COCO_train2014_000000002347.jpg -../coco/images/train2014/COCO_train2014_000000002349.jpg -../coco/images/train2014/COCO_train2014_000000002369.jpg -../coco/images/train2014/COCO_train2014_000000002372.jpg -../coco/images/train2014/COCO_train2014_000000002374.jpg -../coco/images/train2014/COCO_train2014_000000002377.jpg -../coco/images/train2014/COCO_train2014_000000002389.jpg -../coco/images/train2014/COCO_train2014_000000002400.jpg -../coco/images/train2014/COCO_train2014_000000002402.jpg -../coco/images/train2014/COCO_train2014_000000002411.jpg -../coco/images/train2014/COCO_train2014_000000002415.jpg -../coco/images/train2014/COCO_train2014_000000002429.jpg -../coco/images/train2014/COCO_train2014_000000002444.jpg -../coco/images/train2014/COCO_train2014_000000002445.jpg -../coco/images/train2014/COCO_train2014_000000002446.jpg -../coco/images/train2014/COCO_train2014_000000002448.jpg -../coco/images/train2014/COCO_train2014_000000002451.jpg -../coco/images/train2014/COCO_train2014_000000002459.jpg -../coco/images/train2014/COCO_train2014_000000002466.jpg -../coco/images/train2014/COCO_train2014_000000002470.jpg -../coco/images/train2014/COCO_train2014_000000002471.jpg -../coco/images/train2014/COCO_train2014_000000002496.jpg -../coco/images/train2014/COCO_train2014_000000002498.jpg -../coco/images/train2014/COCO_train2014_000000002531.jpg -../coco/images/train2014/COCO_train2014_000000002536.jpg -../coco/images/train2014/COCO_train2014_000000002543.jpg -../coco/images/train2014/COCO_train2014_000000002544.jpg -../coco/images/train2014/COCO_train2014_000000002545.jpg -../coco/images/train2014/COCO_train2014_000000002555.jpg -../coco/images/train2014/COCO_train2014_000000002559.jpg -../coco/images/train2014/COCO_train2014_000000002560.jpg -../coco/images/train2014/COCO_train2014_000000002563.jpg -../coco/images/train2014/COCO_train2014_000000002567.jpg -../coco/images/train2014/COCO_train2014_000000002570.jpg -../coco/images/train2014/COCO_train2014_000000002575.jpg -../coco/images/train2014/COCO_train2014_000000002583.jpg -../coco/images/train2014/COCO_train2014_000000002585.jpg -../coco/images/train2014/COCO_train2014_000000002591.jpg -../coco/images/train2014/COCO_train2014_000000002602.jpg -../coco/images/train2014/COCO_train2014_000000002606.jpg -../coco/images/train2014/COCO_train2014_000000002608.jpg -../coco/images/train2014/COCO_train2014_000000002614.jpg -../coco/images/train2014/COCO_train2014_000000002618.jpg -../coco/images/train2014/COCO_train2014_000000002619.jpg -../coco/images/train2014/COCO_train2014_000000002623.jpg -../coco/images/train2014/COCO_train2014_000000002624.jpg -../coco/images/train2014/COCO_train2014_000000002639.jpg -../coco/images/train2014/COCO_train2014_000000002644.jpg -../coco/images/train2014/COCO_train2014_000000002645.jpg -../coco/images/train2014/COCO_train2014_000000002658.jpg -../coco/images/train2014/COCO_train2014_000000002664.jpg -../coco/images/train2014/COCO_train2014_000000002672.jpg -../coco/images/train2014/COCO_train2014_000000002686.jpg -../coco/images/train2014/COCO_train2014_000000002687.jpg -../coco/images/train2014/COCO_train2014_000000002691.jpg -../coco/images/train2014/COCO_train2014_000000002693.jpg -../coco/images/train2014/COCO_train2014_000000002697.jpg -../coco/images/train2014/COCO_train2014_000000002703.jpg -../coco/images/train2014/COCO_train2014_000000002732.jpg -../coco/images/train2014/COCO_train2014_000000002742.jpg -../coco/images/train2014/COCO_train2014_000000002752.jpg -../coco/images/train2014/COCO_train2014_000000002754.jpg -../coco/images/train2014/COCO_train2014_000000002755.jpg -../coco/images/train2014/COCO_train2014_000000002758.jpg -../coco/images/train2014/COCO_train2014_000000002770.jpg -../coco/images/train2014/COCO_train2014_000000002774.jpg -../coco/images/train2014/COCO_train2014_000000002776.jpg -../coco/images/train2014/COCO_train2014_000000002782.jpg -../coco/images/train2014/COCO_train2014_000000002823.jpg -../coco/images/train2014/COCO_train2014_000000002833.jpg -../coco/images/train2014/COCO_train2014_000000002842.jpg -../coco/images/train2014/COCO_train2014_000000002843.jpg -../coco/images/train2014/COCO_train2014_000000002849.jpg -../coco/images/train2014/COCO_train2014_000000002860.jpg -../coco/images/train2014/COCO_train2014_000000002886.jpg -../coco/images/train2014/COCO_train2014_000000002892.jpg -../coco/images/train2014/COCO_train2014_000000002896.jpg -../coco/images/train2014/COCO_train2014_000000002902.jpg -../coco/images/train2014/COCO_train2014_000000002907.jpg -../coco/images/train2014/COCO_train2014_000000002931.jpg -../coco/images/train2014/COCO_train2014_000000002951.jpg -../coco/images/train2014/COCO_train2014_000000002963.jpg -../coco/images/train2014/COCO_train2014_000000002964.jpg -../coco/images/train2014/COCO_train2014_000000002982.jpg -../coco/images/train2014/COCO_train2014_000000002983.jpg -../coco/images/train2014/COCO_train2014_000000002989.jpg -../coco/images/train2014/COCO_train2014_000000002992.jpg -../coco/images/train2014/COCO_train2014_000000002998.jpg -../coco/images/train2014/COCO_train2014_000000003000.jpg -../coco/images/train2014/COCO_train2014_000000003003.jpg -../coco/images/train2014/COCO_train2014_000000003008.jpg -../coco/images/train2014/COCO_train2014_000000003040.jpg -../coco/images/train2014/COCO_train2014_000000003048.jpg -../coco/images/train2014/COCO_train2014_000000003076.jpg -../coco/images/train2014/COCO_train2014_000000003077.jpg -../coco/images/train2014/COCO_train2014_000000003080.jpg -../coco/images/train2014/COCO_train2014_000000003118.jpg -../coco/images/train2014/COCO_train2014_000000003124.jpg -../coco/images/train2014/COCO_train2014_000000003131.jpg -../coco/images/train2014/COCO_train2014_000000003148.jpg -../coco/images/train2014/COCO_train2014_000000003157.jpg -../coco/images/train2014/COCO_train2014_000000003160.jpg -../coco/images/train2014/COCO_train2014_000000003178.jpg -../coco/images/train2014/COCO_train2014_000000003197.jpg -../coco/images/train2014/COCO_train2014_000000003219.jpg -../coco/images/train2014/COCO_train2014_000000003220.jpg -../coco/images/train2014/COCO_train2014_000000003224.jpg -../coco/images/train2014/COCO_train2014_000000003225.jpg -../coco/images/train2014/COCO_train2014_000000003234.jpg -../coco/images/train2014/COCO_train2014_000000003236.jpg -../coco/images/train2014/COCO_train2014_000000003242.jpg -../coco/images/train2014/COCO_train2014_000000003249.jpg -../coco/images/train2014/COCO_train2014_000000003259.jpg -../coco/images/train2014/COCO_train2014_000000003264.jpg -../coco/images/train2014/COCO_train2014_000000003270.jpg -../coco/images/train2014/COCO_train2014_000000003272.jpg -../coco/images/train2014/COCO_train2014_000000003276.jpg -../coco/images/train2014/COCO_train2014_000000003286.jpg -../coco/images/train2014/COCO_train2014_000000003293.jpg -../coco/images/train2014/COCO_train2014_000000003305.jpg -../coco/images/train2014/COCO_train2014_000000003314.jpg -../coco/images/train2014/COCO_train2014_000000003320.jpg -../coco/images/train2014/COCO_train2014_000000003321.jpg -../coco/images/train2014/COCO_train2014_000000003325.jpg -../coco/images/train2014/COCO_train2014_000000003348.jpg -../coco/images/train2014/COCO_train2014_000000003353.jpg -../coco/images/train2014/COCO_train2014_000000003361.jpg -../coco/images/train2014/COCO_train2014_000000003365.jpg -../coco/images/train2014/COCO_train2014_000000003366.jpg -../coco/images/train2014/COCO_train2014_000000003375.jpg -../coco/images/train2014/COCO_train2014_000000003386.jpg -../coco/images/train2014/COCO_train2014_000000003389.jpg -../coco/images/train2014/COCO_train2014_000000003398.jpg -../coco/images/train2014/COCO_train2014_000000003412.jpg -../coco/images/train2014/COCO_train2014_000000003432.jpg -../coco/images/train2014/COCO_train2014_000000003442.jpg -../coco/images/train2014/COCO_train2014_000000003457.jpg -../coco/images/train2014/COCO_train2014_000000003461.jpg -../coco/images/train2014/COCO_train2014_000000003464.jpg -../coco/images/train2014/COCO_train2014_000000003474.jpg -../coco/images/train2014/COCO_train2014_000000003478.jpg -../coco/images/train2014/COCO_train2014_000000003481.jpg -../coco/images/train2014/COCO_train2014_000000003483.jpg -../coco/images/train2014/COCO_train2014_000000003493.jpg -../coco/images/train2014/COCO_train2014_000000003511.jpg -../coco/images/train2014/COCO_train2014_000000003514.jpg -../coco/images/train2014/COCO_train2014_000000003517.jpg -../coco/images/train2014/COCO_train2014_000000003518.jpg -../coco/images/train2014/COCO_train2014_000000003521.jpg -../coco/images/train2014/COCO_train2014_000000003528.jpg -../coco/images/train2014/COCO_train2014_000000003532.jpg -../coco/images/train2014/COCO_train2014_000000003535.jpg -../coco/images/train2014/COCO_train2014_000000003538.jpg -../coco/images/train2014/COCO_train2014_000000003579.jpg -../coco/images/train2014/COCO_train2014_000000003602.jpg -../coco/images/train2014/COCO_train2014_000000003613.jpg -../coco/images/train2014/COCO_train2014_000000003623.jpg -../coco/images/train2014/COCO_train2014_000000003628.jpg -../coco/images/train2014/COCO_train2014_000000003637.jpg -../coco/images/train2014/COCO_train2014_000000003668.jpg -../coco/images/train2014/COCO_train2014_000000003671.jpg -../coco/images/train2014/COCO_train2014_000000003682.jpg -../coco/images/train2014/COCO_train2014_000000003685.jpg -../coco/images/train2014/COCO_train2014_000000003713.jpg -../coco/images/train2014/COCO_train2014_000000003729.jpg -../coco/images/train2014/COCO_train2014_000000003735.jpg -../coco/images/train2014/COCO_train2014_000000003737.jpg -../coco/images/train2014/COCO_train2014_000000003745.jpg -../coco/images/train2014/COCO_train2014_000000003751.jpg -../coco/images/train2014/COCO_train2014_000000003764.jpg -../coco/images/train2014/COCO_train2014_000000003770.jpg -../coco/images/train2014/COCO_train2014_000000003782.jpg -../coco/images/train2014/COCO_train2014_000000003789.jpg -../coco/images/train2014/COCO_train2014_000000003804.jpg -../coco/images/train2014/COCO_train2014_000000003812.jpg -../coco/images/train2014/COCO_train2014_000000003823.jpg -../coco/images/train2014/COCO_train2014_000000003827.jpg -../coco/images/train2014/COCO_train2014_000000003830.jpg -../coco/images/train2014/COCO_train2014_000000003860.jpg -../coco/images/train2014/COCO_train2014_000000003862.jpg -../coco/images/train2014/COCO_train2014_000000003866.jpg -../coco/images/train2014/COCO_train2014_000000003870.jpg -../coco/images/train2014/COCO_train2014_000000003877.jpg diff --git a/data/coco_500val.data b/data/coco_500val.data deleted file mode 100644 index 4edf9ed352..0000000000 --- a/data/coco_500val.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_500img.txt -valid=./data/coco_500val.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_500val.txt b/data/coco_500val.txt deleted file mode 100644 index 443fb5fcae..0000000000 --- a/data/coco_500val.txt +++ /dev/null @@ -1,500 +0,0 @@ -../coco/images/val2014/COCO_val2014_000000000164.jpg -../coco/images/val2014/COCO_val2014_000000000192.jpg -../coco/images/val2014/COCO_val2014_000000000283.jpg -../coco/images/val2014/COCO_val2014_000000000397.jpg -../coco/images/val2014/COCO_val2014_000000000589.jpg -../coco/images/val2014/COCO_val2014_000000000599.jpg -../coco/images/val2014/COCO_val2014_000000000711.jpg -../coco/images/val2014/COCO_val2014_000000000757.jpg -../coco/images/val2014/COCO_val2014_000000000764.jpg -../coco/images/val2014/COCO_val2014_000000000872.jpg -../coco/images/val2014/COCO_val2014_000000001063.jpg -../coco/images/val2014/COCO_val2014_000000001554.jpg -../coco/images/val2014/COCO_val2014_000000001667.jpg -../coco/images/val2014/COCO_val2014_000000001700.jpg -../coco/images/val2014/COCO_val2014_000000001869.jpg -../coco/images/val2014/COCO_val2014_000000002124.jpg -../coco/images/val2014/COCO_val2014_000000002261.jpg -../coco/images/val2014/COCO_val2014_000000002621.jpg -../coco/images/val2014/COCO_val2014_000000002684.jpg -../coco/images/val2014/COCO_val2014_000000002764.jpg -../coco/images/val2014/COCO_val2014_000000002894.jpg -../coco/images/val2014/COCO_val2014_000000002972.jpg -../coco/images/val2014/COCO_val2014_000000003035.jpg -../coco/images/val2014/COCO_val2014_000000003084.jpg -../coco/images/val2014/COCO_val2014_000000003103.jpg -../coco/images/val2014/COCO_val2014_000000003109.jpg -../coco/images/val2014/COCO_val2014_000000003134.jpg -../coco/images/val2014/COCO_val2014_000000003209.jpg -../coco/images/val2014/COCO_val2014_000000003244.jpg -../coco/images/val2014/COCO_val2014_000000003326.jpg -../coco/images/val2014/COCO_val2014_000000003337.jpg -../coco/images/val2014/COCO_val2014_000000003661.jpg -../coco/images/val2014/COCO_val2014_000000003711.jpg -../coco/images/val2014/COCO_val2014_000000003779.jpg -../coco/images/val2014/COCO_val2014_000000003865.jpg -../coco/images/val2014/COCO_val2014_000000004079.jpg -../coco/images/val2014/COCO_val2014_000000004092.jpg -../coco/images/val2014/COCO_val2014_000000004283.jpg -../coco/images/val2014/COCO_val2014_000000004296.jpg -../coco/images/val2014/COCO_val2014_000000004392.jpg -../coco/images/val2014/COCO_val2014_000000004742.jpg -../coco/images/val2014/COCO_val2014_000000004754.jpg -../coco/images/val2014/COCO_val2014_000000004764.jpg -../coco/images/val2014/COCO_val2014_000000005038.jpg -../coco/images/val2014/COCO_val2014_000000005060.jpg -../coco/images/val2014/COCO_val2014_000000005124.jpg -../coco/images/val2014/COCO_val2014_000000005178.jpg -../coco/images/val2014/COCO_val2014_000000005205.jpg -../coco/images/val2014/COCO_val2014_000000005443.jpg -../coco/images/val2014/COCO_val2014_000000005652.jpg -../coco/images/val2014/COCO_val2014_000000005723.jpg -../coco/images/val2014/COCO_val2014_000000005804.jpg -../coco/images/val2014/COCO_val2014_000000006074.jpg -../coco/images/val2014/COCO_val2014_000000006091.jpg -../coco/images/val2014/COCO_val2014_000000006153.jpg -../coco/images/val2014/COCO_val2014_000000006213.jpg -../coco/images/val2014/COCO_val2014_000000006497.jpg -../coco/images/val2014/COCO_val2014_000000006789.jpg -../coco/images/val2014/COCO_val2014_000000006847.jpg -../coco/images/val2014/COCO_val2014_000000007241.jpg -../coco/images/val2014/COCO_val2014_000000007256.jpg -../coco/images/val2014/COCO_val2014_000000007281.jpg -../coco/images/val2014/COCO_val2014_000000007795.jpg -../coco/images/val2014/COCO_val2014_000000007867.jpg -../coco/images/val2014/COCO_val2014_000000007873.jpg -../coco/images/val2014/COCO_val2014_000000007899.jpg -../coco/images/val2014/COCO_val2014_000000008010.jpg -../coco/images/val2014/COCO_val2014_000000008179.jpg -../coco/images/val2014/COCO_val2014_000000008190.jpg -../coco/images/val2014/COCO_val2014_000000008204.jpg -../coco/images/val2014/COCO_val2014_000000008350.jpg -../coco/images/val2014/COCO_val2014_000000008493.jpg -../coco/images/val2014/COCO_val2014_000000008853.jpg -../coco/images/val2014/COCO_val2014_000000009105.jpg -../coco/images/val2014/COCO_val2014_000000009156.jpg -../coco/images/val2014/COCO_val2014_000000009217.jpg -../coco/images/val2014/COCO_val2014_000000009270.jpg -../coco/images/val2014/COCO_val2014_000000009286.jpg -../coco/images/val2014/COCO_val2014_000000009548.jpg -../coco/images/val2014/COCO_val2014_000000009553.jpg -../coco/images/val2014/COCO_val2014_000000009727.jpg -../coco/images/val2014/COCO_val2014_000000009908.jpg -../coco/images/val2014/COCO_val2014_000000010114.jpg -../coco/images/val2014/COCO_val2014_000000010249.jpg -../coco/images/val2014/COCO_val2014_000000010395.jpg -../coco/images/val2014/COCO_val2014_000000010400.jpg -../coco/images/val2014/COCO_val2014_000000010463.jpg -../coco/images/val2014/COCO_val2014_000000010613.jpg -../coco/images/val2014/COCO_val2014_000000010764.jpg -../coco/images/val2014/COCO_val2014_000000010779.jpg -../coco/images/val2014/COCO_val2014_000000010928.jpg -../coco/images/val2014/COCO_val2014_000000011099.jpg -../coco/images/val2014/COCO_val2014_000000011181.jpg -../coco/images/val2014/COCO_val2014_000000011184.jpg -../coco/images/val2014/COCO_val2014_000000011197.jpg -../coco/images/val2014/COCO_val2014_000000011320.jpg -../coco/images/val2014/COCO_val2014_000000011721.jpg -../coco/images/val2014/COCO_val2014_000000011813.jpg -../coco/images/val2014/COCO_val2014_000000012014.jpg -../coco/images/val2014/COCO_val2014_000000012047.jpg -../coco/images/val2014/COCO_val2014_000000012085.jpg -../coco/images/val2014/COCO_val2014_000000012115.jpg -../coco/images/val2014/COCO_val2014_000000012166.jpg -../coco/images/val2014/COCO_val2014_000000012230.jpg -../coco/images/val2014/COCO_val2014_000000012370.jpg -../coco/images/val2014/COCO_val2014_000000012375.jpg -../coco/images/val2014/COCO_val2014_000000012448.jpg -../coco/images/val2014/COCO_val2014_000000012543.jpg -../coco/images/val2014/COCO_val2014_000000012744.jpg -../coco/images/val2014/COCO_val2014_000000012897.jpg -../coco/images/val2014/COCO_val2014_000000012966.jpg -../coco/images/val2014/COCO_val2014_000000012993.jpg -../coco/images/val2014/COCO_val2014_000000013004.jpg -../coco/images/val2014/COCO_val2014_000000013333.jpg -../coco/images/val2014/COCO_val2014_000000013357.jpg -../coco/images/val2014/COCO_val2014_000000013774.jpg -../coco/images/val2014/COCO_val2014_000000014029.jpg -../coco/images/val2014/COCO_val2014_000000014056.jpg -../coco/images/val2014/COCO_val2014_000000014108.jpg -../coco/images/val2014/COCO_val2014_000000014135.jpg -../coco/images/val2014/COCO_val2014_000000014226.jpg -../coco/images/val2014/COCO_val2014_000000014306.jpg -../coco/images/val2014/COCO_val2014_000000014591.jpg -../coco/images/val2014/COCO_val2014_000000014629.jpg -../coco/images/val2014/COCO_val2014_000000014756.jpg -../coco/images/val2014/COCO_val2014_000000014874.jpg -../coco/images/val2014/COCO_val2014_000000014990.jpg -../coco/images/val2014/COCO_val2014_000000015386.jpg -../coco/images/val2014/COCO_val2014_000000015559.jpg -../coco/images/val2014/COCO_val2014_000000015599.jpg -../coco/images/val2014/COCO_val2014_000000015709.jpg -../coco/images/val2014/COCO_val2014_000000015735.jpg -../coco/images/val2014/COCO_val2014_000000015751.jpg -../coco/images/val2014/COCO_val2014_000000015883.jpg -../coco/images/val2014/COCO_val2014_000000015953.jpg -../coco/images/val2014/COCO_val2014_000000015956.jpg -../coco/images/val2014/COCO_val2014_000000015968.jpg -../coco/images/val2014/COCO_val2014_000000015987.jpg -../coco/images/val2014/COCO_val2014_000000016030.jpg -../coco/images/val2014/COCO_val2014_000000016076.jpg -../coco/images/val2014/COCO_val2014_000000016228.jpg -../coco/images/val2014/COCO_val2014_000000016241.jpg -../coco/images/val2014/COCO_val2014_000000016257.jpg -../coco/images/val2014/COCO_val2014_000000016327.jpg -../coco/images/val2014/COCO_val2014_000000016410.jpg -../coco/images/val2014/COCO_val2014_000000016574.jpg -../coco/images/val2014/COCO_val2014_000000016716.jpg -../coco/images/val2014/COCO_val2014_000000016928.jpg -../coco/images/val2014/COCO_val2014_000000016995.jpg -../coco/images/val2014/COCO_val2014_000000017235.jpg -../coco/images/val2014/COCO_val2014_000000017379.jpg -../coco/images/val2014/COCO_val2014_000000017667.jpg -../coco/images/val2014/COCO_val2014_000000017755.jpg -../coco/images/val2014/COCO_val2014_000000018295.jpg -../coco/images/val2014/COCO_val2014_000000018358.jpg -../coco/images/val2014/COCO_val2014_000000018476.jpg -../coco/images/val2014/COCO_val2014_000000018750.jpg -../coco/images/val2014/COCO_val2014_000000018783.jpg -../coco/images/val2014/COCO_val2014_000000019025.jpg -../coco/images/val2014/COCO_val2014_000000019042.jpg -../coco/images/val2014/COCO_val2014_000000019129.jpg -../coco/images/val2014/COCO_val2014_000000019176.jpg -../coco/images/val2014/COCO_val2014_000000019491.jpg -../coco/images/val2014/COCO_val2014_000000019890.jpg -../coco/images/val2014/COCO_val2014_000000019923.jpg -../coco/images/val2014/COCO_val2014_000000020001.jpg -../coco/images/val2014/COCO_val2014_000000020038.jpg -../coco/images/val2014/COCO_val2014_000000020175.jpg -../coco/images/val2014/COCO_val2014_000000020268.jpg -../coco/images/val2014/COCO_val2014_000000020273.jpg -../coco/images/val2014/COCO_val2014_000000020349.jpg -../coco/images/val2014/COCO_val2014_000000020553.jpg -../coco/images/val2014/COCO_val2014_000000020788.jpg -../coco/images/val2014/COCO_val2014_000000020912.jpg -../coco/images/val2014/COCO_val2014_000000020947.jpg -../coco/images/val2014/COCO_val2014_000000020972.jpg -../coco/images/val2014/COCO_val2014_000000021161.jpg -../coco/images/val2014/COCO_val2014_000000021483.jpg -../coco/images/val2014/COCO_val2014_000000021588.jpg -../coco/images/val2014/COCO_val2014_000000021639.jpg -../coco/images/val2014/COCO_val2014_000000021644.jpg -../coco/images/val2014/COCO_val2014_000000021645.jpg -../coco/images/val2014/COCO_val2014_000000021671.jpg -../coco/images/val2014/COCO_val2014_000000021746.jpg -../coco/images/val2014/COCO_val2014_000000021839.jpg -../coco/images/val2014/COCO_val2014_000000022002.jpg -../coco/images/val2014/COCO_val2014_000000022129.jpg -../coco/images/val2014/COCO_val2014_000000022191.jpg -../coco/images/val2014/COCO_val2014_000000022215.jpg -../coco/images/val2014/COCO_val2014_000000022341.jpg -../coco/images/val2014/COCO_val2014_000000022492.jpg -../coco/images/val2014/COCO_val2014_000000022563.jpg -../coco/images/val2014/COCO_val2014_000000022660.jpg -../coco/images/val2014/COCO_val2014_000000022705.jpg -../coco/images/val2014/COCO_val2014_000000023017.jpg -../coco/images/val2014/COCO_val2014_000000023309.jpg -../coco/images/val2014/COCO_val2014_000000023411.jpg -../coco/images/val2014/COCO_val2014_000000023754.jpg -../coco/images/val2014/COCO_val2014_000000023802.jpg -../coco/images/val2014/COCO_val2014_000000023981.jpg -../coco/images/val2014/COCO_val2014_000000023995.jpg -../coco/images/val2014/COCO_val2014_000000024112.jpg -../coco/images/val2014/COCO_val2014_000000024247.jpg -../coco/images/val2014/COCO_val2014_000000024396.jpg -../coco/images/val2014/COCO_val2014_000000024776.jpg -../coco/images/val2014/COCO_val2014_000000024924.jpg -../coco/images/val2014/COCO_val2014_000000025096.jpg -../coco/images/val2014/COCO_val2014_000000025191.jpg -../coco/images/val2014/COCO_val2014_000000025252.jpg -../coco/images/val2014/COCO_val2014_000000025293.jpg -../coco/images/val2014/COCO_val2014_000000025360.jpg -../coco/images/val2014/COCO_val2014_000000025595.jpg -../coco/images/val2014/COCO_val2014_000000025685.jpg -../coco/images/val2014/COCO_val2014_000000025807.jpg -../coco/images/val2014/COCO_val2014_000000025864.jpg -../coco/images/val2014/COCO_val2014_000000025989.jpg -../coco/images/val2014/COCO_val2014_000000026026.jpg -../coco/images/val2014/COCO_val2014_000000026430.jpg -../coco/images/val2014/COCO_val2014_000000026432.jpg -../coco/images/val2014/COCO_val2014_000000026534.jpg -../coco/images/val2014/COCO_val2014_000000026560.jpg -../coco/images/val2014/COCO_val2014_000000026564.jpg -../coco/images/val2014/COCO_val2014_000000026671.jpg -../coco/images/val2014/COCO_val2014_000000026690.jpg -../coco/images/val2014/COCO_val2014_000000026734.jpg -../coco/images/val2014/COCO_val2014_000000026799.jpg -../coco/images/val2014/COCO_val2014_000000026907.jpg -../coco/images/val2014/COCO_val2014_000000026908.jpg -../coco/images/val2014/COCO_val2014_000000026946.jpg -../coco/images/val2014/COCO_val2014_000000027530.jpg -../coco/images/val2014/COCO_val2014_000000027610.jpg -../coco/images/val2014/COCO_val2014_000000027620.jpg -../coco/images/val2014/COCO_val2014_000000027787.jpg -../coco/images/val2014/COCO_val2014_000000027789.jpg -../coco/images/val2014/COCO_val2014_000000027874.jpg -../coco/images/val2014/COCO_val2014_000000027946.jpg -../coco/images/val2014/COCO_val2014_000000027975.jpg -../coco/images/val2014/COCO_val2014_000000028022.jpg -../coco/images/val2014/COCO_val2014_000000028039.jpg -../coco/images/val2014/COCO_val2014_000000028273.jpg -../coco/images/val2014/COCO_val2014_000000028540.jpg -../coco/images/val2014/COCO_val2014_000000028702.jpg -../coco/images/val2014/COCO_val2014_000000028820.jpg -../coco/images/val2014/COCO_val2014_000000028874.jpg -../coco/images/val2014/COCO_val2014_000000029019.jpg -../coco/images/val2014/COCO_val2014_000000029030.jpg -../coco/images/val2014/COCO_val2014_000000029170.jpg -../coco/images/val2014/COCO_val2014_000000029308.jpg -../coco/images/val2014/COCO_val2014_000000029393.jpg -../coco/images/val2014/COCO_val2014_000000029524.jpg -../coco/images/val2014/COCO_val2014_000000029577.jpg -../coco/images/val2014/COCO_val2014_000000029648.jpg -../coco/images/val2014/COCO_val2014_000000029656.jpg -../coco/images/val2014/COCO_val2014_000000029697.jpg -../coco/images/val2014/COCO_val2014_000000029709.jpg -../coco/images/val2014/COCO_val2014_000000029719.jpg -../coco/images/val2014/COCO_val2014_000000030034.jpg -../coco/images/val2014/COCO_val2014_000000030062.jpg -../coco/images/val2014/COCO_val2014_000000030383.jpg -../coco/images/val2014/COCO_val2014_000000030470.jpg -../coco/images/val2014/COCO_val2014_000000030548.jpg -../coco/images/val2014/COCO_val2014_000000030668.jpg -../coco/images/val2014/COCO_val2014_000000030793.jpg -../coco/images/val2014/COCO_val2014_000000030843.jpg -../coco/images/val2014/COCO_val2014_000000030998.jpg -../coco/images/val2014/COCO_val2014_000000031151.jpg -../coco/images/val2014/COCO_val2014_000000031164.jpg -../coco/images/val2014/COCO_val2014_000000031176.jpg -../coco/images/val2014/COCO_val2014_000000031247.jpg -../coco/images/val2014/COCO_val2014_000000031392.jpg -../coco/images/val2014/COCO_val2014_000000031521.jpg -../coco/images/val2014/COCO_val2014_000000031542.jpg -../coco/images/val2014/COCO_val2014_000000031817.jpg -../coco/images/val2014/COCO_val2014_000000032081.jpg -../coco/images/val2014/COCO_val2014_000000032193.jpg -../coco/images/val2014/COCO_val2014_000000032331.jpg -../coco/images/val2014/COCO_val2014_000000032464.jpg -../coco/images/val2014/COCO_val2014_000000032510.jpg -../coco/images/val2014/COCO_val2014_000000032524.jpg -../coco/images/val2014/COCO_val2014_000000032625.jpg -../coco/images/val2014/COCO_val2014_000000032677.jpg -../coco/images/val2014/COCO_val2014_000000032715.jpg -../coco/images/val2014/COCO_val2014_000000032947.jpg -../coco/images/val2014/COCO_val2014_000000032964.jpg -../coco/images/val2014/COCO_val2014_000000033006.jpg -../coco/images/val2014/COCO_val2014_000000033055.jpg -../coco/images/val2014/COCO_val2014_000000033158.jpg -../coco/images/val2014/COCO_val2014_000000033243.jpg -../coco/images/val2014/COCO_val2014_000000033345.jpg -../coco/images/val2014/COCO_val2014_000000033499.jpg -../coco/images/val2014/COCO_val2014_000000033561.jpg -../coco/images/val2014/COCO_val2014_000000033830.jpg -../coco/images/val2014/COCO_val2014_000000033835.jpg -../coco/images/val2014/COCO_val2014_000000033924.jpg -../coco/images/val2014/COCO_val2014_000000034056.jpg -../coco/images/val2014/COCO_val2014_000000034114.jpg -../coco/images/val2014/COCO_val2014_000000034137.jpg -../coco/images/val2014/COCO_val2014_000000034183.jpg -../coco/images/val2014/COCO_val2014_000000034193.jpg -../coco/images/val2014/COCO_val2014_000000034299.jpg -../coco/images/val2014/COCO_val2014_000000034452.jpg -../coco/images/val2014/COCO_val2014_000000034689.jpg -../coco/images/val2014/COCO_val2014_000000034877.jpg -../coco/images/val2014/COCO_val2014_000000034892.jpg -../coco/images/val2014/COCO_val2014_000000034930.jpg -../coco/images/val2014/COCO_val2014_000000035012.jpg -../coco/images/val2014/COCO_val2014_000000035222.jpg -../coco/images/val2014/COCO_val2014_000000035326.jpg -../coco/images/val2014/COCO_val2014_000000035368.jpg -../coco/images/val2014/COCO_val2014_000000035474.jpg -../coco/images/val2014/COCO_val2014_000000035498.jpg -../coco/images/val2014/COCO_val2014_000000035738.jpg -../coco/images/val2014/COCO_val2014_000000035826.jpg -../coco/images/val2014/COCO_val2014_000000035940.jpg -../coco/images/val2014/COCO_val2014_000000035966.jpg -../coco/images/val2014/COCO_val2014_000000036049.jpg -../coco/images/val2014/COCO_val2014_000000036252.jpg -../coco/images/val2014/COCO_val2014_000000036508.jpg -../coco/images/val2014/COCO_val2014_000000036522.jpg -../coco/images/val2014/COCO_val2014_000000036539.jpg -../coco/images/val2014/COCO_val2014_000000036563.jpg -../coco/images/val2014/COCO_val2014_000000037038.jpg -../coco/images/val2014/COCO_val2014_000000037629.jpg -../coco/images/val2014/COCO_val2014_000000037675.jpg -../coco/images/val2014/COCO_val2014_000000037846.jpg -../coco/images/val2014/COCO_val2014_000000037865.jpg -../coco/images/val2014/COCO_val2014_000000037907.jpg -../coco/images/val2014/COCO_val2014_000000037988.jpg -../coco/images/val2014/COCO_val2014_000000038031.jpg -../coco/images/val2014/COCO_val2014_000000038190.jpg -../coco/images/val2014/COCO_val2014_000000038252.jpg -../coco/images/val2014/COCO_val2014_000000038296.jpg -../coco/images/val2014/COCO_val2014_000000038465.jpg -../coco/images/val2014/COCO_val2014_000000038488.jpg -../coco/images/val2014/COCO_val2014_000000038531.jpg -../coco/images/val2014/COCO_val2014_000000038539.jpg -../coco/images/val2014/COCO_val2014_000000038645.jpg -../coco/images/val2014/COCO_val2014_000000038685.jpg -../coco/images/val2014/COCO_val2014_000000038825.jpg -../coco/images/val2014/COCO_val2014_000000039322.jpg -../coco/images/val2014/COCO_val2014_000000039480.jpg -../coco/images/val2014/COCO_val2014_000000039697.jpg -../coco/images/val2014/COCO_val2014_000000039731.jpg -../coco/images/val2014/COCO_val2014_000000039743.jpg -../coco/images/val2014/COCO_val2014_000000039785.jpg -../coco/images/val2014/COCO_val2014_000000039961.jpg -../coco/images/val2014/COCO_val2014_000000040426.jpg -../coco/images/val2014/COCO_val2014_000000040485.jpg -../coco/images/val2014/COCO_val2014_000000040681.jpg -../coco/images/val2014/COCO_val2014_000000040686.jpg -../coco/images/val2014/COCO_val2014_000000040886.jpg -../coco/images/val2014/COCO_val2014_000000041119.jpg -../coco/images/val2014/COCO_val2014_000000041147.jpg -../coco/images/val2014/COCO_val2014_000000041322.jpg -../coco/images/val2014/COCO_val2014_000000041373.jpg -../coco/images/val2014/COCO_val2014_000000041550.jpg -../coco/images/val2014/COCO_val2014_000000041635.jpg -../coco/images/val2014/COCO_val2014_000000041867.jpg -../coco/images/val2014/COCO_val2014_000000041872.jpg -../coco/images/val2014/COCO_val2014_000000041924.jpg -../coco/images/val2014/COCO_val2014_000000042137.jpg -../coco/images/val2014/COCO_val2014_000000042279.jpg -../coco/images/val2014/COCO_val2014_000000042492.jpg -../coco/images/val2014/COCO_val2014_000000042576.jpg -../coco/images/val2014/COCO_val2014_000000042661.jpg -../coco/images/val2014/COCO_val2014_000000042743.jpg -../coco/images/val2014/COCO_val2014_000000042805.jpg -../coco/images/val2014/COCO_val2014_000000042837.jpg -../coco/images/val2014/COCO_val2014_000000043165.jpg -../coco/images/val2014/COCO_val2014_000000043218.jpg -../coco/images/val2014/COCO_val2014_000000043261.jpg -../coco/images/val2014/COCO_val2014_000000043404.jpg -../coco/images/val2014/COCO_val2014_000000043542.jpg -../coco/images/val2014/COCO_val2014_000000043605.jpg -../coco/images/val2014/COCO_val2014_000000043614.jpg -../coco/images/val2014/COCO_val2014_000000043673.jpg -../coco/images/val2014/COCO_val2014_000000043816.jpg -../coco/images/val2014/COCO_val2014_000000043850.jpg -../coco/images/val2014/COCO_val2014_000000044220.jpg -../coco/images/val2014/COCO_val2014_000000044269.jpg -../coco/images/val2014/COCO_val2014_000000044309.jpg -../coco/images/val2014/COCO_val2014_000000044478.jpg -../coco/images/val2014/COCO_val2014_000000044536.jpg -../coco/images/val2014/COCO_val2014_000000044559.jpg -../coco/images/val2014/COCO_val2014_000000044575.jpg -../coco/images/val2014/COCO_val2014_000000044612.jpg -../coco/images/val2014/COCO_val2014_000000044677.jpg -../coco/images/val2014/COCO_val2014_000000044699.jpg -../coco/images/val2014/COCO_val2014_000000044823.jpg -../coco/images/val2014/COCO_val2014_000000044989.jpg -../coco/images/val2014/COCO_val2014_000000045094.jpg -../coco/images/val2014/COCO_val2014_000000045176.jpg -../coco/images/val2014/COCO_val2014_000000045197.jpg -../coco/images/val2014/COCO_val2014_000000045367.jpg -../coco/images/val2014/COCO_val2014_000000045392.jpg -../coco/images/val2014/COCO_val2014_000000045433.jpg -../coco/images/val2014/COCO_val2014_000000045463.jpg -../coco/images/val2014/COCO_val2014_000000045550.jpg -../coco/images/val2014/COCO_val2014_000000045574.jpg -../coco/images/val2014/COCO_val2014_000000045627.jpg -../coco/images/val2014/COCO_val2014_000000045685.jpg -../coco/images/val2014/COCO_val2014_000000045728.jpg -../coco/images/val2014/COCO_val2014_000000046252.jpg -../coco/images/val2014/COCO_val2014_000000046269.jpg -../coco/images/val2014/COCO_val2014_000000046329.jpg -../coco/images/val2014/COCO_val2014_000000046805.jpg -../coco/images/val2014/COCO_val2014_000000046869.jpg -../coco/images/val2014/COCO_val2014_000000046919.jpg -../coco/images/val2014/COCO_val2014_000000046924.jpg -../coco/images/val2014/COCO_val2014_000000047008.jpg -../coco/images/val2014/COCO_val2014_000000047131.jpg -../coco/images/val2014/COCO_val2014_000000047226.jpg -../coco/images/val2014/COCO_val2014_000000047263.jpg -../coco/images/val2014/COCO_val2014_000000047395.jpg -../coco/images/val2014/COCO_val2014_000000047552.jpg -../coco/images/val2014/COCO_val2014_000000047570.jpg -../coco/images/val2014/COCO_val2014_000000047720.jpg -../coco/images/val2014/COCO_val2014_000000047775.jpg -../coco/images/val2014/COCO_val2014_000000047886.jpg -../coco/images/val2014/COCO_val2014_000000048504.jpg -../coco/images/val2014/COCO_val2014_000000048564.jpg -../coco/images/val2014/COCO_val2014_000000048668.jpg -../coco/images/val2014/COCO_val2014_000000048731.jpg -../coco/images/val2014/COCO_val2014_000000048739.jpg -../coco/images/val2014/COCO_val2014_000000048791.jpg -../coco/images/val2014/COCO_val2014_000000048840.jpg -../coco/images/val2014/COCO_val2014_000000048905.jpg -../coco/images/val2014/COCO_val2014_000000048910.jpg -../coco/images/val2014/COCO_val2014_000000048924.jpg -../coco/images/val2014/COCO_val2014_000000048956.jpg -../coco/images/val2014/COCO_val2014_000000049075.jpg -../coco/images/val2014/COCO_val2014_000000049236.jpg -../coco/images/val2014/COCO_val2014_000000049676.jpg -../coco/images/val2014/COCO_val2014_000000049881.jpg -../coco/images/val2014/COCO_val2014_000000049985.jpg -../coco/images/val2014/COCO_val2014_000000050100.jpg -../coco/images/val2014/COCO_val2014_000000050145.jpg -../coco/images/val2014/COCO_val2014_000000050177.jpg -../coco/images/val2014/COCO_val2014_000000050324.jpg -../coco/images/val2014/COCO_val2014_000000050331.jpg -../coco/images/val2014/COCO_val2014_000000050481.jpg -../coco/images/val2014/COCO_val2014_000000050485.jpg -../coco/images/val2014/COCO_val2014_000000050493.jpg -../coco/images/val2014/COCO_val2014_000000050746.jpg -../coco/images/val2014/COCO_val2014_000000050844.jpg -../coco/images/val2014/COCO_val2014_000000050896.jpg -../coco/images/val2014/COCO_val2014_000000051249.jpg -../coco/images/val2014/COCO_val2014_000000051250.jpg -../coco/images/val2014/COCO_val2014_000000051289.jpg -../coco/images/val2014/COCO_val2014_000000051314.jpg -../coco/images/val2014/COCO_val2014_000000051339.jpg -../coco/images/val2014/COCO_val2014_000000051461.jpg -../coco/images/val2014/COCO_val2014_000000051476.jpg -../coco/images/val2014/COCO_val2014_000000052005.jpg -../coco/images/val2014/COCO_val2014_000000052020.jpg -../coco/images/val2014/COCO_val2014_000000052290.jpg -../coco/images/val2014/COCO_val2014_000000052314.jpg -../coco/images/val2014/COCO_val2014_000000052425.jpg -../coco/images/val2014/COCO_val2014_000000052575.jpg -../coco/images/val2014/COCO_val2014_000000052871.jpg -../coco/images/val2014/COCO_val2014_000000052982.jpg -../coco/images/val2014/COCO_val2014_000000053139.jpg -../coco/images/val2014/COCO_val2014_000000053183.jpg -../coco/images/val2014/COCO_val2014_000000053263.jpg -../coco/images/val2014/COCO_val2014_000000053491.jpg -../coco/images/val2014/COCO_val2014_000000053503.jpg -../coco/images/val2014/COCO_val2014_000000053580.jpg -../coco/images/val2014/COCO_val2014_000000053616.jpg -../coco/images/val2014/COCO_val2014_000000053907.jpg -../coco/images/val2014/COCO_val2014_000000053949.jpg -../coco/images/val2014/COCO_val2014_000000054301.jpg -../coco/images/val2014/COCO_val2014_000000054334.jpg -../coco/images/val2014/COCO_val2014_000000054490.jpg -../coco/images/val2014/COCO_val2014_000000054527.jpg -../coco/images/val2014/COCO_val2014_000000054533.jpg -../coco/images/val2014/COCO_val2014_000000054603.jpg -../coco/images/val2014/COCO_val2014_000000054643.jpg -../coco/images/val2014/COCO_val2014_000000054679.jpg -../coco/images/val2014/COCO_val2014_000000054723.jpg -../coco/images/val2014/COCO_val2014_000000054959.jpg -../coco/images/val2014/COCO_val2014_000000055167.jpg -../coco/images/val2014/COCO_val2014_000000056137.jpg -../coco/images/val2014/COCO_val2014_000000056326.jpg -../coco/images/val2014/COCO_val2014_000000056541.jpg -../coco/images/val2014/COCO_val2014_000000056562.jpg -../coco/images/val2014/COCO_val2014_000000056624.jpg -../coco/images/val2014/COCO_val2014_000000056633.jpg -../coco/images/val2014/COCO_val2014_000000056724.jpg -../coco/images/val2014/COCO_val2014_000000056739.jpg -../coco/images/val2014/COCO_val2014_000000057027.jpg -../coco/images/val2014/COCO_val2014_000000057091.jpg -../coco/images/val2014/COCO_val2014_000000057095.jpg -../coco/images/val2014/COCO_val2014_000000057100.jpg -../coco/images/val2014/COCO_val2014_000000057149.jpg -../coco/images/val2014/COCO_val2014_000000057238.jpg -../coco/images/val2014/COCO_val2014_000000057359.jpg -../coco/images/val2014/COCO_val2014_000000057454.jpg -../coco/images/val2014/COCO_val2014_000000058001.jpg -../coco/images/val2014/COCO_val2014_000000058157.jpg -../coco/images/val2014/COCO_val2014_000000058223.jpg diff --git a/data/coco_64img.data b/data/coco_64img.data deleted file mode 100644 index 633d08b916..0000000000 --- a/data/coco_64img.data +++ /dev/null @@ -1,6 +0,0 @@ -classes=80 -train=./data/coco_64img.txt -valid=./data/coco_64img.txt -names=data/coco.names -backup=backup/ -eval=coco diff --git a/data/coco_64img.txt b/data/coco_64img.txt deleted file mode 100644 index 306ff3b4e8..0000000000 --- a/data/coco_64img.txt +++ /dev/null @@ -1,64 +0,0 @@ -../coco/images/train2014/COCO_train2014_000000000009.jpg -../coco/images/train2014/COCO_train2014_000000000025.jpg -../coco/images/train2014/COCO_train2014_000000000030.jpg -../coco/images/train2014/COCO_train2014_000000000034.jpg -../coco/images/train2014/COCO_train2014_000000000036.jpg -../coco/images/train2014/COCO_train2014_000000000049.jpg -../coco/images/train2014/COCO_train2014_000000000061.jpg -../coco/images/train2014/COCO_train2014_000000000064.jpg -../coco/images/train2014/COCO_train2014_000000000071.jpg -../coco/images/train2014/COCO_train2014_000000000072.jpg -../coco/images/train2014/COCO_train2014_000000000077.jpg -../coco/images/train2014/COCO_train2014_000000000078.jpg -../coco/images/train2014/COCO_train2014_000000000081.jpg -../coco/images/train2014/COCO_train2014_000000000086.jpg -../coco/images/train2014/COCO_train2014_000000000089.jpg -../coco/images/train2014/COCO_train2014_000000000092.jpg -../coco/images/train2014/COCO_train2014_000000000094.jpg -../coco/images/train2014/COCO_train2014_000000000109.jpg -../coco/images/train2014/COCO_train2014_000000000110.jpg -../coco/images/train2014/COCO_train2014_000000000113.jpg -../coco/images/train2014/COCO_train2014_000000000127.jpg -../coco/images/train2014/COCO_train2014_000000000138.jpg -../coco/images/train2014/COCO_train2014_000000000142.jpg -../coco/images/train2014/COCO_train2014_000000000144.jpg -../coco/images/train2014/COCO_train2014_000000000149.jpg -../coco/images/train2014/COCO_train2014_000000000151.jpg -../coco/images/train2014/COCO_train2014_000000000154.jpg -../coco/images/train2014/COCO_train2014_000000000165.jpg -../coco/images/train2014/COCO_train2014_000000000194.jpg -../coco/images/train2014/COCO_train2014_000000000201.jpg -../coco/images/train2014/COCO_train2014_000000000247.jpg -../coco/images/train2014/COCO_train2014_000000000260.jpg -../coco/images/train2014/COCO_train2014_000000000263.jpg -../coco/images/train2014/COCO_train2014_000000000307.jpg -../coco/images/train2014/COCO_train2014_000000000308.jpg -../coco/images/train2014/COCO_train2014_000000000309.jpg -../coco/images/train2014/COCO_train2014_000000000312.jpg -../coco/images/train2014/COCO_train2014_000000000315.jpg -../coco/images/train2014/COCO_train2014_000000000321.jpg -../coco/images/train2014/COCO_train2014_000000000322.jpg -../coco/images/train2014/COCO_train2014_000000000326.jpg -../coco/images/train2014/COCO_train2014_000000000332.jpg -../coco/images/train2014/COCO_train2014_000000000349.jpg -../coco/images/train2014/COCO_train2014_000000000368.jpg -../coco/images/train2014/COCO_train2014_000000000370.jpg -../coco/images/train2014/COCO_train2014_000000000382.jpg -../coco/images/train2014/COCO_train2014_000000000384.jpg -../coco/images/train2014/COCO_train2014_000000000389.jpg -../coco/images/train2014/COCO_train2014_000000000394.jpg -../coco/images/train2014/COCO_train2014_000000000404.jpg -../coco/images/train2014/COCO_train2014_000000000419.jpg -../coco/images/train2014/COCO_train2014_000000000431.jpg -../coco/images/train2014/COCO_train2014_000000000436.jpg -../coco/images/train2014/COCO_train2014_000000000438.jpg -../coco/images/train2014/COCO_train2014_000000000443.jpg -../coco/images/train2014/COCO_train2014_000000000446.jpg -../coco/images/train2014/COCO_train2014_000000000450.jpg -../coco/images/train2014/COCO_train2014_000000000471.jpg -../coco/images/train2014/COCO_train2014_000000000490.jpg -../coco/images/train2014/COCO_train2014_000000000491.jpg -../coco/images/train2014/COCO_train2014_000000000510.jpg -../coco/images/train2014/COCO_train2014_000000000514.jpg -../coco/images/train2014/COCO_train2014_000000000529.jpg -../coco/images/train2014/COCO_train2014_000000000531.jpg diff --git a/data/coco_paper.names b/data/coco_paper.names deleted file mode 100644 index 5378c6cdad..0000000000 --- a/data/coco_paper.names +++ /dev/null @@ -1,91 +0,0 @@ -person -bicycle -car -motorcycle -airplane -bus -train -truck -boat -traffic light -fire hydrant -street sign -stop sign -parking meter -bench -bird -cat -dog -horse -sheep -cow -elephant -bear -zebra -giraffe -hat -backpack -umbrella -shoe -eye glasses -handbag -tie -suitcase -frisbee -skis -snowboard -sports ball -kite -baseball bat -baseball glove -skateboard -surfboard -tennis racket -bottle -plate -wine glass -cup -fork -knife -spoon -bowl -banana -apple -sandwich -orange -broccoli -carrot -hot dog -pizza -donut -cake -chair -couch -potted plant -bed -mirror -dining table -window -desk -toilet -door -tv -laptop -mouse -remote -keyboard -cell phone -microwave -oven -toaster -sink -refrigerator -blender -book -clock -vase -scissors -teddy bear -hair drier -toothbrush -hair brush \ No newline at end of file diff --git a/data/get_coco_dataset.sh b/data/get_coco_dataset.sh deleted file mode 100755 index b6b4fc9a1e..0000000000 --- a/data/get_coco_dataset.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -# CREDIT: https://github.com/pjreddie/darknet/tree/master/scripts/get_coco_dataset.sh - -# Clone COCO API -git clone https://github.com/pdollar/coco && cd coco - -# Download Images -mkdir images && cd images -wget -c https://pjreddie.com/media/files/train2014.zip -wget -c https://pjreddie.com/media/files/val2014.zip - -# Unzip -unzip -q train2014.zip -unzip -q val2014.zip - -# (optional) Delete zip files -rm -rf *.zip - -cd .. - -# Download COCO Metadata -wget -c https://pjreddie.com/media/files/instances_train-val2014.zip -wget -c https://pjreddie.com/media/files/coco/5k.part -wget -c https://pjreddie.com/media/files/coco/trainvalno5k.part -wget -c https://pjreddie.com/media/files/coco/labels.tgz -tar xzf labels.tgz -unzip -q instances_train-val2014.zip - -# Set Up Image Lists -paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt -paste <(awk "{print \"$PWD\"}" trainvalno5k.txt - -# get xview training data -# wget -O train_images.tgz 'https://d307kc0mrhucc3.cloudfront.net/train_images.tgz?Expires=1530124049&Signature=JrQoxipmsETvb7eQHCfDFUO-QEHJGAayUv0i-ParmS-1hn7hl9D~bzGuHWG82imEbZSLUARTtm0wOJ7EmYMGmG5PtLKz9H5qi6DjoSUuFc13NQ-~6yUhE~NfPaTnehUdUMCa3On2wl1h1ZtRG~0Jq1P-AJbpe~oQxbyBrs1KccaMa7FK4F4oMM6sMnNgoXx8-3O77kYw~uOpTMFmTaQdHln6EztW0Lx17i57kK3ogbSUpXgaUTqjHCRA1dWIl7PY1ngQnLslkLhZqmKcaL-BvWf0ZGjHxCDQBpnUjIlvMu5NasegkwD9Jjc0ClgTxsttSkmbapVqaVC8peR0pO619Q__&Key-Pair-Id=APKAIKGDJB5C3XUL2DXQ' -# tar -xvzf train_images.tgz -# sudo rm -rf train_images/._* -# lastly convert each .tif to a .bmp for faster loading in cv2 - -# ./coco/images/train2014/COCO_train2014_000000167126.jpg # corrupted image diff --git a/data/get_coco_dataset_gdrive.sh b/data/get_coco_dataset_gdrive.sh deleted file mode 100755 index c965e4871f..0000000000 --- a/data/get_coco_dataset_gdrive.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# https://stackoverflow.com/questions/48133080/how-to-download-a-google-drive-url-via-curl-or-wget/48133859 - -# Zip coco folder -# zip -r coco.zip coco -# tar -czvf coco.tar.gz coco - -# Set fileid and filename -filename="coco.zip" -fileid="1WQT6SOktSe8Uw6r10-2JhbEhMY5DJaph" # coco.zip - -# Download from Google Drive, accepting presented query -curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=${fileid}" > /dev/null -curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=${fileid}" -o ${filename} -rm ./cookie - -# Unzip -unzip -q ${filename} # for coco.zip -# tar -xzf ${filename} # for coco.tar.gz diff --git a/data/hyps/hyp.Objects365.yaml b/data/hyps/hyp.Objects365.yaml new file mode 100644 index 0000000000..7b26a053bb --- /dev/null +++ b/data/hyps/hyp.Objects365.yaml @@ -0,0 +1,35 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Hyperparameters for Objects365 training +# python train.py --weights yolov5m.pt --data Objects365.yaml --evolve +# See Hyperparameter Evolution tutorial for details https://github.com/ultralytics/yolov5#tutorials + +lr0: 0.00258 +lrf: 0.17 +momentum: 0.779 +weight_decay: 0.00058 +warmup_epochs: 1.33 +warmup_momentum: 0.86 +warmup_bias_lr: 0.0711 +box: 0.0539 +cls: 0.299 +cls_pw: 0.825 +obj: 0.632 +obj_pw: 1.0 +iou_t: 0.2 +anchor_t: 3.44 +anchors: 3.2 +fl_gamma: 0.0 +hsv_h: 0.0188 +hsv_s: 0.704 +hsv_v: 0.36 +degrees: 0.0 +translate: 0.0902 +scale: 0.491 +shear: 0.0 +perspective: 0.0 +flipud: 0.0 +fliplr: 0.5 +mosaic: 1.0 +mixup: 0.0 +copy_paste: 0.0 diff --git a/data/hyps/hyp.VOC.yaml b/data/hyps/hyp.VOC.yaml new file mode 100644 index 0000000000..472da47ff5 --- /dev/null +++ b/data/hyps/hyp.VOC.yaml @@ -0,0 +1,41 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Hyperparameters for VOC training +# python train.py --batch 128 --weights yolov5m6.pt --data VOC.yaml --epochs 50 --img 512 --hyp hyp.scratch-med.yaml --evolve +# See Hyperparameter Evolution tutorial for details https://github.com/ultralytics/yolov5#tutorials + +# YOLOv3 Hyperparameter Evolution Results +# Best generation: 467 +# Last generation: 996 +# metrics/precision, metrics/recall, metrics/mAP_0.5, metrics/mAP_0.5:0.95, val/box_loss, val/obj_loss, val/cls_loss +# 0.87729, 0.85125, 0.91286, 0.72664, 0.0076739, 0.0042529, 0.0013865 + +lr0: 0.00334 +lrf: 0.15135 +momentum: 0.74832 +weight_decay: 0.00025 +warmup_epochs: 3.3835 +warmup_momentum: 0.59462 +warmup_bias_lr: 0.18657 +box: 0.02 +cls: 0.21638 +cls_pw: 0.5 +obj: 0.51728 +obj_pw: 0.67198 +iou_t: 0.2 +anchor_t: 3.3744 +fl_gamma: 0.0 +hsv_h: 0.01041 +hsv_s: 0.54703 +hsv_v: 0.27739 +degrees: 0.0 +translate: 0.04591 +scale: 0.75544 +shear: 0.0 +perspective: 0.0 +flipud: 0.0 +fliplr: 0.5 +mosaic: 0.85834 +mixup: 0.04266 +copy_paste: 0.0 +anchors: 3.412 diff --git a/data/hyps/hyp.no-augmentation.yaml b/data/hyps/hyp.no-augmentation.yaml new file mode 100644 index 0000000000..a612518c2b --- /dev/null +++ b/data/hyps/hyp.no-augmentation.yaml @@ -0,0 +1,36 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Hyperparameters when using Albumentations frameworks +# python train.py --hyp hyp.no-augmentation.yaml +# See https://github.com/ultralytics/yolov5/pull/3882 for YOLOv3 + Albumentations Usage examples + +lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) +lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf) +momentum: 0.937 # SGD momentum/Adam beta1 +weight_decay: 0.0005 # optimizer weight decay 5e-4 +warmup_epochs: 3.0 # warmup epochs (fractions ok) +warmup_momentum: 0.8 # warmup initial momentum +warmup_bias_lr: 0.1 # warmup initial bias lr +box: 0.05 # box loss gain +cls: 0.3 # cls loss gain +cls_pw: 1.0 # cls BCELoss positive_weight +obj: 0.7 # obj loss gain (scale with pixels) +obj_pw: 1.0 # obj BCELoss positive_weight +iou_t: 0.20 # IoU training threshold +anchor_t: 4.0 # anchor-multiple threshold +# anchors: 3 # anchors per output layer (0 to ignore) +# this parameters are all zero since we want to use albumentation framework +fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) +hsv_h: 0 # image HSV-Hue augmentation (fraction) +hsv_s: 0 # image HSV-Saturation augmentation (fraction) +hsv_v: 0 # image HSV-Value augmentation (fraction) +degrees: 0.0 # image rotation (+/- deg) +translate: 0 # image translation (+/- fraction) +scale: 0 # image scale (+/- gain) +shear: 0 # image shear (+/- deg) +perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 +flipud: 0.0 # image flip up-down (probability) +fliplr: 0.0 # image flip left-right (probability) +mosaic: 0.0 # image mosaic (probability) +mixup: 0.0 # image mixup (probability) +copy_paste: 0.0 # segment copy-paste (probability) diff --git a/data/hyps/hyp.scratch-high.yaml b/data/hyps/hyp.scratch-high.yaml new file mode 100644 index 0000000000..74536c2973 --- /dev/null +++ b/data/hyps/hyp.scratch-high.yaml @@ -0,0 +1,35 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Hyperparameters for high-augmentation COCO training from scratch +# python train.py --batch 32 --cfg yolov5m6.yaml --weights '' --data coco.yaml --img 1280 --epochs 300 +# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials + +lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) +lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf) +momentum: 0.937 # SGD momentum/Adam beta1 +weight_decay: 0.0005 # optimizer weight decay 5e-4 +warmup_epochs: 3.0 # warmup epochs (fractions ok) +warmup_momentum: 0.8 # warmup initial momentum +warmup_bias_lr: 0.1 # warmup initial bias lr +box: 0.05 # box loss gain +cls: 0.3 # cls loss gain +cls_pw: 1.0 # cls BCELoss positive_weight +obj: 0.7 # obj loss gain (scale with pixels) +obj_pw: 1.0 # obj BCELoss positive_weight +iou_t: 0.20 # IoU training threshold +anchor_t: 4.0 # anchor-multiple threshold +# anchors: 3 # anchors per output layer (0 to ignore) +fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) +hsv_h: 0.015 # image HSV-Hue augmentation (fraction) +hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) +hsv_v: 0.4 # image HSV-Value augmentation (fraction) +degrees: 0.0 # image rotation (+/- deg) +translate: 0.1 # image translation (+/- fraction) +scale: 0.9 # image scale (+/- gain) +shear: 0.0 # image shear (+/- deg) +perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 +flipud: 0.0 # image flip up-down (probability) +fliplr: 0.5 # image flip left-right (probability) +mosaic: 1.0 # image mosaic (probability) +mixup: 0.1 # image mixup (probability) +copy_paste: 0.1 # segment copy-paste (probability) diff --git a/data/hyps/hyp.scratch-low.yaml b/data/hyps/hyp.scratch-low.yaml new file mode 100644 index 0000000000..e89b3ba4e7 --- /dev/null +++ b/data/hyps/hyp.scratch-low.yaml @@ -0,0 +1,35 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Hyperparameters for low-augmentation COCO training from scratch +# python train.py --batch 64 --cfg yolov5n6.yaml --weights '' --data coco.yaml --img 640 --epochs 300 --linear +# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials + +lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) +lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf) +momentum: 0.937 # SGD momentum/Adam beta1 +weight_decay: 0.0005 # optimizer weight decay 5e-4 +warmup_epochs: 3.0 # warmup epochs (fractions ok) +warmup_momentum: 0.8 # warmup initial momentum +warmup_bias_lr: 0.1 # warmup initial bias lr +box: 0.05 # box loss gain +cls: 0.5 # cls loss gain +cls_pw: 1.0 # cls BCELoss positive_weight +obj: 1.0 # obj loss gain (scale with pixels) +obj_pw: 1.0 # obj BCELoss positive_weight +iou_t: 0.20 # IoU training threshold +anchor_t: 4.0 # anchor-multiple threshold +# anchors: 3 # anchors per output layer (0 to ignore) +fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) +hsv_h: 0.015 # image HSV-Hue augmentation (fraction) +hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) +hsv_v: 0.4 # image HSV-Value augmentation (fraction) +degrees: 0.0 # image rotation (+/- deg) +translate: 0.1 # image translation (+/- fraction) +scale: 0.5 # image scale (+/- gain) +shear: 0.0 # image shear (+/- deg) +perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 +flipud: 0.0 # image flip up-down (probability) +fliplr: 0.5 # image flip left-right (probability) +mosaic: 1.0 # image mosaic (probability) +mixup: 0.0 # image mixup (probability) +copy_paste: 0.0 # segment copy-paste (probability) diff --git a/data/hyps/hyp.scratch-med.yaml b/data/hyps/hyp.scratch-med.yaml new file mode 100644 index 0000000000..7dfd2f3060 --- /dev/null +++ b/data/hyps/hyp.scratch-med.yaml @@ -0,0 +1,35 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Hyperparameters for medium-augmentation COCO training from scratch +# python train.py --batch 32 --cfg yolov5m6.yaml --weights '' --data coco.yaml --img 1280 --epochs 300 +# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials + +lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) +lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf) +momentum: 0.937 # SGD momentum/Adam beta1 +weight_decay: 0.0005 # optimizer weight decay 5e-4 +warmup_epochs: 3.0 # warmup epochs (fractions ok) +warmup_momentum: 0.8 # warmup initial momentum +warmup_bias_lr: 0.1 # warmup initial bias lr +box: 0.05 # box loss gain +cls: 0.3 # cls loss gain +cls_pw: 1.0 # cls BCELoss positive_weight +obj: 0.7 # obj loss gain (scale with pixels) +obj_pw: 1.0 # obj BCELoss positive_weight +iou_t: 0.20 # IoU training threshold +anchor_t: 4.0 # anchor-multiple threshold +# anchors: 3 # anchors per output layer (0 to ignore) +fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5) +hsv_h: 0.015 # image HSV-Hue augmentation (fraction) +hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) +hsv_v: 0.4 # image HSV-Value augmentation (fraction) +degrees: 0.0 # image rotation (+/- deg) +translate: 0.1 # image translation (+/- fraction) +scale: 0.9 # image scale (+/- gain) +shear: 0.0 # image shear (+/- deg) +perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 +flipud: 0.0 # image flip up-down (probability) +fliplr: 0.5 # image flip left-right (probability) +mosaic: 1.0 # image mosaic (probability) +mixup: 0.1 # image mixup (probability) +copy_paste: 0.0 # segment copy-paste (probability) diff --git a/data/samples/bus.jpg b/data/images/bus.jpg similarity index 100% rename from data/samples/bus.jpg rename to data/images/bus.jpg diff --git a/data/samples/zidane.jpg b/data/images/zidane.jpg similarity index 100% rename from data/samples/zidane.jpg rename to data/images/zidane.jpg diff --git a/data/objects365.yaml b/data/objects365.yaml new file mode 100644 index 0000000000..248b6c7750 --- /dev/null +++ b/data/objects365.yaml @@ -0,0 +1,437 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Objects365 dataset https://www.objects365.org/ by Megvii +# Example usage: python train.py --data Objects365.yaml +# parent +# ├── yolov5 +# └── datasets +# └── Objects365 ← downloads here (712 GB = 367G data + 345G zips) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/Objects365 # dataset root dir +train: images/train # train images (relative to 'path') 1742289 images +val: images/val # val images (relative to 'path') 80000 images +test: # test images (optional) + +# Classes +names: + 0: Person + 1: Sneakers + 2: Chair + 3: Other Shoes + 4: Hat + 5: Car + 6: Lamp + 7: Glasses + 8: Bottle + 9: Desk + 10: Cup + 11: Street Lights + 12: Cabinet/shelf + 13: Handbag/Satchel + 14: Bracelet + 15: Plate + 16: Picture/Frame + 17: Helmet + 18: Book + 19: Gloves + 20: Storage box + 21: Boat + 22: Leather Shoes + 23: Flower + 24: Bench + 25: Potted Plant + 26: Bowl/Basin + 27: Flag + 28: Pillow + 29: Boots + 30: Vase + 31: Microphone + 32: Necklace + 33: Ring + 34: SUV + 35: Wine Glass + 36: Belt + 37: Monitor/TV + 38: Backpack + 39: Umbrella + 40: Traffic Light + 41: Speaker + 42: Watch + 43: Tie + 44: Trash bin Can + 45: Slippers + 46: Bicycle + 47: Stool + 48: Barrel/bucket + 49: Van + 50: Couch + 51: Sandals + 52: Basket + 53: Drum + 54: Pen/Pencil + 55: Bus + 56: Wild Bird + 57: High Heels + 58: Motorcycle + 59: Guitar + 60: Carpet + 61: Cell Phone + 62: Bread + 63: Camera + 64: Canned + 65: Truck + 66: Traffic cone + 67: Cymbal + 68: Lifesaver + 69: Towel + 70: Stuffed Toy + 71: Candle + 72: Sailboat + 73: Laptop + 74: Awning + 75: Bed + 76: Faucet + 77: Tent + 78: Horse + 79: Mirror + 80: Power outlet + 81: Sink + 82: Apple + 83: Air Conditioner + 84: Knife + 85: Hockey Stick + 86: Paddle + 87: Pickup Truck + 88: Fork + 89: Traffic Sign + 90: Balloon + 91: Tripod + 92: Dog + 93: Spoon + 94: Clock + 95: Pot + 96: Cow + 97: Cake + 98: Dinning Table + 99: Sheep + 100: Hanger + 101: Blackboard/Whiteboard + 102: Napkin + 103: Other Fish + 104: Orange/Tangerine + 105: Toiletry + 106: Keyboard + 107: Tomato + 108: Lantern + 109: Machinery Vehicle + 110: Fan + 111: Green Vegetables + 112: Banana + 113: Baseball Glove + 114: Airplane + 115: Mouse + 116: Train + 117: Pumpkin + 118: Soccer + 119: Skiboard + 120: Luggage + 121: Nightstand + 122: Tea pot + 123: Telephone + 124: Trolley + 125: Head Phone + 126: Sports Car + 127: Stop Sign + 128: Dessert + 129: Scooter + 130: Stroller + 131: Crane + 132: Remote + 133: Refrigerator + 134: Oven + 135: Lemon + 136: Duck + 137: Baseball Bat + 138: Surveillance Camera + 139: Cat + 140: Jug + 141: Broccoli + 142: Piano + 143: Pizza + 144: Elephant + 145: Skateboard + 146: Surfboard + 147: Gun + 148: Skating and Skiing shoes + 149: Gas stove + 150: Donut + 151: Bow Tie + 152: Carrot + 153: Toilet + 154: Kite + 155: Strawberry + 156: Other Balls + 157: Shovel + 158: Pepper + 159: Computer Box + 160: Toilet Paper + 161: Cleaning Products + 162: Chopsticks + 163: Microwave + 164: Pigeon + 165: Baseball + 166: Cutting/chopping Board + 167: Coffee Table + 168: Side Table + 169: Scissors + 170: Marker + 171: Pie + 172: Ladder + 173: Snowboard + 174: Cookies + 175: Radiator + 176: Fire Hydrant + 177: Basketball + 178: Zebra + 179: Grape + 180: Giraffe + 181: Potato + 182: Sausage + 183: Tricycle + 184: Violin + 185: Egg + 186: Fire Extinguisher + 187: Candy + 188: Fire Truck + 189: Billiards + 190: Converter + 191: Bathtub + 192: Wheelchair + 193: Golf Club + 194: Briefcase + 195: Cucumber + 196: Cigar/Cigarette + 197: Paint Brush + 198: Pear + 199: Heavy Truck + 200: Hamburger + 201: Extractor + 202: Extension Cord + 203: Tong + 204: Tennis Racket + 205: Folder + 206: American Football + 207: earphone + 208: Mask + 209: Kettle + 210: Tennis + 211: Ship + 212: Swing + 213: Coffee Machine + 214: Slide + 215: Carriage + 216: Onion + 217: Green beans + 218: Projector + 219: Frisbee + 220: Washing Machine/Drying Machine + 221: Chicken + 222: Printer + 223: Watermelon + 224: Saxophone + 225: Tissue + 226: Toothbrush + 227: Ice cream + 228: Hot-air balloon + 229: Cello + 230: French Fries + 231: Scale + 232: Trophy + 233: Cabbage + 234: Hot dog + 235: Blender + 236: Peach + 237: Rice + 238: Wallet/Purse + 239: Volleyball + 240: Deer + 241: Goose + 242: Tape + 243: Tablet + 244: Cosmetics + 245: Trumpet + 246: Pineapple + 247: Golf Ball + 248: Ambulance + 249: Parking meter + 250: Mango + 251: Key + 252: Hurdle + 253: Fishing Rod + 254: Medal + 255: Flute + 256: Brush + 257: Penguin + 258: Megaphone + 259: Corn + 260: Lettuce + 261: Garlic + 262: Swan + 263: Helicopter + 264: Green Onion + 265: Sandwich + 266: Nuts + 267: Speed Limit Sign + 268: Induction Cooker + 269: Broom + 270: Trombone + 271: Plum + 272: Rickshaw + 273: Goldfish + 274: Kiwi fruit + 275: Router/modem + 276: Poker Card + 277: Toaster + 278: Shrimp + 279: Sushi + 280: Cheese + 281: Notepaper + 282: Cherry + 283: Pliers + 284: CD + 285: Pasta + 286: Hammer + 287: Cue + 288: Avocado + 289: Hamimelon + 290: Flask + 291: Mushroom + 292: Screwdriver + 293: Soap + 294: Recorder + 295: Bear + 296: Eggplant + 297: Board Eraser + 298: Coconut + 299: Tape Measure/Ruler + 300: Pig + 301: Showerhead + 302: Globe + 303: Chips + 304: Steak + 305: Crosswalk Sign + 306: Stapler + 307: Camel + 308: Formula 1 + 309: Pomegranate + 310: Dishwasher + 311: Crab + 312: Hoverboard + 313: Meat ball + 314: Rice Cooker + 315: Tuba + 316: Calculator + 317: Papaya + 318: Antelope + 319: Parrot + 320: Seal + 321: Butterfly + 322: Dumbbell + 323: Donkey + 324: Lion + 325: Urinal + 326: Dolphin + 327: Electric Drill + 328: Hair Dryer + 329: Egg tart + 330: Jellyfish + 331: Treadmill + 332: Lighter + 333: Grapefruit + 334: Game board + 335: Mop + 336: Radish + 337: Baozi + 338: Target + 339: French + 340: Spring Rolls + 341: Monkey + 342: Rabbit + 343: Pencil Case + 344: Yak + 345: Red Cabbage + 346: Binoculars + 347: Asparagus + 348: Barbell + 349: Scallop + 350: Noddles + 351: Comb + 352: Dumpling + 353: Oyster + 354: Table Tennis paddle + 355: Cosmetics Brush/Eyeliner Pencil + 356: Chainsaw + 357: Eraser + 358: Lobster + 359: Durian + 360: Okra + 361: Lipstick + 362: Cosmetics Mirror + 363: Curling + 364: Table Tennis + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + from tqdm import tqdm + + from utils.general import Path, check_requirements, download, np, xyxy2xywhn + + check_requirements('pycocotools>=2.0') + from pycocotools.coco import COCO + + # Make Directories + dir = Path(yaml['path']) # dataset root dir + for p in 'images', 'labels': + (dir / p).mkdir(parents=True, exist_ok=True) + for q in 'train', 'val': + (dir / p / q).mkdir(parents=True, exist_ok=True) + + # Train, Val Splits + for split, patches in [('train', 50 + 1), ('val', 43 + 1)]: + print(f"Processing {split} in {patches} patches ...") + images, labels = dir / 'images' / split, dir / 'labels' / split + + # Download + url = f"https://dorc.ks3-cn-beijing.ksyun.com/data-set/2020Objects365%E6%95%B0%E6%8D%AE%E9%9B%86/{split}/" + if split == 'train': + download([f'{url}zhiyuan_objv2_{split}.tar.gz'], dir=dir, delete=False) # annotations json + download([f'{url}patch{i}.tar.gz' for i in range(patches)], dir=images, curl=True, delete=False, threads=8) + elif split == 'val': + download([f'{url}zhiyuan_objv2_{split}.json'], dir=dir, delete=False) # annotations json + download([f'{url}images/v1/patch{i}.tar.gz' for i in range(15 + 1)], dir=images, curl=True, delete=False, threads=8) + download([f'{url}images/v2/patch{i}.tar.gz' for i in range(16, patches)], dir=images, curl=True, delete=False, threads=8) + + # Move + for f in tqdm(images.rglob('*.jpg'), desc=f'Moving {split} images'): + f.rename(images / f.name) # move to /images/{split} + + # Labels + coco = COCO(dir / f'zhiyuan_objv2_{split}.json') + names = [x["name"] for x in coco.loadCats(coco.getCatIds())] + for cid, cat in enumerate(names): + catIds = coco.getCatIds(catNms=[cat]) + imgIds = coco.getImgIds(catIds=catIds) + for im in tqdm(coco.loadImgs(imgIds), desc=f'Class {cid + 1}/{len(names)} {cat}'): + width, height = im["width"], im["height"] + path = Path(im["file_name"]) # image filename + try: + with open(labels / path.with_suffix('.txt').name, 'a') as file: + annIds = coco.getAnnIds(imgIds=im["id"], catIds=catIds, iscrowd=False) + for a in coco.loadAnns(annIds): + x, y, w, h = a['bbox'] # bounding box in xywh (xy top-left corner) + xyxy = np.array([x, y, x + w, y + h])[None] # pixels(1,4) + x, y, w, h = xyxy2xywhn(xyxy, w=width, h=height, clip=True)[0] # normalized and clipped + file.write(f"{cid} {x:.5f} {y:.5f} {w:.5f} {h:.5f}\n") + except Exception as e: + print(e) diff --git a/data/scripts/download_weights.sh b/data/scripts/download_weights.sh new file mode 100755 index 0000000000..92be4847a7 --- /dev/null +++ b/data/scripts/download_weights.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Download latest models from https://github.com/ultralytics/yolov5/releases +# Example usage: bash data/scripts/download_weights.sh +# parent +# └── yolov5 +# ├── yolov5s.pt ← downloads here +# ├── yolov5m.pt +# └── ... + +python - << EOF +from utils.downloads import attempt_download + +p5 = list('nsmlx') # P5 models +p6 = [f'{x}6' for x in p5] # P6 models +cls = [f'{x}-cls' for x in p5] # classification models +seg = [f'{x}-seg' for x in p5] # classification models + +for x in p5 + p6 + cls + seg: + attempt_download(f'weights/yolov5{x}.pt') + +EOF diff --git a/data/scripts/get_coco.sh b/data/scripts/get_coco.sh new file mode 100755 index 0000000000..286cf28b18 --- /dev/null +++ b/data/scripts/get_coco.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Download COCO 2017 dataset http://cocodataset.org +# Example usage: bash data/scripts/get_coco.sh +# parent +# ├── yolov5 +# └── datasets +# └── coco ← downloads here + +# Arguments (optional) Usage: bash data/scripts/get_coco.sh --train --val --test --segments +if [ "$#" -gt 0 ]; then + for opt in "$@"; do + case "${opt}" in + --train) train=true ;; + --val) val=true ;; + --test) test=true ;; + --segments) segments=true ;; + esac + done +else + train=true + val=true + test=false + segments=false +fi + +# Download/unzip labels +d='../datasets' # unzip directory +url=https://github.com/ultralytics/yolov5/releases/download/v1.0/ +if [ "$segments" == "true" ]; then + f='coco2017labels-segments.zip' # 168 MB +else + f='coco2017labels.zip' # 46 MB +fi +echo 'Downloading' $url$f ' ...' +curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f & + +# Download/unzip images +d='../datasets/coco/images' # unzip directory +url=http://images.cocodataset.org/zips/ +if [ "$train" == "true" ]; then + f='train2017.zip' # 19G, 118k images + echo 'Downloading' $url$f '...' + curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f & +fi +if [ "$val" == "true" ]; then + f='val2017.zip' # 1G, 5k images + echo 'Downloading' $url$f '...' + curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f & +fi +if [ "$test" == "true" ]; then + f='test2017.zip' # 7G, 41k images (optional) + echo 'Downloading' $url$f '...' + curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f & +fi +wait # finish background tasks diff --git a/data/scripts/get_coco128.sh b/data/scripts/get_coco128.sh new file mode 100755 index 0000000000..a44eb84524 --- /dev/null +++ b/data/scripts/get_coco128.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Download COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) +# Example usage: bash data/scripts/get_coco128.sh +# parent +# ├── yolov5 +# └── datasets +# └── coco128 ← downloads here + +# Download/unzip images and labels +d='../datasets' # unzip directory +url=https://github.com/ultralytics/yolov5/releases/download/v1.0/ +f='coco128.zip' # or 'coco128-segments.zip', 68 MB +echo 'Downloading' $url$f ' ...' +curl -L $url$f -o $f -# && unzip -q $f -d $d && rm $f & + +wait # finish background tasks diff --git a/data/scripts/get_imagenet.sh b/data/scripts/get_imagenet.sh new file mode 100755 index 0000000000..8859b8d4b6 --- /dev/null +++ b/data/scripts/get_imagenet.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Download ILSVRC2012 ImageNet dataset https://image-net.org +# Example usage: bash data/scripts/get_imagenet.sh +# parent +# ├── yolov5 +# └── datasets +# └── imagenet ← downloads here + +# Arguments (optional) Usage: bash data/scripts/get_imagenet.sh --train --val +if [ "$#" -gt 0 ]; then + for opt in "$@"; do + case "${opt}" in + --train) train=true ;; + --val) val=true ;; + esac + done +else + train=true + val=true +fi + +# Make dir +d='../datasets/imagenet' # unzip directory +mkdir -p $d && cd $d + +# Download/unzip train +if [ "$train" == "true" ]; then + wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar # download 138G, 1281167 images + mkdir train && mv ILSVRC2012_img_train.tar train/ && cd train + tar -xf ILSVRC2012_img_train.tar && rm -f ILSVRC2012_img_train.tar + find . -name "*.tar" | while read NAME; do + mkdir -p "${NAME%.tar}" + tar -xf "${NAME}" -C "${NAME%.tar}" + rm -f "${NAME}" + done + cd .. +fi + +# Download/unzip val +if [ "$val" == "true" ]; then + wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar # download 6.3G, 50000 images + mkdir val && mv ILSVRC2012_img_val.tar val/ && cd val && tar -xf ILSVRC2012_img_val.tar + wget -qO- https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh | bash # move into subdirs +fi + +# Delete corrupted image (optional: PNG under JPEG name that may cause dataloaders to fail) +# rm train/n04266014/n04266014_10835.JPEG + +# TFRecords (optional) +# wget https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_lsvrc_2015_synsets.txt diff --git a/data/trainvalno5k.shapes b/data/trainvalno5k.shapes deleted file mode 100644 index 855a0700e6..0000000000 --- a/data/trainvalno5k.shapes +++ /dev/null @@ -1,117263 +0,0 @@ -640 480 -640 426 -640 428 -640 425 -481 640 -381 500 -640 488 -480 640 -640 426 -427 640 -500 375 -612 612 -640 425 -512 640 -640 480 -640 427 -640 427 -640 416 -640 480 -416 640 -640 481 -640 573 -480 640 -640 480 -640 428 -480 640 -427 640 -640 536 -640 480 -640 428 -640 424 -500 333 -591 640 -640 480 -640 426 -600 600 -640 427 -640 427 -640 480 -640 481 -640 427 -640 480 -640 480 -480 640 -480 640 -640 480 -446 640 -640 480 -640 611 -426 640 -640 480 -640 389 -427 640 -640 480 -640 480 -480 640 -640 480 -640 427 -500 495 -500 313 -640 480 -360 640 -427 640 -640 480 -640 480 -640 425 -640 484 -460 312 -423 640 -427 640 -640 513 -473 500 -640 426 -640 480 -640 248 -640 480 -640 480 -480 640 -640 446 -640 427 -427 640 -500 375 -640 427 -640 472 -640 425 -640 427 -640 427 -640 481 -480 640 -612 612 -640 480 -428 640 -500 333 -640 480 -640 457 -359 640 -640 480 -640 361 -426 640 -429 640 -640 427 -612 612 -640 422 -500 332 -640 360 -640 360 -640 393 -512 640 -640 480 -640 431 -640 575 -640 480 -640 427 -640 427 -460 640 -640 427 -612 612 -327 500 -640 512 -392 500 -612 612 -640 480 -500 375 -640 360 -480 640 -427 640 -640 480 -640 369 -480 640 -480 640 -480 640 -427 640 -640 480 -640 480 -640 427 -612 612 -640 419 -640 427 -640 428 -640 480 -640 480 -443 640 -640 532 -640 480 -424 640 -640 424 -640 453 -640 424 -427 640 -640 480 -640 480 -500 332 -500 274 -640 359 -640 480 -480 640 -480 640 -480 640 -640 435 -640 427 -640 463 -640 522 -640 335 -640 480 -640 480 -640 492 -426 640 -480 640 -640 428 -500 333 -480 640 -640 426 -640 482 -480 640 -518 600 -640 480 -480 640 -640 419 -640 498 -640 480 -427 640 -612 612 -500 374 -640 428 -640 463 -640 480 -640 480 -480 640 -640 427 -354 500 -640 480 -428 640 -640 428 -640 480 -640 428 -640 428 -600 464 -500 375 -640 427 -612 612 -424 640 -427 640 -427 640 -612 612 -640 480 -640 425 -640 480 -500 375 -640 480 -480 640 -640 480 -640 480 -640 427 -640 480 -500 337 -500 335 -640 258 -640 480 -640 425 -640 562 -500 419 -640 427 -333 500 -482 500 -640 427 -640 427 -612 612 -640 480 -640 480 -500 333 -640 640 -500 375 -640 518 -640 480 -640 425 -640 426 -640 494 -640 427 -640 480 -480 640 -500 375 -640 427 -640 424 -640 480 -640 480 -640 480 -640 278 -458 640 -640 430 -640 480 -500 500 -640 640 -375 500 -564 640 -640 480 -500 353 -640 413 -473 640 -640 480 -640 427 -500 375 -640 233 -550 640 -500 333 -640 427 -640 332 -640 425 -640 426 -640 544 -640 480 -640 453 -640 640 -480 252 -500 375 -640 480 -640 480 -640 480 -640 429 -640 426 -640 480 -640 480 -480 640 -640 425 -375 500 -640 480 -640 427 -640 428 -640 462 -640 480 -428 640 -640 427 -480 640 -427 640 -501 640 -482 640 -640 427 -500 333 -640 480 -500 299 -640 463 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -375 500 -426 640 -500 333 -640 345 -640 480 -640 580 -640 480 -428 640 -640 427 -333 500 -640 480 -640 480 -640 626 -640 428 -640 427 -640 480 -640 427 -400 500 -640 427 -500 375 -640 478 -640 480 -640 480 -640 427 -640 427 -640 427 -640 480 -500 500 -640 427 -640 360 -637 640 -481 640 -427 640 -640 426 -427 640 -640 427 -640 428 -480 640 -640 454 -609 609 -425 640 -426 640 -424 640 -427 640 -640 480 -640 427 -332 500 -640 478 -427 640 -427 640 -427 640 -640 480 -640 427 -640 480 -640 427 -640 427 -427 640 -640 376 -640 443 -640 480 -640 429 -640 480 -640 428 -640 640 -640 323 -640 480 -320 240 -640 480 -511 640 -640 408 -640 480 -500 375 -640 480 -500 297 -549 640 -500 358 -536 640 -480 640 -640 480 -640 383 -640 427 -640 480 -640 428 -640 480 -640 480 -640 482 -640 426 -640 427 -640 427 -425 640 -500 492 -640 512 -426 640 -640 383 -612 612 -640 427 -640 423 -427 640 -640 463 -480 640 -640 426 -640 427 -640 512 -480 640 -640 427 -455 640 -424 640 -533 640 -640 519 -640 421 -500 375 -640 427 -640 427 -640 443 -640 459 -640 480 -640 480 -427 640 -434 640 -500 335 -640 368 -612 612 -640 427 -640 479 -640 427 -640 480 -640 429 -640 480 -482 640 -512 640 -640 448 -640 408 -640 480 -640 480 -640 480 -612 612 -640 426 -500 392 -640 427 -640 480 -640 426 -640 640 -640 512 -640 427 -427 640 -612 612 -640 427 -640 480 -640 505 -427 640 -427 640 -640 480 -500 316 -640 482 -362 500 -500 500 -640 569 -640 638 -640 427 -480 640 -427 640 -640 427 -640 480 -640 480 -640 480 -640 425 -480 640 -500 443 -640 480 -640 427 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -500 333 -400 500 -480 640 -640 480 -516 640 -640 480 -500 333 -640 409 -350 233 -640 374 -640 401 -386 500 -640 480 -640 425 -640 426 -640 480 -640 480 -640 480 -640 426 -640 480 -640 480 -640 480 -640 428 -640 554 -427 640 -640 426 -483 640 -640 480 -640 480 -640 429 -425 640 -640 133 -333 500 -640 424 -480 640 -640 480 -640 480 -640 480 -458 640 -428 640 -640 361 -370 640 -360 480 -640 386 -640 426 -640 480 -640 480 -640 427 -640 427 -640 480 -500 375 -640 427 -640 572 -640 481 -640 414 -612 612 -640 480 -640 457 -640 480 -640 480 -500 375 -428 640 -480 640 -640 480 -640 427 -640 480 -640 480 -640 428 -640 424 -640 376 -640 480 -640 480 -640 640 -640 478 -480 640 -640 480 -438 640 -480 640 -429 640 -640 438 -640 427 -640 427 -640 480 -640 480 -425 640 -640 506 -640 426 -640 480 -640 427 -427 640 -640 481 -640 480 -500 334 -640 426 -375 500 -640 480 -640 425 -640 425 -500 331 -640 512 -480 640 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -640 360 -640 640 -640 458 -640 480 -640 507 -640 480 -640 480 -526 640 -427 640 -640 480 -640 480 -429 640 -640 480 -427 640 -500 375 -640 428 -640 640 -640 480 -640 415 -640 480 -640 480 -612 612 -427 640 -640 480 -640 480 -478 640 -640 480 -640 565 -480 640 -374 500 -500 331 -640 427 -424 640 -640 350 -640 424 -612 612 -640 427 -640 427 -640 427 -612 612 -640 472 -500 375 -640 480 -640 480 -480 640 -640 480 -640 426 -640 480 -375 500 -640 438 -640 480 -640 494 -640 426 -428 640 -640 480 -500 366 -640 480 -500 375 -640 480 -640 519 -640 426 -640 480 -480 640 -640 480 -640 425 -640 425 -640 478 -640 424 -480 640 -478 640 -640 480 -640 427 -640 444 -480 640 -640 481 -640 480 -640 385 -640 480 -427 640 -640 480 -640 360 -640 480 -640 569 -640 480 -640 426 -640 474 -425 640 -640 347 -375 500 -640 425 -640 640 -640 467 -640 427 -427 640 -427 640 -640 480 -640 413 -640 480 -640 425 -640 371 -585 640 -640 480 -400 317 -640 432 -640 427 -640 480 -640 480 -640 346 -640 427 -640 426 -640 471 -500 333 -640 438 -640 426 -640 480 -333 500 -640 480 -640 426 -640 480 -500 333 -640 427 -480 640 -500 375 -640 480 -640 427 -438 640 -640 427 -640 480 -640 482 -640 568 -640 640 -640 480 -500 375 -640 427 -640 425 -640 426 -640 428 -640 480 -612 612 -640 480 -640 427 -640 480 -640 426 -640 427 -640 361 -612 612 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 469 -396 500 -640 427 -640 480 -500 375 -640 425 -600 400 -640 427 -480 640 -375 500 -425 640 -427 640 -640 480 -640 427 -480 640 -640 361 -640 473 -480 640 -640 480 -640 433 -427 640 -640 467 -640 429 -640 431 -640 427 -640 478 -640 480 -500 333 -425 640 -640 425 -612 612 -640 427 -640 482 -500 363 -378 500 -640 480 -640 426 -640 427 -640 424 -640 427 -640 439 -640 427 -340 640 -640 480 -640 428 -640 427 -640 480 -419 640 -616 640 -640 423 -640 459 -500 467 -640 427 -640 640 -640 361 -640 640 -640 427 -640 438 -426 640 -620 640 -500 364 -640 480 -640 427 -640 443 -457 640 -640 478 -640 417 -640 640 -640 383 -640 390 -640 427 -640 426 -640 413 -640 480 -640 480 -500 369 -640 457 -640 480 -640 427 -375 500 -500 377 -640 480 -640 427 -427 640 -500 491 -640 480 -640 480 -612 612 -640 425 -640 428 -640 480 -640 503 -640 425 -500 333 -480 640 -480 640 -640 480 -500 333 -486 640 -640 427 -640 428 -375 500 -375 500 -640 425 -640 512 -640 427 -640 427 -480 640 -491 640 -640 427 -640 428 -640 427 -640 480 -427 640 -640 463 -427 640 -640 427 -333 500 -480 640 -640 480 -612 612 -480 640 -480 640 -640 426 -640 427 -640 427 -640 433 -640 480 -500 332 -612 612 -640 480 -640 480 -640 476 -640 388 -427 640 -640 353 -640 426 -428 640 -640 457 -640 424 -640 427 -475 500 -426 640 -640 640 -640 480 -640 480 -640 480 -500 471 -640 480 -640 480 -640 481 -480 640 -640 480 -428 640 -443 640 -640 426 -427 640 -640 427 -500 375 -425 640 -640 359 -640 406 -640 427 -500 328 -640 480 -640 426 -640 238 -640 429 -640 480 -640 473 -640 424 -640 383 -640 480 -480 640 -640 480 -640 426 -640 426 -640 322 -414 330 -640 425 -500 346 -640 226 -478 640 -612 612 -556 640 -500 333 -333 500 -640 426 -640 427 -640 427 -640 379 -426 640 -640 427 -427 640 -640 428 -640 480 -428 640 -500 375 -333 500 -640 427 -640 428 -640 426 -480 640 -640 427 -281 500 -500 375 -640 480 -476 640 -640 480 -612 612 -640 506 -640 427 -640 434 -640 480 -640 480 -480 640 -500 375 -640 426 -335 500 -375 500 -640 480 -429 640 -375 500 -640 442 -640 480 -480 640 -640 388 -640 427 -640 480 -640 427 -640 404 -427 640 -482 640 -640 424 -640 418 -500 498 -640 202 -640 426 -640 428 -640 495 -640 422 -640 428 -480 640 -640 427 -640 480 -640 480 -375 500 -640 441 -640 463 -640 480 -480 640 -424 640 -427 640 -640 425 -640 426 -400 500 -500 375 -640 427 -640 420 -640 469 -640 455 -640 480 -640 427 -640 480 -640 509 -480 640 -640 426 -640 418 -640 480 -640 427 -640 480 -640 503 -640 480 -640 426 -640 481 -640 427 -480 640 -640 427 -500 375 -640 480 -640 480 -640 360 -640 426 -480 640 -640 428 -640 480 -640 640 -326 500 -373 500 -425 640 -519 640 -500 375 -500 375 -640 478 -640 478 -500 375 -640 480 -640 472 -508 503 -640 427 -640 480 -512 640 -640 562 -500 375 -480 640 -640 480 -427 640 -640 411 -640 520 -640 480 -640 428 -431 500 -640 426 -424 640 -640 480 -640 480 -500 334 -640 427 -640 309 -480 640 -427 640 -640 442 -480 640 -640 428 -640 410 -640 428 -640 480 -480 640 -640 427 -385 640 -427 640 -480 640 -488 640 -480 640 -500 339 -640 454 -612 612 -640 353 -380 472 -480 640 -640 448 -640 449 -640 640 -375 500 -640 480 -427 640 -480 640 -500 375 -640 435 -640 480 -640 480 -591 400 -640 427 -640 425 -640 424 -424 640 -640 427 -640 411 -640 427 -640 480 -640 427 -426 640 -500 375 -640 501 -640 428 -426 640 -640 480 -640 480 -640 427 -479 640 -640 427 -640 424 -500 375 -427 640 -427 640 -640 480 -500 375 -500 375 -640 461 -424 640 -640 640 -640 426 -640 480 -427 640 -640 480 -640 426 -640 425 -640 346 -480 640 -640 378 -478 640 -640 425 -426 640 -640 419 -640 480 -640 480 -640 480 -640 417 -640 427 -427 640 -640 427 -502 640 -480 640 -640 343 -640 480 -640 637 -500 376 -640 393 -490 490 -500 375 -640 426 -427 640 -480 640 -500 435 -640 453 -640 427 -428 640 -640 480 -427 640 -640 422 -640 480 -640 480 -640 480 -640 428 -640 426 -640 480 -500 333 -424 640 -640 480 -640 430 -480 640 -640 481 -640 480 -480 640 -640 489 -470 313 -431 640 -640 360 -640 427 -500 371 -640 426 -640 480 -480 640 -427 640 -640 480 -425 640 -640 480 -640 480 -640 480 -640 427 -640 492 -500 375 -582 640 -640 427 -500 332 -428 640 -320 640 -640 480 -426 640 -425 640 -500 375 -320 480 -640 425 -640 425 -640 427 -640 424 -640 480 -597 398 -640 425 -640 431 -640 426 -612 612 -640 425 -640 427 -640 358 -640 427 -640 480 -640 429 -640 425 -640 427 -500 335 -500 251 -428 640 -640 356 -640 425 -640 427 -640 480 -640 427 -640 360 -640 415 -640 480 -604 453 -480 640 -500 287 -334 500 -640 428 -640 427 -640 480 -640 480 -375 500 -640 428 -480 640 -640 427 -640 425 -640 427 -640 480 -480 640 -500 375 -640 425 -480 640 -640 426 -640 480 -640 427 -640 480 -640 426 -640 458 -481 640 -640 480 -427 640 -640 427 -640 429 -425 640 -640 480 -640 480 -640 433 -500 410 -640 424 -640 480 -500 375 -500 333 -640 480 -640 428 -500 404 -640 427 -640 427 -640 425 -500 375 -640 425 -640 461 -640 480 -640 427 -427 640 -612 612 -640 427 -640 480 -333 500 -428 640 -640 426 -612 612 -640 391 -640 480 -351 490 -640 360 -640 480 -640 480 -640 480 -480 640 -480 640 -640 448 -640 427 -500 375 -640 480 -640 480 -640 480 -640 484 -640 425 -640 284 -640 480 -640 480 -442 500 -640 381 -640 480 -465 640 -429 640 -640 480 -500 334 -640 427 -423 640 -612 640 -640 480 -640 480 -500 332 -640 469 -426 640 -640 456 -640 425 -375 500 -640 273 -640 480 -333 500 -379 640 -422 640 -640 427 -332 500 -640 427 -500 375 -500 375 -640 427 -640 426 -500 375 -640 400 -640 360 -640 425 -500 400 -640 633 -480 640 -640 426 -640 480 -640 480 -640 426 -427 640 -640 469 -640 425 -640 480 -640 424 -500 500 -640 360 -640 436 -640 427 -316 640 -640 427 -640 427 -470 351 -640 480 -640 480 -640 502 -640 443 -500 333 -640 480 -640 480 -640 427 -640 360 -640 480 -375 500 -475 640 -640 427 -640 427 -640 427 -640 427 -640 426 -640 427 -640 468 -333 500 -427 640 -640 400 -640 427 -480 640 -640 480 -480 640 -478 640 -640 427 -640 480 -478 640 -640 424 -640 426 -640 416 -640 453 -640 480 -500 420 -640 480 -640 480 -640 426 -375 500 -500 349 -640 416 -640 427 -500 375 -427 640 -640 426 -640 480 -375 500 -640 426 -640 425 -612 612 -640 480 -640 480 -500 186 -640 480 -480 640 -640 427 -640 640 -478 640 -640 427 -480 639 -500 327 -640 428 -426 640 -640 360 -433 640 -427 640 -640 475 -478 640 -640 480 -640 470 -640 480 -500 334 -640 427 -640 427 -491 640 -640 480 -640 478 -623 640 -640 480 -491 640 -500 333 -640 426 -640 427 -640 427 -640 424 -640 423 -640 430 -500 333 -640 480 -640 354 -500 334 -640 479 -640 427 -640 360 -640 428 -375 500 -640 480 -640 480 -640 424 -640 427 -480 640 -640 480 -480 640 -640 424 -640 480 -640 480 -500 376 -640 357 -640 427 -640 426 -612 612 -640 425 -612 612 -640 480 -640 427 -640 512 -425 640 -640 640 -640 449 -640 480 -333 500 -500 443 -640 431 -640 425 -500 391 -640 458 -480 640 -471 640 -640 480 -640 479 -640 426 -640 426 -500 375 -640 480 -612 612 -640 480 -480 640 -500 371 -429 640 -426 640 -465 335 -640 384 -426 640 -473 500 -640 426 -640 433 -480 640 -640 480 -640 480 -640 442 -640 480 -640 437 -640 640 -427 640 -640 480 -640 426 -640 427 -640 423 -480 640 -640 448 -640 480 -640 426 -640 360 -640 480 -427 640 -640 427 -640 479 -640 480 -500 352 -640 478 -427 640 -640 480 -640 427 -640 482 -474 640 -640 480 -640 425 -640 367 -480 320 -640 480 -640 480 -640 427 -640 480 -640 425 -500 375 -500 195 -480 640 -432 500 -500 386 -640 427 -640 468 -427 640 -589 640 -640 480 -640 480 -480 640 -425 640 -640 427 -640 429 -640 425 -500 333 -640 427 -640 360 -426 640 -640 480 -640 480 -640 427 -640 354 -640 428 -640 480 -480 640 -612 612 -640 424 -424 640 -640 426 -500 289 -480 640 -612 612 -500 333 -640 360 -640 426 -500 375 -640 480 -427 640 -640 640 -640 427 -640 480 -640 428 -521 640 -640 480 -640 480 -640 427 -640 365 -640 510 -640 427 -480 640 -640 427 -640 360 -640 425 -640 480 -640 427 -640 487 -456 640 -640 480 -640 448 -640 425 -640 427 -427 640 -640 376 -640 427 -640 427 -640 426 -640 480 -640 427 -500 375 -612 612 -500 334 -640 480 -333 500 -640 640 -516 640 -500 375 -500 375 -375 500 -500 329 -612 612 -640 640 -480 640 -426 640 -500 375 -500 332 -640 480 -640 435 -640 427 -640 480 -640 426 -426 640 -640 428 -640 480 -334 500 -427 640 -640 428 -500 375 -489 640 -640 426 -612 612 -480 640 -480 640 -349 640 -640 480 -640 426 -478 640 -640 332 -640 544 -640 474 -396 312 -640 425 -640 480 -640 425 -640 480 -640 383 -513 640 -640 427 -500 375 -424 640 -375 500 -427 640 -640 480 -444 640 -500 375 -640 480 -640 480 -640 480 -480 640 -375 500 -640 427 -640 427 -640 480 -500 375 -425 640 -480 640 -640 428 -640 426 -480 640 -640 427 -480 640 -640 426 -424 640 -426 640 -640 427 -640 425 -333 500 -640 426 -640 427 -640 427 -480 640 -427 640 -640 368 -427 640 -640 480 -640 512 -640 480 -640 553 -640 480 -640 640 -640 360 -359 640 -344 500 -640 480 -640 640 -640 416 -375 500 -612 612 -640 427 -612 612 -640 398 -612 612 -640 480 -640 510 -612 612 -640 480 -640 480 -640 480 -640 427 -640 403 -427 640 -640 427 -480 640 -640 480 -427 640 -500 500 -426 640 -496 640 -375 500 -640 480 -640 480 -640 427 -640 424 -640 427 -640 480 -500 333 -640 480 -640 480 -640 427 -374 500 -457 640 -640 428 -640 427 -334 500 -335 500 -640 480 -640 480 -640 428 -332 500 -640 480 -640 480 -640 480 -500 375 -640 433 -640 427 -640 478 -640 507 -640 480 -640 480 -640 428 -640 480 -640 186 -333 500 -640 427 -640 480 -640 478 -640 421 -640 282 -375 500 -640 480 -480 640 -640 480 -640 480 -640 480 -480 640 -640 427 -640 427 -480 229 -640 426 -640 427 -451 640 -640 480 -500 375 -640 427 -491 500 -415 640 -427 640 -640 427 -375 500 -640 480 -640 427 -640 424 -640 427 -640 426 -640 427 -640 427 -640 425 -640 634 -640 360 -500 375 -640 480 -640 424 -640 426 -640 427 -640 483 -500 333 -634 640 -432 640 -640 480 -640 480 -427 640 -426 640 -640 427 -640 480 -375 500 -640 386 -640 425 -640 428 -640 428 -640 480 -640 426 -427 640 -640 428 -603 640 -640 427 -500 332 -480 640 -342 500 -640 496 -640 480 -612 612 -427 640 -500 448 -414 640 -459 640 -434 640 -640 473 -640 480 -640 480 -640 480 -500 375 -478 640 -640 480 -640 480 -640 480 -640 428 -450 640 -640 427 -640 511 -375 500 -500 375 -640 427 -640 640 -335 500 -640 359 -640 480 -640 480 -640 428 -640 425 -480 640 -426 640 -640 480 -640 565 -640 427 -640 480 -640 426 -640 381 -512 640 -484 640 -640 426 -640 640 -640 480 -481 640 -427 640 -640 596 -640 480 -640 428 -640 429 -640 427 -512 640 -480 640 -427 640 -375 500 -612 612 -640 480 -640 427 -640 360 -612 612 -478 640 -640 419 -640 429 -640 426 -640 480 -640 427 -640 451 -640 480 -480 640 -640 465 -640 480 -425 640 -436 640 -478 640 -640 426 -640 554 -640 480 -640 480 -500 391 -640 426 -640 427 -640 431 -427 640 -640 425 -640 426 -640 411 -480 640 -640 425 -465 640 -640 467 -640 427 -640 480 -510 640 -480 640 -640 422 -640 427 -640 388 -640 480 -640 480 -458 640 -640 480 -480 640 -640 480 -233 247 -640 480 -428 640 -640 427 -640 360 -424 640 -640 478 -640 380 -640 360 -640 425 -500 280 -480 640 -640 426 -640 426 -640 480 -640 480 -640 463 -640 352 -640 480 -427 640 -612 612 -640 426 -480 360 -640 480 -500 375 -640 425 -640 480 -427 640 -500 334 -500 377 -640 425 -500 392 -425 640 -500 334 -333 500 -640 480 -640 480 -640 408 -427 338 -502 640 -500 375 -640 427 -640 640 -640 414 -640 512 -640 427 -640 428 -640 409 -500 375 -500 375 -640 426 -640 478 -640 427 -640 480 -640 480 -640 403 -640 461 -640 503 -640 425 -640 425 -640 457 -425 640 -427 640 -375 500 -333 500 -480 640 -640 480 -640 426 -640 480 -640 448 -640 427 -640 427 -375 500 -640 427 -500 375 -640 427 -640 427 -640 480 -640 427 -428 640 -640 426 -640 480 -300 169 -512 640 -640 480 -640 426 -640 428 -640 480 -640 323 -640 427 -480 640 -640 427 -640 427 -500 400 -428 640 -640 360 -640 480 -427 640 -475 640 -640 480 -333 500 -612 612 -640 480 -640 351 -640 562 -640 480 -640 427 -480 640 -612 612 -640 309 -640 427 -640 480 -480 640 -640 480 -424 640 -640 480 -640 427 -640 425 -640 480 -640 480 -640 480 -478 640 -478 640 -612 612 -640 426 -640 480 -556 640 -500 375 -640 425 -640 480 -480 640 -375 500 -640 427 -480 640 -426 640 -640 427 -640 426 -640 480 -480 640 -640 427 -480 640 -375 500 -640 472 -480 640 -640 427 -640 427 -640 480 -360 270 -640 480 -500 333 -333 500 -640 375 -640 360 -640 480 -427 640 -480 640 -640 428 -480 640 -427 640 -640 512 -640 480 -640 383 -640 369 -640 428 -640 345 -640 424 -612 612 -413 640 -640 442 -500 281 -500 481 -640 480 -480 640 -640 361 -500 332 -500 375 -500 375 -640 427 -500 375 -640 480 -640 429 -640 480 -500 375 -640 407 -640 427 -640 480 -640 480 -640 360 -640 426 -640 480 -500 333 -640 480 -640 425 -640 480 -640 479 -640 386 -383 640 -472 314 -480 640 -640 513 -640 516 -640 428 -500 375 -640 480 -640 480 -640 425 -480 640 -480 640 -591 640 -640 425 -640 480 -500 375 -640 427 -356 480 -640 360 -640 428 -500 333 -480 640 -640 360 -640 480 -640 457 -500 333 -640 427 -300 201 -360 640 -640 640 -640 478 -500 332 -640 480 -640 427 -640 640 -480 640 -640 427 -640 640 -640 480 -640 480 -640 427 -500 375 -640 480 -640 444 -640 427 -640 427 -640 410 -500 375 -619 640 -640 429 -500 277 -399 640 -427 640 -640 421 -640 428 -640 429 -480 640 -480 640 -320 240 -640 427 -640 427 -640 427 -640 426 -640 606 -480 640 -640 451 -640 427 -640 428 -640 360 -640 484 -500 500 -640 482 -640 427 -640 480 -640 424 -640 427 -480 640 -426 640 -640 480 -412 640 -640 480 -640 427 -640 406 -640 480 -500 375 -640 506 -640 480 -640 480 -640 415 -480 640 -640 480 -419 640 -429 640 -640 453 -640 427 -480 640 -500 333 -640 427 -640 480 -640 480 -640 428 -480 640 -640 411 -640 360 -640 429 -500 375 -640 480 -640 427 -640 640 -612 612 -640 480 -612 612 -640 481 -640 496 -376 640 -640 480 -640 431 -640 480 -640 426 -424 640 -500 486 -640 480 -640 480 -640 426 -500 325 -640 458 -640 383 -480 640 -640 369 -640 480 -640 424 -480 640 -500 333 -640 459 -424 640 -612 612 -461 640 -480 640 -375 500 -375 500 -640 423 -640 427 -640 480 -640 428 -640 388 -427 640 -640 480 -333 500 -640 423 -640 427 -640 388 -640 480 -500 375 -640 427 -500 333 -427 640 -640 427 -640 320 -640 429 -640 292 -640 424 -640 480 -640 428 -480 640 -640 408 -640 480 -640 407 -640 419 -640 426 -500 500 -375 500 -640 427 -480 640 -640 427 -640 480 -640 480 -640 161 -640 426 -500 455 -640 427 -640 480 -640 385 -640 479 -640 424 -500 375 -640 480 -640 480 -640 480 -640 480 -640 359 -640 429 -640 472 -480 640 -640 480 -500 332 -640 427 -640 625 -640 480 -640 416 -480 640 -640 385 -366 500 -426 640 -478 640 -431 640 -640 427 -640 427 -375 500 -640 427 -480 640 -640 427 -640 476 -308 233 -480 640 -640 480 -500 376 -640 427 -612 612 -500 376 -640 427 -640 427 -640 480 -640 406 -425 640 -640 480 -640 363 -640 480 -640 424 -640 426 -279 640 -480 640 -640 428 -640 427 -640 383 -640 427 -428 640 -640 425 -640 512 -640 417 -631 640 -640 427 -427 640 -480 640 -640 427 -443 448 -441 640 -640 429 -612 612 -612 612 -640 429 -640 421 -361 640 -640 425 -491 640 -640 480 -321 479 -640 427 -640 447 -429 640 -640 480 -640 480 -640 480 -426 640 -454 640 -640 361 -427 640 -640 480 -426 640 -640 423 -480 640 -612 612 -640 425 -640 520 -640 594 -640 404 -640 427 -640 480 -640 424 -640 427 -640 427 -480 640 -640 396 -640 426 -640 428 -640 585 -640 426 -427 640 -334 500 -480 640 -480 640 -640 427 -500 375 -427 640 -640 424 -375 500 -640 424 -480 640 -350 233 -424 640 -640 427 -640 640 -640 424 -640 427 -640 428 -350 450 -640 480 -640 429 -640 428 -385 500 -640 429 -640 471 -640 480 -500 375 -640 362 -640 427 -612 612 -640 341 -640 427 -640 439 -500 375 -500 333 -500 397 -480 640 -427 640 -375 500 -640 427 -640 480 -640 480 -640 480 -426 640 -640 480 -375 500 -640 480 -640 480 -480 640 -427 640 -640 441 -427 640 -640 512 -500 375 -640 427 -640 428 -640 640 -640 360 -480 640 -500 355 -640 480 -640 480 -480 640 -640 480 -640 327 -640 427 -640 427 -500 375 -566 640 -422 640 -500 312 -640 480 -640 480 -427 640 -480 640 -500 487 -427 640 -427 640 -478 640 -640 426 -640 427 -640 427 -335 500 -500 333 -640 480 -640 428 -640 463 -640 480 -640 427 -640 424 -640 480 -640 480 -640 524 -480 640 -640 480 -612 612 -427 640 -640 427 -640 480 -500 359 -640 425 -640 427 -640 379 -640 480 -640 480 -395 640 -640 427 -640 424 -640 480 -640 480 -612 612 -356 500 -640 359 -640 480 -640 411 -480 640 -640 479 -480 640 -640 427 -480 640 -640 426 -640 427 -640 480 -210 640 -640 597 -640 528 -640 427 -640 431 -640 427 -480 640 -640 480 -480 640 -640 480 -640 569 -480 640 -640 428 -640 480 -500 500 -500 375 -640 426 -640 480 -304 640 -480 640 -640 480 -640 640 -375 500 -500 314 -512 640 -444 640 -426 640 -289 350 -640 435 -640 480 -640 625 -427 640 -500 375 -640 354 -480 640 -640 599 -640 424 -480 640 -500 332 -640 428 -500 335 -640 480 -640 324 -640 480 -640 427 -640 359 -640 480 -640 494 -640 464 -640 494 -640 428 -640 358 -640 427 -640 326 -423 640 -500 375 -640 480 -440 640 -640 426 -361 640 -426 640 -640 480 -480 640 -640 426 -427 640 -640 480 -640 486 -640 611 -640 480 -640 425 -590 397 -612 612 -640 427 -477 358 -500 311 -480 640 -640 480 -640 425 -500 144 -640 427 -640 436 -425 640 -334 500 -640 512 -640 427 -480 640 -640 480 -640 480 -424 640 -640 431 -640 490 -335 479 -500 333 -480 640 -480 640 -426 640 -640 424 -640 528 -640 359 -640 480 -480 640 -640 480 -640 480 -480 640 -500 331 -480 640 -640 428 -640 511 -640 427 -480 640 -500 335 -480 640 -425 640 -426 640 -640 375 -425 640 -408 500 -640 425 -500 375 -640 424 -500 375 -640 480 -427 640 -640 485 -640 480 -427 640 -640 480 -640 283 -593 640 -425 640 -640 427 -480 640 -640 413 -480 640 -640 428 -640 541 -480 640 -640 425 -640 406 -480 640 -480 640 -640 480 -600 600 -640 431 -640 425 -640 426 -500 354 -640 428 -500 328 -640 480 -640 427 -640 426 -394 500 -640 429 -640 425 -480 640 -500 485 -640 480 -640 480 -480 640 -500 375 -640 480 -464 640 -640 427 -640 480 -427 640 -612 612 -411 600 -640 480 -640 427 -427 640 -640 428 -500 376 -640 425 -640 482 -640 427 -640 480 -640 480 -640 480 -640 480 -480 640 -415 600 -640 595 -640 480 -640 425 -640 428 -640 427 -478 640 -424 640 -640 427 -640 314 -640 441 -640 387 -640 640 -640 427 -330 500 -427 640 -480 640 -427 640 -500 333 -480 640 -640 480 -640 426 -480 640 -640 537 -640 481 -640 426 -527 640 -480 640 -640 360 -413 640 -640 427 -640 480 -640 640 -640 480 -640 479 -640 414 -640 480 -640 489 -427 640 -496 640 -640 428 -620 450 -640 639 -500 333 -640 480 -640 431 -640 480 -375 500 -479 640 -426 640 -640 480 -640 480 -640 426 -500 375 -489 640 -500 334 -427 640 -612 612 -640 425 -640 360 -640 425 -640 427 -640 480 -640 478 -640 480 -480 640 -640 478 -500 332 -640 429 -359 640 -640 429 -640 480 -480 640 -640 480 -640 480 -640 360 -451 640 -640 428 -480 640 -640 480 -640 480 -640 424 -640 427 -640 426 -640 480 -361 500 -640 480 -640 501 -625 330 -427 640 -640 424 -640 425 -640 424 -640 426 -640 454 -428 640 -640 427 -612 612 -640 480 -333 500 -612 612 -500 329 -335 500 -640 428 -640 480 -640 480 -640 426 -640 480 -640 426 -480 640 -640 391 -640 409 -640 426 -500 375 -640 640 -640 472 -427 640 -480 640 -640 640 -640 480 -640 480 -480 640 -640 480 -640 427 -500 281 -480 640 -640 428 -429 640 -500 375 -640 501 -500 375 -480 640 -480 640 -419 640 -640 480 -640 427 -375 500 -640 480 -427 640 -500 375 -640 513 -640 480 -640 480 -424 640 -640 314 -640 360 -500 375 -500 375 -478 640 -612 612 -480 640 -640 480 -480 640 -427 640 -640 426 -640 640 -612 612 -424 640 -500 333 -640 480 -426 640 -640 480 -640 480 -640 480 -640 427 -480 640 -500 333 -640 427 -640 424 -640 409 -640 541 -640 489 -640 480 -359 500 -640 427 -640 480 -640 425 -640 413 -479 640 -428 640 -640 480 -640 480 -640 427 -432 500 -640 480 -640 480 -640 429 -500 392 -640 374 -640 424 -640 480 -640 450 -640 496 -500 375 -427 640 -480 640 -480 640 -640 424 -640 480 -478 640 -640 426 -640 360 -427 640 -500 269 -474 640 -500 375 -375 500 -640 480 -500 375 -640 557 -640 361 -500 375 -640 427 -640 427 -640 480 -360 640 -427 640 -612 612 -640 427 -640 426 -375 500 -640 560 -640 332 -612 612 -640 477 -480 640 -640 480 -435 640 -375 500 -640 428 -640 398 -640 428 -375 500 -640 426 -640 428 -640 480 -551 640 -640 480 -640 480 -480 640 -640 480 -480 640 -480 640 -640 480 -640 427 -640 426 -500 381 -640 480 -640 480 -480 640 -640 425 -640 427 -427 640 -500 346 -427 640 -640 276 -640 480 -480 640 -640 480 -640 508 -344 640 -640 480 -640 401 -640 427 -349 640 -640 480 -575 575 -480 640 -640 480 -640 427 -640 424 -500 375 -333 500 -640 480 -640 409 -640 480 -480 640 -640 478 -378 500 -640 480 -521 640 -500 335 -640 426 -433 640 -640 449 -640 480 -640 480 -640 596 -500 375 -480 640 -640 426 -640 428 -640 480 -640 439 -640 427 -458 640 -640 426 -640 480 -640 428 -407 500 -500 375 -640 507 -640 480 -640 480 -640 480 -640 427 -480 640 -640 480 -640 427 -333 500 -378 640 -612 612 -640 640 -427 640 -640 426 -336 500 -640 480 -375 500 -640 427 -640 426 -640 571 -640 427 -640 426 -640 480 -640 427 -480 640 -375 500 -640 480 -640 480 -480 640 -640 441 -333 500 -640 338 -478 640 -379 500 -640 480 -640 500 -503 640 -640 360 -554 640 -427 640 -640 427 -500 500 -500 344 -640 426 -640 427 -640 517 -640 480 -640 428 -500 400 -640 424 -480 640 -640 424 -640 480 -640 426 -347 500 -359 500 -427 640 -640 426 -429 640 -640 426 -640 360 -640 427 -640 427 -640 480 -640 280 -640 414 -640 640 -500 375 -428 640 -429 500 -640 480 -640 480 -640 427 -640 426 -640 480 -640 480 -425 640 -640 309 -640 419 -421 640 -640 480 -428 640 -333 500 -640 426 -480 640 -640 480 -426 640 -640 500 -640 480 -640 427 -427 640 -480 640 -640 480 -640 391 -264 500 -500 375 -640 427 -640 427 -640 398 -640 480 -640 480 -640 425 -500 375 -499 640 -640 360 -500 375 -640 480 -426 640 -640 480 -504 640 -640 480 -500 375 -640 427 -640 480 -480 640 -640 429 -335 500 -478 640 -640 427 -640 480 -640 480 -640 427 -640 480 -640 427 -640 427 -500 375 -500 400 -640 480 -500 333 -500 375 -480 640 -427 640 -640 451 -640 336 -500 395 -640 301 -640 426 -500 375 -404 640 -640 480 -640 640 -640 427 -500 335 -640 458 -426 640 -612 612 -640 575 -638 640 -640 424 -640 478 -640 480 -640 480 -425 640 -428 640 -612 612 -427 640 -500 336 -640 424 -640 508 -640 551 -300 176 -640 426 -640 480 -612 612 -640 478 -640 427 -640 428 -640 480 -640 449 -640 438 -640 427 -500 375 -640 424 -578 640 -640 480 -640 279 -640 480 -640 480 -640 427 -640 427 -426 640 -640 427 -640 429 -427 640 -640 480 -640 480 -640 544 -480 640 -640 480 -640 482 -640 193 -640 480 -640 538 -640 480 -418 339 -640 480 -640 427 -480 640 -640 427 -640 427 -640 427 -640 436 -612 612 -640 427 -640 480 -480 640 -640 427 -426 640 -640 426 -500 375 -640 426 -427 640 -640 428 -500 333 -640 480 -640 480 -640 480 -640 426 -612 612 -640 426 -640 426 -640 427 -640 426 -407 640 -640 480 -640 480 -640 428 -427 640 -480 640 -640 467 -640 481 -640 480 -360 640 -640 497 -640 480 -612 612 -640 427 -640 427 -640 497 -640 480 -640 640 -640 480 -375 500 -640 427 -640 480 -640 460 -640 427 -640 413 -640 427 -640 424 -480 640 -480 640 -500 384 -500 375 -480 640 -640 428 -640 480 -500 375 -500 375 -640 427 -500 375 -640 480 -640 427 -480 640 -640 427 -640 480 -640 467 -640 427 -640 359 -640 360 -640 427 -640 480 -326 500 -640 471 -494 640 -640 411 -640 480 -640 373 -640 425 -480 640 -640 480 -640 427 -640 365 -421 640 -640 427 -640 480 -612 612 -333 500 -640 427 -500 333 -360 640 -640 480 -640 480 -640 359 -640 387 -640 453 -612 612 -640 360 -640 586 -500 375 -640 480 -640 428 -640 426 -640 480 -640 480 -640 428 -375 500 -462 640 -640 427 -567 640 -596 440 -449 640 -640 480 -480 640 -640 483 -640 426 -457 640 -512 640 -427 640 -640 438 -471 640 -640 480 -425 640 -640 427 -480 640 -640 427 -640 480 -640 480 -333 500 -480 640 -640 480 -640 480 -500 375 -640 427 -640 480 -640 417 -427 640 -500 375 -375 500 -640 429 -640 480 -640 480 -640 640 -640 480 -640 480 -480 640 -640 427 -640 309 -640 480 -480 640 -640 424 -426 640 -640 425 -640 481 -500 375 -640 427 -612 612 -640 480 -240 180 -640 478 -640 426 -640 427 -348 500 -640 640 -640 589 -640 480 -500 375 -640 427 -640 444 -640 350 -480 640 -640 427 -640 480 -427 640 -612 612 -480 640 -640 480 -640 480 -640 428 -640 427 -480 640 -640 425 -640 428 -640 426 -640 424 -640 480 -500 375 -640 480 -640 427 -640 427 -427 640 -375 500 -334 500 -640 480 -640 424 -500 346 -640 427 -640 429 -640 434 -640 428 -500 375 -640 426 -500 439 -640 427 -375 500 -640 480 -426 640 -640 554 -640 478 -640 427 -458 640 -640 480 -600 593 -413 640 -640 432 -640 480 -640 427 -640 481 -486 640 -640 427 -500 420 -640 427 -640 480 -329 640 -500 375 -612 612 -427 640 -640 427 -500 353 -640 364 -640 435 -640 480 -640 426 -640 479 -500 375 -640 480 -640 549 -640 480 -640 425 -640 463 -640 478 -640 459 -640 512 -640 428 -480 640 -640 425 -480 640 -640 480 -640 427 -500 490 -513 640 -640 426 -640 428 -640 426 -640 439 -425 640 -612 612 -640 480 -480 640 -640 480 -640 480 -640 427 -640 478 -640 428 -640 425 -640 480 -640 427 -640 428 -500 332 -480 640 -640 419 -640 480 -640 480 -640 430 -640 480 -375 500 -640 358 -367 640 -640 427 -640 480 -640 425 -640 427 -480 640 -640 427 -640 427 -640 439 -640 424 -640 480 -500 334 -640 427 -612 612 -480 640 -500 333 -640 427 -640 480 -357 500 -640 427 -484 640 -500 375 -426 640 -640 480 -640 478 -640 480 -640 480 -500 375 -640 480 -640 428 -426 640 -606 640 -482 640 -640 426 -640 480 -434 640 -426 640 -640 426 -375 500 -640 426 -640 361 -480 640 -640 400 -500 375 -484 640 -640 412 -640 427 -640 433 -612 612 -448 302 -640 480 -480 640 -640 440 -314 500 -640 392 -640 480 -474 640 -480 640 -640 574 -640 425 -640 427 -640 457 -640 425 -640 428 -640 480 -640 480 -640 479 -640 427 -500 375 -640 539 -480 640 -640 480 -480 640 -428 640 -480 640 -640 480 -640 480 -640 480 -640 480 -480 640 -480 640 -500 375 -640 480 -640 480 -640 429 -640 424 -500 375 -383 640 -640 480 -500 335 -640 480 -500 375 -384 640 -612 612 -640 480 -640 480 -640 480 -640 480 -419 640 -640 512 -400 300 -639 640 -640 427 -640 480 -424 640 -427 640 -640 480 -480 640 -426 640 -640 427 -640 427 -640 623 -640 521 -375 500 -640 426 -640 426 -640 427 -640 426 -500 306 -500 423 -640 428 -640 431 -640 427 -640 427 -640 634 -640 480 -640 378 -500 375 -640 427 -640 427 -500 370 -427 640 -640 427 -640 429 -640 427 -640 480 -640 424 -640 426 -640 480 -640 480 -426 640 -640 428 -640 480 -640 415 -640 427 -640 427 -640 480 -480 640 -640 427 -640 478 -480 640 -640 427 -500 333 -640 427 -640 486 -428 640 -640 424 -640 426 -640 480 -640 426 -640 480 -640 480 -419 500 -640 360 -427 640 -640 427 -640 422 -640 480 -640 480 -500 334 -425 640 -512 640 -640 427 -640 480 -480 640 -426 640 -640 480 -640 480 -500 375 -393 640 -640 425 -640 583 -640 500 -640 480 -535 640 -640 480 -640 480 -512 640 -426 640 -640 426 -375 500 -480 640 -640 480 -427 640 -640 427 -431 640 -640 427 -640 427 -375 500 -640 427 -640 429 -640 457 -640 383 -640 428 -640 521 -640 480 -640 427 -428 640 -640 427 -480 640 -640 424 -640 480 -640 640 -640 361 -640 427 -640 480 -500 377 -640 360 -640 428 -640 512 -640 424 -480 640 -640 480 -640 426 -640 427 -640 465 -640 480 -424 640 -640 427 -640 360 -640 611 -453 640 -427 640 -640 426 -375 500 -640 480 -640 426 -480 640 -612 612 -640 429 -375 500 -640 359 -640 640 -427 640 -500 333 -480 640 -612 612 -375 500 -274 500 -640 478 -640 428 -337 500 -640 454 -426 640 -320 240 -480 640 -486 466 -640 480 -575 432 -640 480 -640 574 -500 375 -469 640 -500 332 -333 500 -426 640 -640 480 -640 426 -640 427 -640 360 -640 427 -640 480 -500 375 -640 427 -500 358 -640 457 -428 640 -529 640 -512 640 -500 333 -640 383 -640 480 -640 457 -512 640 -640 427 -640 480 -640 423 -640 480 -640 427 -518 640 -480 640 -333 500 -640 428 -640 480 -640 426 -640 360 -480 640 -640 640 -500 375 -640 481 -480 640 -640 480 -640 427 -640 480 -640 413 -640 480 -428 640 -640 480 -640 428 -480 640 -494 640 -640 360 -640 480 -480 640 -424 640 -614 640 -500 300 -640 480 -640 599 -640 480 -640 427 -640 426 -640 463 -427 640 -640 480 -640 426 -640 427 -462 640 -640 480 -640 478 -640 426 -500 246 -427 640 -640 428 -640 360 -412 500 -640 425 -500 375 -500 375 -640 426 -640 480 -640 443 -640 480 -640 427 -640 427 -640 429 -640 361 -640 427 -426 640 -640 480 -636 640 -500 375 -640 427 -640 425 -640 435 -640 428 -640 428 -640 427 -480 640 -640 427 -640 480 -640 427 -640 501 -640 517 -640 480 -626 640 -640 359 -640 425 -640 429 -640 480 -640 423 -640 480 -640 424 -477 640 -640 427 -640 427 -640 480 -640 480 -640 425 -640 427 -500 373 -500 375 -640 480 -640 428 -640 633 -640 480 -640 427 -640 457 -640 480 -640 543 -640 480 -640 496 -640 287 -640 480 -480 640 -640 480 -640 480 -640 639 -640 446 -640 480 -500 375 -640 480 -640 480 -640 480 -500 375 -640 480 -640 427 -640 425 -640 428 -640 426 -640 480 -640 431 -640 427 -640 480 -640 440 -640 480 -640 480 -480 640 -640 480 -427 640 -640 489 -425 640 -640 427 -640 480 -640 480 -640 455 -640 359 -500 375 -480 640 -640 419 -480 640 -427 640 -640 480 -640 425 -640 425 -640 480 -336 500 -640 329 -640 480 -640 427 -640 480 -478 640 -612 612 -480 640 -501 640 -640 426 -427 640 -500 375 -640 427 -500 358 -425 640 -640 480 -640 480 -500 375 -640 412 -640 430 -567 640 -375 500 -476 640 -640 426 -612 612 -500 400 -426 640 -479 640 -480 640 -640 480 -480 640 -500 298 -640 480 -640 478 -640 480 -640 576 -426 640 -478 640 -640 640 -500 375 -640 483 -640 640 -424 640 -480 640 -480 640 -640 425 -640 427 -640 480 -640 480 -442 640 -500 375 -640 427 -640 480 -640 480 -640 480 -427 640 -640 426 -400 312 -640 480 -500 375 -480 640 -640 478 -640 426 -480 640 -640 480 -640 480 -640 480 -500 375 -426 640 -612 612 -640 478 -640 640 -335 500 -640 427 -640 426 -426 640 -640 427 -333 500 -640 449 -375 500 -640 480 -640 480 -427 640 -640 428 -640 480 -640 480 -640 480 -612 612 -359 640 -640 478 -640 427 -640 425 -640 426 -428 640 -640 388 -640 480 -480 640 -480 640 -640 427 -640 427 -640 480 -480 640 -640 427 -427 640 -640 311 -640 475 -500 333 -427 640 -640 429 -480 640 -426 640 -640 454 -640 480 -640 426 -571 640 -640 480 -427 640 -640 640 -640 480 -428 640 -640 448 -480 640 -640 428 -640 480 -640 480 -640 427 -480 640 -480 640 -500 375 -640 427 -640 480 -640 464 -500 485 -640 424 -640 480 -640 491 -480 640 -500 404 -640 640 -480 640 -640 427 -640 427 -480 640 -640 480 -640 480 -560 560 -480 640 -640 360 -640 457 -640 480 -612 612 -640 640 -612 612 -640 109 -500 245 -640 427 -640 425 -640 424 -640 480 -612 612 -640 400 -640 427 -500 333 -640 427 -640 424 -426 640 -640 397 -479 640 -640 425 -640 480 -428 640 -640 491 -427 640 -640 480 -492 500 -640 480 -606 640 -640 480 -640 482 -640 427 -333 500 -640 425 -640 424 -375 500 -640 427 -640 360 -640 480 -640 432 -640 457 -640 480 -640 480 -640 547 -640 455 -640 427 -640 479 -640 423 -612 612 -640 427 -500 375 -640 480 -640 427 -640 426 -500 500 -640 428 -640 427 -640 426 -640 425 -480 640 -640 426 -640 427 -640 427 -640 461 -428 640 -640 425 -640 427 -640 429 -640 480 -640 427 -500 281 -407 640 -383 640 -418 640 -500 332 -337 500 -640 547 -500 395 -640 480 -640 361 -612 612 -640 554 -640 427 -466 640 -612 612 -500 369 -640 427 -640 480 -640 480 -640 427 -500 375 -640 480 -640 426 -640 480 -500 375 -640 478 -640 480 -480 640 -579 640 -125 166 -640 426 -640 428 -556 640 -480 640 -634 640 -640 429 -640 480 -640 480 -640 424 -503 640 -480 640 -640 427 -640 360 -640 427 -640 480 -640 480 -640 480 -500 375 -640 427 -600 400 -640 409 -640 427 -640 512 -640 480 -375 500 -640 427 -640 480 -640 427 -640 426 -640 427 -409 640 -640 640 -640 428 -640 480 -640 480 -640 427 -500 333 -480 640 -427 640 -640 640 -425 640 -403 640 -640 427 -612 612 -360 270 -640 427 -640 480 -640 429 -640 427 -425 640 -640 425 -640 480 -576 640 -640 427 -480 360 -458 500 -640 478 -480 640 -640 479 -640 427 -640 480 -640 425 -640 504 -500 295 -375 500 -640 427 -640 399 -500 375 -640 425 -354 500 -640 427 -640 429 -640 479 -640 484 -480 640 -640 427 -500 375 -481 640 -640 407 -480 640 -432 640 -640 480 -500 375 -640 480 -640 514 -640 480 -640 428 -375 500 -640 480 -640 427 -640 480 -640 426 -640 480 -503 640 -640 427 -640 381 -640 480 -375 500 -500 348 -600 600 -640 427 -500 375 -640 426 -500 375 -640 427 -426 640 -640 480 -640 427 -640 428 -640 440 -640 360 -427 640 -640 426 -375 500 -480 640 -427 640 -640 427 -640 353 -500 355 -331 500 -640 480 -427 640 -640 426 -640 444 -492 640 -640 480 -640 421 -640 480 -480 640 -640 480 -640 428 -640 427 -500 333 -640 480 -640 426 -480 640 -480 640 -640 491 -328 500 -640 638 -640 480 -640 474 -640 426 -640 427 -434 640 -427 640 -375 500 -640 480 -640 427 -457 640 -640 426 -375 500 -640 426 -427 640 -640 426 -640 480 -640 426 -640 426 -640 428 -640 480 -640 427 -640 436 -640 426 -480 640 -640 480 -640 480 -640 427 -500 332 -640 401 -500 375 -640 427 -640 428 -517 640 -500 333 -640 480 -640 425 -500 375 -480 640 -640 480 -425 640 -640 426 -640 424 -640 640 -310 640 -640 425 -640 518 -500 375 -612 612 -640 480 -480 640 -640 424 -640 427 -640 480 -428 640 -500 375 -640 427 -640 480 -640 425 -480 640 -480 640 -640 427 -640 427 -640 428 -480 640 -640 480 -640 480 -309 500 -640 480 -640 457 -640 480 -640 480 -640 480 -640 424 -640 480 -640 633 -425 640 -612 612 -640 427 -500 375 -480 640 -640 504 -640 455 -640 480 -324 500 -640 480 -640 426 -640 427 -500 332 -640 408 -640 480 -640 480 -640 427 -640 427 -500 375 -640 480 -640 428 -640 426 -612 612 -640 414 -640 518 -640 359 -640 424 -480 640 -640 480 -500 334 -640 463 -640 412 -500 332 -640 426 -640 427 -640 480 -640 480 -426 640 -500 400 -480 640 -500 375 -448 299 -426 640 -427 640 -500 418 -640 480 -640 427 -640 426 -640 480 -334 500 -640 427 -640 478 -500 333 -500 375 -640 427 -640 435 -640 480 -500 332 -500 379 -640 425 -640 480 -640 480 -640 484 -512 640 -640 480 -480 640 -375 500 -640 426 -640 379 -640 484 -640 426 -640 427 -640 426 -480 640 -333 500 -640 461 -426 640 -640 480 -640 425 -427 640 -500 441 -427 640 -333 500 -640 223 -612 612 -640 480 -500 332 -640 480 -427 640 -640 480 -640 426 -480 640 -612 612 -480 640 -640 428 -640 480 -640 425 -640 480 -640 427 -640 480 -640 426 -640 480 -640 427 -640 496 -640 480 -640 471 -500 375 -640 480 -640 427 -640 480 -427 640 -640 427 -640 427 -640 427 -549 640 -640 640 -640 480 -640 329 -640 480 -640 427 -640 471 -640 480 -640 425 -500 375 -640 483 -375 500 -640 480 -640 427 -640 480 -640 425 -480 640 -640 426 -640 360 -480 640 -640 427 -427 640 -640 383 -640 427 -428 640 -640 427 -600 400 -640 506 -640 640 -640 477 -640 384 -500 333 -640 480 -419 640 -640 480 -640 480 -640 361 -612 612 -480 640 -640 425 -640 359 -634 640 -640 427 -640 427 -500 326 -427 640 -640 426 -375 500 -640 480 -640 480 -640 640 -480 640 -640 480 -640 633 -640 480 -480 640 -640 480 -640 480 -640 480 -640 360 -500 375 -480 640 -640 480 -640 640 -625 640 -640 481 -640 425 -640 425 -565 640 -480 640 -640 427 -426 640 -461 640 -640 480 -640 480 -448 500 -426 640 -375 500 -427 640 -500 375 -640 483 -640 359 -640 475 -640 480 -640 279 -640 480 -480 640 -640 424 -333 500 -612 612 -500 375 -500 358 -640 428 -640 480 -640 480 -640 425 -640 480 -467 640 -640 480 -640 457 -480 640 -640 611 -500 281 -612 612 -640 427 -640 421 -640 480 -480 640 -426 640 -640 640 -640 480 -640 431 -640 480 -640 426 -640 480 -500 500 -640 426 -500 376 -640 360 -410 270 -640 427 -426 640 -470 640 -640 480 -640 444 -332 500 -640 480 -507 640 -480 640 -640 424 -640 480 -427 640 -640 480 -640 480 -500 335 -640 480 -640 427 -640 508 -640 433 -640 466 -499 500 -640 640 -480 640 -640 264 -537 640 -640 480 -640 425 -482 640 -640 533 -640 394 -480 640 -640 359 -640 427 -500 332 -480 640 -640 426 -640 558 -640 425 -640 427 -640 427 -427 640 -427 640 -500 376 -640 428 -640 640 -640 480 -425 640 -640 424 -640 394 -375 500 -640 426 -640 425 -640 480 -640 427 -500 375 -640 318 -640 480 -640 427 -640 427 -640 427 -640 640 -640 424 -640 457 -500 332 -640 480 -640 457 -640 480 -640 432 -640 480 -640 480 -640 480 -612 612 -500 333 -640 480 -640 461 -428 640 -476 500 -640 480 -500 350 -427 640 -640 427 -640 480 -426 640 -480 640 -427 640 -640 480 -640 480 -640 427 -640 480 -640 392 -640 512 -426 640 -500 376 -640 425 -640 426 -640 480 -640 427 -640 480 -640 360 -640 481 -640 460 -640 427 -640 428 -640 427 -640 427 -640 480 -640 480 -640 427 -500 414 -400 300 -478 640 -640 521 -640 426 -640 425 -640 443 -640 427 -448 640 -500 375 -480 640 -640 427 -500 332 -424 640 -480 640 -640 406 -640 426 -359 640 -500 333 -480 640 -640 480 -640 483 -640 426 -640 426 -640 426 -640 424 -640 541 -640 426 -640 480 -500 375 -500 375 -427 640 -640 420 -640 480 -640 427 -612 612 -427 640 -332 500 -640 427 -640 480 -640 516 -640 480 -483 640 -426 640 -640 427 -640 428 -511 640 -640 480 -640 480 -425 640 -640 426 -640 427 -500 375 -500 376 -640 480 -480 640 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -426 640 -640 480 -640 425 -612 612 -640 427 -640 427 -640 427 -640 480 -480 640 -426 640 -427 640 -640 427 -500 375 -640 360 -480 640 -640 428 -493 640 -640 480 -478 640 -640 425 -500 375 -640 426 -375 500 -640 480 -501 640 -640 427 -640 361 -640 640 -640 544 -640 425 -640 428 -500 375 -640 425 -427 640 -333 500 -640 428 -640 427 -640 480 -500 332 -640 478 -640 480 -464 640 -500 375 -640 427 -640 427 -480 640 -640 161 -640 480 -640 640 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -612 612 -500 375 -640 427 -640 458 -640 425 -640 409 -640 509 -640 460 -640 427 -640 412 -418 500 -640 221 -640 480 -640 427 -428 640 -640 427 -640 549 -500 375 -640 291 -640 426 -480 640 -640 428 -640 425 -640 428 -640 427 -500 375 -640 425 -640 480 -640 480 -480 640 -640 346 -375 500 -423 640 -640 480 -596 640 -640 427 -640 427 -593 640 -640 493 -640 479 -640 480 -640 479 -500 375 -640 426 -300 400 -640 480 -500 375 -640 424 -480 640 -640 429 -456 640 -375 500 -640 426 -504 640 -640 480 -640 456 -640 492 -500 375 -640 471 -480 640 -480 640 -640 359 -640 480 -640 427 -426 640 -375 500 -640 480 -500 382 -640 480 -427 640 -640 480 -427 640 -640 480 -640 429 -640 480 -640 480 -640 424 -640 480 -640 480 -640 428 -500 334 -640 480 -640 480 -480 640 -640 507 -640 478 -640 460 -640 426 -640 403 -480 640 -640 427 -640 427 -427 640 -640 427 -640 416 -427 640 -300 225 -640 423 -332 500 -640 458 -500 357 -640 480 -612 612 -640 383 -640 350 -640 480 -309 640 -640 480 -640 426 -640 511 -459 640 -549 640 -640 428 -640 480 -640 480 -426 640 -640 384 -640 425 -640 444 -640 426 -640 480 -640 480 -480 640 -640 480 -640 480 -640 427 -640 427 -640 416 -640 479 -500 375 -640 480 -640 480 -640 480 -640 360 -640 402 -481 640 -640 480 -334 500 -640 480 -640 480 -640 480 -640 427 -640 360 -640 427 -480 640 -612 612 -640 427 -640 428 -640 427 -550 640 -612 612 -640 427 -375 500 -500 333 -500 375 -480 640 -640 427 -640 428 -640 480 -427 640 -640 426 -640 480 -478 640 -480 640 -640 480 -640 480 -640 428 -640 480 -640 480 -640 512 -640 480 -500 375 -640 427 -640 428 -480 640 -640 428 -576 384 -640 480 -640 480 -640 480 -423 640 -640 380 -640 436 -334 500 -427 640 -640 427 -640 480 -426 640 -480 640 -640 453 -375 500 -640 426 -408 640 -640 428 -640 424 -427 640 -640 484 -598 415 -640 425 -640 427 -640 480 -640 430 -640 427 -640 480 -640 480 -500 375 -640 428 -640 427 -426 640 -640 438 -450 640 -640 389 -482 640 -480 640 -640 442 -640 448 -500 334 -640 640 -640 421 -500 333 -628 640 -500 392 -640 480 -500 375 -500 333 -426 640 -640 425 -640 427 -640 427 -640 427 -500 375 -628 640 -640 480 -333 500 -640 480 -500 313 -640 427 -640 480 -640 426 -640 480 -640 424 -640 393 -640 426 -640 480 -640 427 -612 612 -500 375 -500 333 -500 375 -480 640 -640 427 -427 640 -480 640 -640 427 -500 250 -640 426 -640 480 -640 480 -640 427 -440 640 -426 640 -480 640 -640 480 -425 283 -640 401 -640 480 -640 427 -640 423 -425 640 -493 640 -640 430 -640 427 -640 406 -375 500 -640 504 -612 612 -500 375 -640 480 -640 458 -640 365 -640 428 -375 500 -640 480 -500 375 -640 480 -428 640 -640 408 -640 480 -500 375 -640 480 -606 400 -640 425 -428 640 -480 640 -640 480 -427 640 -640 426 -640 424 -375 500 -640 425 -640 486 -640 427 -500 430 -640 640 -640 640 -640 480 -640 543 -640 480 -640 480 -640 427 -640 427 -640 640 -640 427 -640 426 -640 541 -640 461 -640 427 -640 480 -640 427 -640 612 -612 612 -640 536 -427 640 -640 427 -640 459 -427 640 -640 418 -500 375 -358 640 -333 500 -427 640 -640 427 -640 427 -410 423 -427 640 -640 425 -640 360 -640 479 -640 480 -640 425 -640 427 -640 426 -640 427 -554 640 -640 414 -640 480 -640 480 -431 640 -640 480 -480 640 -640 446 -427 640 -640 373 -612 612 -640 480 -640 360 -409 640 -427 640 -640 480 -640 480 -426 640 -640 480 -640 412 -640 380 -640 426 -332 500 -640 426 -425 640 -500 375 -640 480 -500 333 -640 358 -640 427 -640 427 -427 640 -480 640 -612 612 -500 281 -640 427 -640 365 -500 375 -640 480 -640 480 -426 640 -471 640 -640 426 -640 480 -480 640 -500 375 -480 640 -480 640 -640 427 -640 427 -480 640 -640 426 -640 427 -640 480 -640 480 -640 428 -640 480 -640 480 -425 640 -640 494 -640 427 -640 480 -640 480 -640 480 -640 427 -640 426 -640 480 -640 426 -426 640 -640 480 -640 360 -480 640 -640 440 -640 480 -640 425 -500 375 -640 427 -457 640 -640 478 -640 427 -640 427 -640 427 -640 480 -553 640 -426 640 -640 433 -425 640 -640 472 -427 640 -427 640 -640 424 -640 427 -500 400 -640 456 -640 427 -500 332 -640 640 -428 640 -426 640 -480 640 -612 612 -640 427 -640 427 -606 640 -640 575 -640 426 -640 480 -640 480 -640 426 -640 480 -640 426 -640 480 -640 423 -640 480 -640 427 -640 480 -640 480 -352 500 -640 480 -640 360 -640 479 -640 413 -290 438 -427 640 -640 480 -375 500 -425 640 -640 480 -640 514 -640 360 -640 426 -480 640 -640 640 -640 370 -640 480 -500 434 -500 375 -427 640 -480 640 -640 427 -640 549 -640 426 -640 426 -640 427 -640 455 -640 424 -500 375 -427 640 -640 480 -640 425 -600 600 -426 640 -640 519 -640 480 -640 427 -640 480 -334 500 -640 355 -640 427 -500 334 -429 640 -640 480 -640 480 -500 375 -640 426 -331 500 -640 449 -500 375 -640 426 -640 424 -640 480 -640 427 -640 480 -640 460 -640 629 -428 640 -640 480 -640 448 -480 640 -500 332 -640 425 -428 640 -461 640 -640 480 -500 375 -640 423 -640 368 -332 500 -480 640 -640 432 -640 640 -640 427 -612 612 -333 500 -640 480 -640 480 -385 500 -500 281 -512 640 -640 526 -640 429 -480 640 -500 375 -640 426 -480 640 -480 640 -607 640 -640 479 -427 640 -640 431 -640 480 -640 480 -640 425 -640 480 -640 426 -640 480 -640 426 -640 480 -640 640 -640 426 -480 640 -427 640 -640 480 -640 427 -640 480 -640 480 -640 424 -640 480 -640 424 -640 480 -640 427 -640 364 -640 480 -640 427 -640 456 -640 427 -281 500 -480 640 -320 212 -480 640 -640 429 -640 428 -640 364 -640 418 -640 427 -640 478 -640 439 -640 426 -640 426 -640 427 -640 480 -500 446 -640 480 -640 480 -640 427 -478 640 -640 426 -640 386 -640 433 -375 500 -640 480 -500 333 -640 424 -480 640 -500 375 -640 480 -429 640 -500 375 -500 358 -640 480 -640 458 -480 640 -640 444 -640 481 -640 480 -487 500 -640 480 -480 640 -355 500 -640 360 -425 640 -333 500 -640 480 -375 500 -640 427 -640 426 -640 563 -500 371 -640 454 -640 425 -640 426 -640 427 -640 480 -500 334 -428 640 -640 481 -640 480 -640 480 -500 396 -640 440 -426 640 -438 640 -427 640 -456 640 -640 427 -640 480 -640 480 -640 427 -640 448 -500 332 -640 424 -640 480 -533 640 -375 500 -640 480 -640 439 -428 640 -612 612 -500 375 -640 480 -640 480 -480 640 -500 398 -640 437 -640 481 -640 480 -640 480 -640 480 -640 427 -458 640 -458 640 -640 427 -640 386 -500 375 -640 480 -480 640 -640 427 -640 480 -640 500 -640 437 -640 463 -427 640 -640 640 -612 612 -640 427 -612 612 -612 612 -640 428 -640 425 -640 463 -355 500 -640 480 -500 279 -640 424 -500 375 -640 425 -500 320 -640 410 -640 480 -640 427 -640 427 -640 480 -292 500 -640 427 -640 426 -480 640 -500 375 -500 333 -640 480 -640 427 -640 427 -500 375 -640 427 -500 307 -640 360 -640 428 -640 480 -640 359 -640 423 -640 424 -640 480 -640 480 -640 424 -640 427 -640 449 -640 383 -640 640 -640 426 -640 517 -426 640 -500 333 -426 640 -640 478 -640 426 -640 478 -443 640 -640 425 -426 640 -427 640 -480 640 -375 500 -640 480 -640 427 -375 500 -640 165 -480 640 -640 427 -640 480 -640 427 -640 480 -640 379 -640 425 -640 480 -640 389 -640 427 -640 427 -396 640 -375 500 -441 640 -640 480 -640 480 -640 480 -640 478 -289 500 -640 480 -640 435 -640 426 -640 480 -640 288 -500 333 -600 451 -640 480 -480 640 -640 480 -500 375 -640 640 -640 480 -640 427 -425 640 -640 427 -640 427 -600 252 -640 424 -640 640 -640 426 -640 427 -640 426 -500 440 -424 640 -480 640 -640 480 -424 640 -640 480 -640 427 -640 480 -640 427 -640 480 -436 640 -640 427 -512 640 -640 181 -640 426 -427 640 -500 375 -612 612 -640 512 -640 496 -640 427 -640 388 -640 480 -427 640 -500 375 -640 428 -640 481 -640 632 -640 480 -640 480 -640 512 -481 640 -640 480 -640 425 -427 640 -640 428 -480 320 -333 500 -640 427 -640 480 -640 428 -425 640 -480 640 -640 408 -640 480 -640 427 -337 640 -500 375 -500 333 -500 375 -640 480 -640 413 -640 424 -640 480 -640 426 -640 588 -480 640 -500 333 -427 640 -640 425 -500 375 -500 281 -480 245 -373 299 -640 480 -427 640 -640 427 -640 431 -640 425 -500 375 -603 640 -479 640 -612 612 -640 427 -640 488 -640 480 -640 333 -640 428 -457 640 -640 480 -640 427 -640 480 -500 375 -427 640 -500 375 -469 640 -640 429 -480 640 -640 425 -427 640 -640 424 -640 482 -640 427 -640 423 -640 480 -426 640 -335 500 -640 559 -640 428 -479 640 -640 480 -640 426 -640 480 -640 480 -640 426 -640 468 -480 640 -375 500 -640 480 -640 480 -480 640 -640 427 -640 427 -375 500 -640 326 -640 480 -480 640 -640 480 -521 640 -640 480 -640 426 -640 480 -640 476 -612 612 -500 375 -428 640 -640 480 -640 424 -480 640 -640 427 -640 428 -640 425 -640 427 -500 375 -640 424 -640 481 -640 480 -640 427 -640 423 -640 425 -534 640 -640 480 -393 640 -640 425 -640 480 -640 480 -480 640 -640 419 -640 458 -640 483 -640 426 -500 375 -640 361 -640 480 -640 430 -640 426 -640 426 -640 480 -500 375 -640 480 -640 480 -427 640 -500 333 -427 640 -640 476 -640 426 -640 480 -640 429 -640 426 -640 433 -479 640 -640 427 -400 640 -427 640 -640 480 -640 428 -640 427 -480 640 -500 375 -640 421 -640 427 -500 315 -500 333 -640 427 -500 375 -480 640 -640 426 -612 612 -640 425 -333 500 -500 336 -640 424 -612 612 -640 426 -640 480 -427 640 -640 360 -640 427 -640 427 -427 640 -640 275 -419 640 -640 480 -500 375 -640 428 -500 333 -480 640 -640 480 -427 640 -640 480 -369 640 -640 414 -640 480 -640 427 -375 500 -454 640 -560 640 -640 427 -640 480 -640 425 -640 457 -640 479 -480 640 -424 640 -640 425 -640 428 -640 480 -480 640 -640 426 -640 480 -640 427 -427 640 -640 427 -459 640 -640 480 -640 425 -375 500 -640 466 -640 480 -500 347 -640 426 -640 448 -458 640 -375 500 -436 640 -640 360 -391 640 -460 500 -640 427 -500 375 -640 480 -500 375 -500 332 -317 500 -639 640 -512 640 -640 427 -428 640 -473 640 -480 640 -427 640 -640 427 -640 480 -640 478 -426 640 -480 640 -640 434 -640 479 -640 480 -640 480 -500 341 -640 480 -640 480 -500 375 -640 427 -640 425 -395 640 -640 480 -640 375 -640 480 -640 428 -640 560 -640 640 -640 480 -500 333 -640 395 -640 448 -510 640 -640 424 -500 334 -640 515 -480 640 -640 480 -500 375 -405 640 -640 416 -640 513 -640 466 -471 640 -640 398 -640 480 -450 338 -640 433 -640 427 -640 480 -640 428 -640 486 -640 478 -640 427 -640 438 -427 640 -640 427 -640 480 -500 470 -480 640 -428 640 -400 640 -640 375 -500 375 -333 500 -640 424 -640 427 -640 427 -640 480 -500 375 -640 400 -640 443 -500 376 -640 527 -640 480 -480 640 -500 333 -640 480 -640 426 -640 358 -480 640 -640 436 -640 480 -500 333 -610 427 -640 480 -425 640 -375 500 -640 427 -640 640 -640 511 -640 426 -612 612 -640 478 -640 480 -640 422 -640 428 -640 480 -448 336 -500 375 -640 480 -640 473 -640 478 -640 427 -427 640 -500 375 -640 480 -640 426 -375 500 -640 480 -424 640 -480 640 -640 425 -640 480 -640 480 -640 426 -640 427 -500 375 -640 384 -640 480 -640 522 -640 428 -640 360 -640 549 -640 427 -640 427 -480 640 -640 421 -500 331 -640 480 -500 315 -640 480 -640 427 -480 640 -640 493 -640 480 -640 359 -480 640 -640 427 -427 640 -640 361 -640 480 -640 480 -500 327 -640 427 -640 453 -426 640 -480 640 -640 427 -370 500 -640 536 -500 403 -640 480 -150 200 -640 640 -448 600 -481 640 -640 427 -480 640 -427 640 -640 320 -500 301 -640 427 -480 640 -612 612 -640 480 -640 428 -640 427 -640 458 -375 500 -640 427 -640 480 -500 333 -640 429 -480 640 -640 478 -640 480 -640 480 -640 480 -640 480 -480 640 -500 375 -640 427 -640 427 -640 426 -640 425 -640 427 -640 640 -500 375 -612 612 -500 375 -480 640 -640 428 -425 251 -640 206 -640 424 -480 640 -640 473 -420 169 -640 480 -640 427 -640 480 -640 429 -640 452 -481 640 -427 640 -621 640 -425 640 -427 640 -640 399 -640 467 -640 456 -640 428 -427 640 -640 480 -640 427 -500 375 -640 425 -640 330 -640 640 -640 427 -640 480 -640 442 -640 480 -386 500 -640 426 -612 612 -640 511 -640 428 -640 426 -500 375 -640 383 -640 427 -427 640 -464 500 -640 427 -640 512 -633 640 -640 218 -500 375 -640 427 -640 480 -500 375 -640 606 -640 480 -640 457 -640 429 -640 481 -500 397 -640 480 -640 423 -480 640 -640 480 -640 426 -640 427 -428 640 -480 640 -500 339 -500 375 -480 640 -640 426 -640 480 -640 466 -427 640 -500 269 -640 429 -640 427 -426 640 -429 640 -640 480 -640 424 -640 427 -640 432 -640 480 -640 426 -640 481 -480 640 -640 426 -640 480 -640 480 -500 333 -426 640 -500 333 -640 480 -375 500 -480 640 -640 427 -427 640 -640 427 -640 480 -640 512 -640 484 -612 612 -640 480 -407 640 -640 554 -640 427 -640 429 -640 480 -640 425 -612 612 -640 425 -640 478 -603 640 -480 640 -640 418 -500 375 -640 385 -480 640 -640 480 -500 375 -640 478 -640 480 -428 640 -480 640 -336 500 -480 640 -640 428 -500 375 -640 629 -640 459 -640 425 -480 640 -640 480 -640 461 -640 480 -640 480 -640 480 -640 480 -500 375 -500 375 -408 500 -480 640 -640 528 -640 480 -640 428 -480 640 -640 617 -425 640 -500 376 -500 424 -500 333 -333 500 -640 426 -640 449 -640 427 -640 427 -640 480 -640 481 -640 480 -640 480 -640 480 -640 480 -640 480 -500 333 -640 359 -480 640 -447 640 -451 640 -640 640 -640 376 -479 640 -640 427 -640 427 -500 333 -640 426 -500 375 -640 480 -334 500 -427 640 -640 427 -640 480 -640 420 -612 612 -640 426 -640 480 -640 609 -612 612 -640 480 -640 466 -403 640 -500 336 -640 425 -360 265 -640 480 -640 480 -640 480 -640 476 -640 480 -500 375 -640 480 -640 480 -640 425 -480 640 -640 480 -640 478 -640 480 -640 480 -640 480 -427 640 -500 375 -640 480 -640 426 -640 424 -640 427 -640 472 -640 480 -281 500 -500 333 -640 429 -640 480 -640 434 -500 375 -640 427 -640 640 -640 364 -640 480 -500 500 -640 439 -500 371 -640 640 -424 640 -500 395 -640 480 -427 640 -640 357 -640 480 -640 424 -640 480 -359 640 -640 512 -640 426 -640 480 -640 573 -640 480 -640 427 -426 640 -640 360 -640 426 -640 480 -640 480 -640 425 -640 428 -612 612 -612 612 -640 400 -480 640 -640 480 -427 640 -640 480 -640 627 -640 516 -640 427 -640 427 -640 480 -640 424 -640 427 -500 333 -640 480 -500 375 -500 333 -612 612 -640 480 -480 640 -500 375 -640 480 -640 427 -640 419 -500 375 -640 425 -640 480 -480 640 -640 428 -640 464 -612 612 -640 480 -640 427 -640 480 -489 640 -640 480 -640 459 -427 640 -640 376 -640 427 -640 480 -640 512 -640 427 -640 392 -342 500 -640 480 -640 480 -640 426 -640 480 -640 425 -640 478 -640 480 -640 351 -333 500 -640 427 -640 480 -604 640 -640 480 -512 640 -640 481 -640 480 -500 485 -457 640 -640 480 -640 427 -640 427 -640 427 -640 480 -640 426 -480 640 -480 640 -640 480 -640 480 -480 640 -480 320 -640 334 -500 375 -640 427 -640 480 -423 640 -640 453 -480 640 -586 640 -640 480 -500 329 -640 480 -375 500 -640 476 -500 311 -640 458 -427 640 -452 640 -500 373 -640 640 -333 500 -612 612 -640 480 -640 428 -640 427 -500 333 -640 426 -426 640 -640 425 -426 640 -640 427 -421 640 -640 640 -500 336 -640 480 -335 500 -640 480 -333 500 -640 428 -406 640 -640 462 -640 480 -640 480 -640 428 -640 427 -640 427 -640 480 -321 640 -612 612 -612 612 -500 375 -480 640 -640 480 -640 425 -612 612 -480 640 -640 427 -390 640 -426 640 -640 427 -640 480 -500 375 -640 480 -640 402 -500 375 -480 640 -640 480 -640 427 -640 480 -640 429 -640 427 -640 425 -640 480 -640 428 -371 640 -640 486 -640 480 -640 480 -427 640 -640 428 -480 640 -500 375 -640 480 -640 420 -480 640 -640 427 -640 428 -500 375 -612 612 -640 480 -439 640 -640 474 -640 428 -435 580 -640 640 -480 640 -333 500 -640 480 -427 640 -333 500 -640 480 -640 426 -480 640 -640 306 -640 427 -640 359 -480 640 -424 640 -480 640 -640 427 -640 427 -640 427 -640 480 -640 480 -424 640 -640 480 -640 492 -640 425 -500 375 -486 640 -640 501 -427 640 -500 375 -427 640 -640 427 -446 500 -455 640 -640 426 -640 480 -361 640 -500 334 -427 640 -640 461 -640 427 -640 480 -640 427 -640 480 -500 500 -640 323 -640 428 -640 480 -640 480 -640 340 -640 428 -640 488 -447 500 -500 355 -480 640 -480 360 -480 640 -359 640 -480 640 -640 422 -640 480 -640 433 -640 496 -640 480 -640 425 -425 640 -640 394 -640 427 -640 480 -640 426 -640 480 -640 427 -640 428 -500 400 -480 640 -640 401 -353 500 -640 426 -338 500 -640 427 -480 640 -480 640 -640 426 -428 640 -480 640 -500 333 -640 484 -357 500 -640 480 -640 480 -640 480 -640 426 -375 500 -334 500 -640 480 -427 640 -640 427 -640 360 -640 480 -640 480 -640 480 -640 427 -426 640 -640 512 -640 428 -640 432 -640 426 -640 426 -640 480 -640 427 -426 640 -425 392 -640 476 -640 480 -640 427 -500 375 -375 500 -500 375 -640 426 -500 382 -640 480 -640 640 -480 640 -640 480 -603 640 -640 425 -320 240 -480 640 -480 640 -375 500 -640 471 -427 640 -500 335 -640 480 -640 480 -640 640 -427 640 -640 426 -640 427 -426 640 -640 481 -640 401 -500 375 -482 640 -640 480 -352 288 -640 512 -500 485 -640 498 -640 422 -640 480 -427 640 -427 640 -426 640 -374 500 -500 332 -640 493 -375 500 -640 480 -429 640 -640 470 -640 480 -640 623 -640 361 -500 383 -640 480 -640 425 -640 427 -640 426 -640 359 -424 640 -640 480 -640 480 -640 427 -640 423 -480 640 -640 427 -640 428 -640 427 -438 640 -640 426 -640 480 -640 480 -640 427 -640 427 -500 333 -640 480 -640 480 -640 480 -640 427 -480 640 -640 428 -640 427 -640 427 -640 427 -640 427 -640 427 -640 426 -640 427 -640 425 -640 480 -640 480 -640 427 -640 426 -424 640 -500 375 -640 427 -640 375 -566 640 -640 480 -640 425 -427 640 -640 480 -612 612 -640 480 -640 480 -640 480 -640 427 -424 640 -640 480 -640 480 -640 480 -640 480 -612 612 -427 640 -640 480 -640 640 -480 640 -640 480 -640 480 -640 415 -612 612 -640 425 -640 439 -640 480 -640 512 -640 428 -640 480 -640 427 -640 542 -640 480 -640 461 -640 480 -427 640 -640 480 -426 640 -478 640 -500 375 -332 500 -640 480 -640 427 -640 480 -640 426 -640 575 -640 480 -640 387 -640 426 -640 480 -612 612 -640 428 -351 500 -640 427 -480 640 -640 424 -640 360 -480 640 -480 640 -640 417 -500 380 -640 480 -480 640 -480 640 -640 427 -612 612 -640 480 -500 333 -640 465 -640 426 -640 426 -310 500 -640 480 -640 431 -480 640 -640 480 -500 375 -640 480 -338 409 -640 416 -640 414 -640 427 -640 426 -640 424 -369 640 -640 640 -640 427 -640 427 -640 480 -640 480 -640 427 -640 496 -612 612 -427 640 -427 640 -427 640 -640 394 -640 404 -640 424 -480 640 -640 427 -427 640 -610 406 -640 427 -301 290 -640 427 -640 462 -640 428 -480 640 -640 480 -612 612 -640 480 -640 480 -612 612 -640 480 -500 375 -333 500 -640 427 -640 458 -640 480 -500 335 -640 480 -427 640 -640 480 -333 500 -588 640 -640 478 -480 640 -640 427 -640 427 -427 640 -640 429 -640 480 -640 426 -500 333 -640 480 -640 427 -640 480 -640 480 -640 428 -425 640 -375 500 -640 480 -640 359 -640 480 -640 471 -640 480 -640 427 -640 480 -640 640 -480 640 -640 424 -640 489 -640 494 -480 640 -375 500 -640 427 -480 640 -362 640 -500 375 -480 640 -427 640 -640 480 -640 427 -479 640 -500 375 -426 640 -640 425 -640 428 -640 428 -640 427 -640 426 -640 480 -640 428 -480 640 -640 480 -640 480 -480 640 -640 201 -640 480 -480 640 -640 480 -640 434 -500 375 -640 429 -423 640 -427 640 -640 480 -640 425 -640 409 -640 480 -640 480 -640 433 -640 430 -480 640 -640 435 -640 426 -640 480 -640 360 -500 375 -640 427 -640 461 -640 426 -640 480 -640 480 -640 359 -500 334 -640 480 -640 480 -640 512 -640 343 -640 483 -640 336 -640 426 -640 480 -640 427 -640 424 -640 466 -500 332 -612 612 -640 361 -500 305 -640 465 -640 480 -492 500 -640 480 -640 473 -640 409 -640 480 -640 428 -640 427 -640 486 -465 640 -640 425 -640 496 -640 513 -640 348 -500 500 -640 512 -478 640 -640 480 -640 427 -413 640 -640 419 -640 426 -500 375 -640 428 -640 349 -427 640 -640 430 -640 480 -374 500 -640 481 -500 375 -640 480 -640 427 -640 427 -640 426 -640 426 -640 409 -640 480 -640 480 -500 382 -480 640 -640 425 -640 480 -640 428 -640 480 -480 640 -640 427 -500 333 -640 480 -640 480 -428 640 -640 383 -640 480 -640 600 -640 424 -500 375 -480 640 -640 429 -500 334 -500 375 -640 359 -640 430 -480 640 -640 459 -640 427 -640 294 -375 500 -480 640 -640 481 -640 427 -612 612 -640 425 -640 428 -500 346 -640 427 -640 427 -640 480 -640 480 -640 426 -375 500 -480 640 -427 640 -640 426 -500 333 -375 500 -424 640 -640 429 -640 427 -424 640 -640 425 -640 480 -640 380 -640 419 -640 480 -640 359 -640 464 -640 428 -640 427 -640 427 -481 640 -640 414 -500 373 -640 427 -640 426 -418 640 -640 426 -416 640 -640 480 -640 427 -640 462 -640 480 -640 481 -640 360 -640 359 -427 640 -640 426 -426 640 -640 427 -640 425 -640 482 -481 640 -612 612 -640 424 -524 640 -640 427 -640 427 -640 480 -480 640 -640 439 -640 341 -360 640 -640 429 -640 480 -500 375 -480 640 -640 427 -640 379 -640 424 -480 320 -427 640 -640 360 -640 427 -640 480 -427 640 -640 480 -640 480 -479 640 -640 480 -640 427 -428 640 -640 426 -429 640 -640 425 -640 427 -478 640 -640 480 -640 427 -480 640 -640 530 -640 427 -480 640 -480 640 -640 480 -640 480 -640 426 -425 640 -640 427 -640 480 -640 427 -640 480 -480 640 -640 429 -600 400 -640 428 -426 640 -640 480 -640 480 -427 640 -427 640 -462 640 -360 270 -364 500 -640 640 -612 612 -640 480 -640 480 -480 498 -500 382 -640 427 -612 612 -640 422 -640 426 -500 333 -640 427 -640 561 -640 480 -431 640 -640 480 -640 480 -480 640 -480 640 -640 480 -640 480 -640 432 -640 480 -500 375 -640 480 -640 483 -480 640 -480 640 -480 640 -640 185 -640 424 -640 480 -500 375 -640 480 -480 640 -640 426 -640 427 -427 640 -640 426 -500 476 -426 640 -480 640 -500 273 -480 640 -640 429 -427 640 -500 300 -500 400 -498 640 -640 480 -640 480 -640 480 -640 640 -640 480 -640 426 -375 500 -640 480 -640 425 -427 640 -640 480 -375 500 -640 427 -500 334 -640 429 -427 640 -480 640 -640 427 -640 428 -375 500 -526 640 -500 375 -640 480 -640 480 -640 423 -612 612 -640 452 -640 496 -500 375 -500 375 -383 640 -500 375 -640 427 -612 612 -640 480 -640 480 -612 612 -479 640 -640 430 -640 266 -424 640 -640 480 -640 480 -375 500 -500 333 -565 640 -640 480 -427 640 -500 375 -640 480 -425 640 -640 480 -640 480 -640 427 -640 480 -640 443 -500 583 -640 359 -480 640 -640 479 -640 480 -612 612 -640 427 -478 640 -640 480 -427 640 -640 427 -640 427 -640 427 -640 427 -640 489 -640 640 -640 480 -640 454 -640 360 -500 375 -640 427 -640 360 -640 523 -478 640 -425 640 -640 427 -423 500 -640 427 -425 283 -480 640 -640 376 -500 375 -426 640 -428 640 -640 480 -640 400 -640 427 -640 427 -640 431 -424 640 -640 480 -640 640 -500 333 -490 640 -640 480 -373 640 -640 480 -500 375 -640 426 -640 480 -640 480 -640 480 -640 426 -640 471 -640 426 -640 427 -640 427 -375 500 -640 427 -640 426 -426 640 -640 478 -640 480 -640 397 -480 640 -640 424 -640 428 -427 640 -480 640 -480 640 -640 480 -640 427 -640 480 -640 360 -640 512 -640 436 -640 428 -640 477 -434 640 -640 480 -500 375 -640 348 -640 480 -640 480 -640 480 -500 375 -427 640 -640 426 -424 640 -640 511 -640 433 -640 512 -640 411 -640 427 -640 480 -640 427 -640 427 -640 444 -640 480 -640 480 -640 427 -334 500 -640 354 -640 480 -500 332 -640 480 -640 427 -330 450 -640 427 -427 640 -640 480 -450 394 -480 640 -640 480 -361 640 -640 430 -640 480 -640 469 -640 480 -640 424 -640 429 -640 640 -640 478 -500 446 -375 500 -426 640 -612 612 -491 640 -500 333 -640 480 -640 484 -500 333 -640 480 -640 480 -640 393 -640 480 -640 480 -640 480 -500 375 -500 333 -640 480 -640 480 -500 429 -500 375 -640 480 -384 500 -425 640 -640 427 -640 428 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -640 426 -480 640 -428 640 -428 640 -612 612 -427 640 -640 480 -640 428 -427 640 -427 640 -640 439 -640 426 -480 640 -426 640 -640 427 -640 478 -640 426 -640 428 -640 480 -640 427 -640 436 -640 480 -640 383 -640 512 -612 612 -500 334 -640 428 -640 363 -640 426 -640 426 -640 480 -640 427 -640 425 -640 458 -640 480 -640 358 -640 480 -500 333 -640 447 -640 320 -384 640 -640 427 -500 640 -640 428 -640 427 -383 640 -427 640 -427 640 -640 480 -640 363 -640 393 -494 640 -500 331 -640 427 -612 612 -640 480 -640 434 -640 480 -640 427 -500 375 -640 427 -500 375 -640 480 -640 424 -640 480 -640 427 -640 427 -640 483 -640 480 -640 480 -480 640 -640 426 -500 333 -480 640 -640 480 -640 480 -428 640 -500 335 -612 612 -640 480 -559 640 -640 481 -500 375 -431 640 -640 480 -640 425 -640 427 -500 333 -479 640 -640 480 -640 427 -640 480 -640 427 -640 480 -640 425 -640 412 -640 452 -640 480 -640 427 -640 640 -480 640 -640 473 -480 640 -375 500 -640 480 -640 480 -640 480 -640 426 -640 480 -500 335 -640 480 -640 427 -480 640 -451 640 -640 427 -480 640 -640 480 -640 425 -640 426 -640 427 -429 640 -640 429 -426 640 -640 424 -640 480 -640 480 -640 424 -640 452 -640 427 -640 480 -640 480 -640 427 -640 480 -425 640 -640 360 -427 640 -640 425 -640 427 -640 427 -640 344 -640 433 -359 640 -427 640 -500 333 -480 640 -448 640 -640 427 -640 427 -640 426 -640 438 -640 480 -480 640 -640 426 -640 361 -640 500 -640 428 -640 478 -640 480 -500 333 -427 640 -640 428 -640 360 -640 427 -478 640 -332 500 -640 480 -640 427 -640 480 -480 640 -640 427 -498 640 -640 466 -640 474 -333 500 -640 480 -426 640 -640 628 -500 334 -640 427 -640 427 -640 480 -640 427 -640 425 -421 210 -500 333 -640 427 -640 392 -640 428 -640 480 -640 480 -640 480 -640 426 -387 387 -640 493 -640 463 -426 640 -640 480 -480 640 -640 640 -640 426 -640 640 -500 419 -409 640 -640 480 -480 640 -640 480 -640 481 -640 428 -640 426 -640 480 -640 480 -640 516 -375 500 -500 375 -500 375 -480 640 -640 391 -640 480 -480 640 -640 427 -640 480 -427 640 -526 640 -640 425 -640 480 -640 436 -640 508 -612 612 -500 375 -500 333 -640 429 -480 318 -480 640 -480 640 -640 427 -640 428 -640 467 -500 375 -640 428 -427 640 -640 449 -323 500 -640 437 -480 640 -640 480 -640 478 -480 640 -500 336 -640 480 -425 640 -612 612 -478 640 -612 612 -426 640 -640 604 -640 483 -640 478 -640 431 -640 481 -640 480 -425 640 -640 424 -557 640 -480 640 -640 456 -640 480 -640 424 -480 640 -480 640 -640 427 -320 240 -640 428 -640 640 -640 259 -640 360 -640 427 -640 494 -640 480 -427 640 -427 640 -360 360 -480 640 -640 480 -640 480 -640 463 -640 480 -427 640 -640 425 -640 424 -640 480 -640 640 -640 428 -640 425 -640 425 -640 480 -640 480 -640 480 -640 424 -640 440 -640 480 -640 480 -640 426 -500 393 -640 480 -640 480 -480 640 -640 430 -480 640 -500 335 -500 333 -481 640 -500 375 -640 427 -640 564 -640 480 -426 640 -640 426 -640 480 -463 640 -640 480 -640 480 -612 612 -500 375 -640 427 -640 496 -640 427 -478 640 -640 427 -640 427 -375 500 -640 427 -500 375 -359 640 -640 351 -640 421 -480 640 -640 426 -640 427 -640 428 -640 639 -640 480 -640 378 -480 640 -640 424 -640 427 -480 640 -480 640 -500 373 -427 640 -640 480 -640 480 -500 375 -640 480 -640 432 -640 506 -640 427 -640 480 -480 640 -640 480 -480 640 -640 480 -640 487 -640 481 -480 640 -640 427 -640 426 -640 524 -500 333 -426 640 -640 480 -450 640 -640 528 -640 532 -640 463 -640 416 -640 480 -640 480 -640 468 -335 500 -640 480 -375 500 -614 640 -640 427 -640 479 -640 452 -640 427 -500 375 -640 427 -500 417 -640 481 -375 500 -640 480 -640 480 -640 480 -640 427 -506 640 -640 426 -640 480 -640 428 -480 640 -640 480 -640 480 -640 480 -640 427 -500 392 -640 504 -640 427 -480 640 -640 427 -640 428 -480 640 -640 426 -640 481 -640 434 -640 480 -375 500 -640 480 -640 480 -480 640 -640 451 -640 426 -640 480 -640 480 -640 640 -446 640 -640 426 -640 360 -500 333 -500 394 -640 426 -427 640 -640 427 -640 640 -640 480 -640 427 -640 480 -640 513 -426 640 -500 333 -640 480 -640 480 -480 640 -640 426 -480 640 -500 333 -333 500 -640 480 -640 426 -640 427 -640 428 -480 640 -640 426 -640 480 -640 479 -500 368 -415 640 -426 640 -640 426 -526 640 -640 480 -640 480 -500 302 -425 640 -426 640 -640 480 -458 640 -374 500 -630 640 -640 425 -640 480 -427 640 -640 427 -640 480 -640 480 -480 640 -640 480 -640 480 -640 427 -640 480 -640 480 -426 640 -640 424 -534 640 -428 640 -640 427 -500 375 -640 425 -640 496 -640 360 -640 480 -640 428 -640 480 -640 478 -424 640 -640 497 -640 427 -640 480 -640 564 -640 428 -480 640 -640 468 -500 333 -500 333 -640 428 -640 427 -441 640 -427 640 -500 375 -640 481 -640 480 -640 427 -486 640 -640 480 -640 428 -640 426 -612 612 -640 480 -640 427 -640 480 -427 640 -640 418 -332 500 -640 425 -640 480 -640 394 -640 480 -500 374 -500 500 -612 612 -427 640 -425 640 -427 640 -640 480 -640 480 -640 444 -612 612 -640 427 -640 430 -640 426 -500 333 -640 480 -640 426 -612 612 -478 640 -640 426 -394 500 -451 500 -425 640 -640 427 -426 640 -640 424 -424 640 -480 640 -480 640 -640 480 -640 428 -640 504 -640 424 -640 554 -640 480 -428 640 -500 375 -609 640 -640 439 -640 360 -640 561 -480 640 -478 640 -500 375 -481 640 -640 483 -421 640 -640 427 -518 640 -480 640 -640 480 -640 466 -640 394 -426 640 -480 640 -640 491 -640 426 -640 480 -500 375 -427 640 -640 440 -500 375 -480 640 -640 480 -640 502 -427 640 -511 640 -612 612 -640 439 -640 428 -640 426 -640 427 -425 640 -640 427 -469 640 -640 427 -480 640 -480 640 -640 426 -500 333 -640 404 -447 500 -640 427 -640 421 -500 334 -512 640 -640 427 -426 640 -640 480 -640 457 -427 640 -440 640 -427 640 -640 480 -426 640 -640 427 -640 426 -500 375 -500 500 -640 429 -640 427 -640 413 -375 500 -640 427 -480 640 -640 639 -640 480 -500 375 -640 480 -426 640 -427 640 -427 640 -640 427 -334 500 -640 428 -640 427 -640 480 -640 426 -427 640 -640 427 -500 375 -640 360 -640 427 -427 640 -500 375 -429 640 -640 480 -500 333 -640 425 -480 640 -612 612 -640 480 -640 480 -640 514 -402 640 -640 416 -500 333 -640 427 -640 424 -640 480 -640 427 -640 427 -640 427 -640 480 -500 375 -640 427 -640 480 -500 366 -360 480 -640 426 -640 444 -499 640 -612 612 -480 640 -465 640 -640 480 -480 640 -640 427 -360 480 -640 427 -426 640 -640 427 -640 474 -478 640 -375 500 -640 480 -500 398 -425 640 -500 332 -640 427 -500 331 -640 426 -500 373 -640 480 -640 480 -640 424 -480 360 -426 640 -500 333 -640 478 -426 640 -640 427 -640 427 -480 640 -640 640 -640 480 -640 428 -500 478 -427 640 -640 453 -640 480 -500 375 -612 612 -640 640 -640 427 -640 427 -640 427 -427 640 -640 482 -500 333 -640 369 -640 361 -424 640 -288 216 -640 424 -640 428 -400 500 -640 480 -640 427 -640 396 -640 429 -500 365 -375 500 -426 640 -443 640 -640 427 -640 480 -612 612 -427 640 -640 429 -640 428 -640 215 -396 640 -437 640 -640 426 -440 640 -640 480 -640 480 -640 480 -333 500 -500 332 -640 398 -640 480 -500 375 -480 640 -640 426 -640 480 -640 480 -640 428 -640 480 -640 424 -640 427 -640 480 -640 426 -500 333 -612 612 -640 480 -428 640 -427 640 -640 480 -238 640 -480 640 -640 428 -640 480 -398 500 -640 428 -634 640 -640 481 -480 640 -500 332 -640 230 -500 375 -640 480 -640 480 -640 480 -500 346 -640 427 -640 354 -640 480 -640 428 -500 332 -640 480 -640 427 -640 428 -612 612 -640 480 -480 640 -640 427 -640 466 -640 429 -640 426 -479 640 -640 504 -640 336 -415 640 -640 427 -640 428 -640 480 -640 427 -382 640 -640 480 -640 480 -332 500 -640 480 -640 428 -640 426 -640 427 -334 500 -640 473 -640 427 -640 480 -425 640 -640 425 -640 426 -640 383 -500 375 -640 480 -500 375 -469 640 -500 281 -640 480 -640 480 -640 425 -640 478 -640 464 -640 480 -640 428 -480 640 -640 539 -640 428 -640 427 -640 427 -480 640 -640 480 -640 480 -640 480 -480 640 -640 428 -640 427 -640 480 -640 427 -425 640 -500 346 -480 640 -500 293 -466 640 -427 640 -640 480 -640 427 -500 334 -640 640 -500 333 -480 640 -640 480 -444 500 -640 429 -500 333 -640 640 -438 640 -436 640 -480 640 -640 382 -640 480 -640 570 -480 640 -640 480 -612 612 -428 640 -640 480 -640 444 -640 480 -640 360 -640 391 -480 640 -640 426 -640 480 -640 480 -640 480 -640 425 -612 612 -375 500 -640 480 -640 480 -500 375 -500 333 -640 480 -500 375 -427 640 -640 480 -640 426 -640 400 -640 429 -640 428 -640 426 -500 375 -480 640 -400 500 -640 429 -480 640 -480 320 -640 360 -612 612 -640 360 -640 426 -640 426 -427 640 -640 425 -424 640 -640 427 -640 427 -640 426 -612 612 -427 640 -640 425 -640 480 -640 428 -640 425 -640 427 -640 427 -640 351 -640 427 -500 335 -381 500 -425 640 -640 358 -640 424 -500 375 -640 483 -640 480 -478 640 -353 640 -640 427 -640 360 -612 612 -612 612 -640 427 -640 480 -426 640 -640 427 -640 426 -480 640 -640 480 -640 427 -640 360 -640 480 -500 334 -640 480 -640 480 -640 441 -640 425 -640 512 -640 376 -640 360 -640 480 -500 454 -500 375 -640 480 -480 640 -445 640 -640 429 -640 425 -425 640 -640 425 -640 480 -500 357 -612 612 -480 640 -640 434 -640 427 -640 401 -332 500 -640 426 -640 427 -640 478 -500 334 -640 478 -640 480 -640 469 -640 426 -640 424 -640 480 -640 480 -640 480 -640 423 -640 427 -640 427 -640 480 -500 375 -640 428 -375 500 -640 427 -640 480 -640 480 -640 480 -473 615 -640 478 -640 480 -442 287 -480 640 -640 423 -640 427 -500 375 -640 480 -640 480 -640 480 -640 480 -640 436 -640 425 -500 375 -485 640 -640 427 -612 612 -480 640 -640 521 -612 612 -640 393 -640 456 -640 480 -500 375 -640 429 -640 480 -640 425 -640 480 -640 429 -640 427 -500 354 -480 640 -640 480 -640 420 -640 480 -480 640 -640 480 -500 375 -500 375 -375 500 -640 480 -640 475 -426 640 -640 426 -640 427 -640 480 -500 332 -640 427 -640 360 -480 640 -480 640 -640 428 -640 418 -476 640 -640 440 -375 500 -640 478 -640 432 -460 613 -640 480 -408 640 -640 424 -640 480 -407 500 -427 640 -640 427 -640 424 -640 640 -640 480 -640 486 -612 612 -640 403 -640 480 -640 425 -640 426 -640 402 -512 640 -640 640 -360 640 -427 640 -640 375 -640 480 -635 640 -640 480 -640 428 -640 421 -437 640 -640 426 -640 480 -500 356 -480 640 -640 480 -640 427 -640 427 -640 426 -640 480 -640 469 -640 426 -640 271 -640 389 -640 462 -640 464 -640 480 -640 434 -640 480 -640 480 -375 500 -640 152 -480 640 -640 640 -640 436 -480 640 -500 375 -453 640 -500 334 -426 640 -427 640 -375 500 -640 423 -640 427 -640 332 -640 427 -640 480 -640 426 -427 640 -426 640 -500 375 -640 428 -640 480 -449 640 -640 427 -640 411 -640 428 -640 428 -640 427 -501 640 -427 640 -500 375 -556 640 -640 480 -640 470 -612 612 -640 427 -427 640 -640 427 -466 640 -640 424 -640 425 -512 640 -640 480 -640 370 -640 480 -640 427 -640 480 -640 427 -480 640 -640 426 -640 426 -480 640 -640 480 -640 480 -375 500 -640 457 -640 427 -640 426 -427 640 -640 480 -640 480 -640 344 -640 528 -500 375 -640 485 -375 500 -640 413 -640 427 -640 480 -500 333 -640 427 -335 500 -580 440 -640 427 -640 480 -500 318 -640 427 -480 640 -640 429 -640 410 -456 640 -640 427 -640 480 -395 640 -426 640 -427 640 -427 640 -640 426 -427 640 -427 640 -640 427 -640 428 -640 427 -268 402 -640 462 -612 612 -640 480 -640 480 -640 383 -640 427 -640 409 -640 427 -640 427 -640 479 -640 427 -427 640 -640 480 -428 640 -640 427 -640 480 -427 640 -500 400 -426 640 -640 317 -640 480 -480 640 -500 375 -640 427 -480 640 -640 480 -480 640 -640 480 -640 483 -500 426 -612 612 -428 640 -640 426 -640 429 -490 488 -500 375 -640 480 -640 424 -640 480 -640 427 -640 427 -640 408 -640 403 -640 426 -640 556 -640 480 -612 612 -480 640 -480 640 -426 640 -480 640 -640 427 -375 500 -640 424 -640 427 -500 375 -480 640 -640 425 -640 480 -640 418 -640 428 -640 480 -640 479 -640 468 -539 640 -640 480 -491 500 -640 357 -427 640 -640 480 -480 640 -640 480 -426 640 -640 429 -480 640 -426 640 -640 427 -640 375 -500 499 -640 427 -480 640 -426 640 -500 333 -640 286 -640 480 -302 640 -427 640 -640 425 -500 333 -429 640 -640 483 -640 391 -640 355 -640 360 -480 640 -500 334 -640 467 -500 375 -640 480 -640 360 -640 428 -500 332 -640 427 -640 427 -640 426 -480 640 -465 640 -640 426 -640 423 -640 426 -640 480 -500 375 -640 640 -500 375 -500 375 -640 426 -640 418 -424 640 -478 640 -640 427 -640 429 -640 480 -640 476 -480 640 -640 511 -640 427 -427 640 -500 351 -640 427 -640 480 -640 480 -640 480 -480 640 -640 480 -640 374 -640 592 -640 480 -640 427 -375 500 -487 363 -640 461 -640 427 -640 425 -500 375 -640 480 -314 375 -640 427 -375 500 -640 480 -640 360 -639 640 -640 512 -640 453 -640 427 -640 480 -640 448 -375 500 -640 480 -426 640 -640 480 -500 375 -640 426 -640 480 -640 446 -640 383 -480 640 -640 457 -427 640 -640 464 -480 640 -640 480 -640 540 -640 426 -640 480 -640 480 -480 640 -640 428 -480 640 -612 612 -640 425 -480 360 -333 500 -640 440 -426 640 -612 612 -480 640 -640 427 -516 640 -640 480 -367 640 -480 640 -640 426 -480 640 -640 480 -640 480 -640 459 -640 480 -640 374 -640 459 -640 427 -480 640 -500 281 -640 427 -505 640 -640 480 -480 640 -640 480 -640 480 -421 640 -478 640 -640 428 -640 480 -640 480 -640 480 -640 436 -500 333 -640 500 -400 600 -640 427 -640 428 -375 500 -427 640 -596 640 -425 640 -640 427 -500 375 -500 220 -640 388 -480 640 -640 427 -640 360 -640 480 -640 640 -640 480 -640 610 -640 480 -425 640 -427 640 -640 512 -640 440 -640 480 -500 375 -500 249 -427 640 -640 480 -640 427 -424 640 -640 484 -482 640 -600 400 -640 423 -428 640 -640 427 -640 480 -480 542 -640 471 -640 640 -640 424 -640 427 -640 480 -640 425 -548 640 -640 455 -640 360 -429 640 -640 480 -333 500 -640 480 -488 640 -480 640 -640 444 -640 480 -640 481 -640 480 -427 640 -640 427 -425 640 -640 480 -612 612 -375 500 -640 483 -427 640 -500 335 -640 480 -640 426 -640 480 -377 500 -640 496 -640 427 -640 425 -640 426 -640 360 -640 427 -500 422 -640 426 -640 480 -640 480 -640 360 -500 375 -480 640 -480 640 -480 640 -612 612 -374 500 -500 357 -640 338 -640 428 -640 480 -640 360 -640 238 -640 427 -640 481 -640 359 -640 427 -400 261 -640 434 -500 333 -640 427 -640 480 -500 400 -640 481 -640 427 -640 429 -375 500 -640 640 -332 500 -640 434 -640 426 -640 426 -478 640 -640 466 -640 427 -480 640 -427 640 -640 427 -640 427 -640 415 -640 427 -480 640 -640 480 -500 457 -640 480 -496 500 -500 375 -471 486 -500 375 -640 480 -480 640 -640 480 -640 480 -500 333 -427 640 -480 640 -396 640 -500 375 -363 500 -640 480 -480 640 -640 480 -500 330 -612 612 -580 640 -640 480 -640 640 -640 360 -640 478 -640 411 -500 333 -500 331 -640 480 -640 480 -427 640 -640 427 -500 375 -640 427 -500 374 -480 640 -640 427 -640 480 -640 427 -500 296 -640 480 -640 480 -335 500 -500 375 -427 640 -640 480 -640 632 -500 375 -640 551 -640 427 -640 480 -640 365 -640 425 -640 524 -640 480 -640 427 -640 426 -424 640 -640 427 -640 427 -427 640 -426 640 -640 351 -640 480 -640 480 -640 427 -427 640 -640 425 -640 512 -424 640 -640 488 -640 426 -640 480 -640 493 -480 640 -640 428 -425 640 -640 480 -640 480 -640 426 -640 427 -640 426 -500 375 -640 427 -640 426 -500 375 -640 480 -640 360 -500 375 -600 448 -640 428 -500 375 -429 640 -640 426 -640 424 -640 631 -640 427 -612 612 -640 384 -640 480 -640 361 -640 480 -427 640 -640 428 -640 427 -500 217 -640 503 -500 265 -640 427 -640 480 -500 375 -640 427 -500 333 -512 640 -640 320 -500 375 -480 640 -418 640 -640 480 -500 375 -500 400 -640 413 -640 426 -640 285 -480 640 -480 360 -640 425 -640 640 -612 612 -480 640 -640 640 -640 457 -640 427 -500 375 -640 424 -500 332 -599 640 -640 427 -398 640 -640 427 -640 360 -640 425 -480 640 -640 426 -640 480 -640 480 -640 428 -640 416 -640 425 -640 480 -640 480 -640 356 -486 640 -640 427 -640 414 -640 425 -640 480 -640 481 -640 464 -425 640 -427 640 -640 430 -640 445 -640 423 -480 640 -640 396 -433 640 -640 480 -640 480 -640 480 -640 427 -640 457 -376 500 -640 427 -640 480 -640 428 -640 360 -640 427 -640 480 -640 480 -640 447 -640 427 -424 640 -640 425 -640 425 -600 600 -511 640 -640 469 -640 480 -640 427 -480 640 -640 427 -640 480 -640 480 -640 427 -640 360 -640 480 -480 640 -612 612 -333 500 -640 347 -640 480 -500 333 -640 424 -640 480 -640 360 -640 480 -640 640 -480 640 -640 427 -640 480 -640 512 -612 612 -439 640 -640 425 -424 640 -500 334 -500 376 -475 640 -640 426 -640 479 -461 640 -640 431 -640 427 -480 640 -640 480 -427 640 -640 426 -640 478 -640 428 -640 480 -500 323 -480 640 -640 480 -480 640 -375 500 -640 480 -640 480 -640 480 -612 612 -640 427 -640 283 -640 427 -500 375 -640 480 -640 427 -480 640 -427 640 -640 427 -478 640 -512 640 -640 426 -640 640 -640 427 -640 480 -640 427 -480 640 -427 640 -640 427 -640 429 -427 640 -640 480 -640 423 -640 427 -500 375 -640 425 -640 480 -640 503 -500 375 -480 640 -640 426 -640 480 -640 550 -640 447 -640 428 -640 427 -480 640 -500 358 -640 427 -640 514 -500 334 -640 480 -640 359 -640 480 -480 640 -500 353 -427 640 -640 427 -480 640 -640 427 -640 480 -375 500 -491 640 -640 425 -640 480 -612 612 -640 427 -640 427 -332 500 -640 427 -640 428 -500 309 -612 612 -640 249 -480 640 -640 480 -358 640 -640 480 -478 640 -480 640 -640 425 -427 640 -640 512 -640 425 -640 480 -640 426 -612 612 -427 640 -427 640 -640 480 -480 640 -427 640 -640 384 -424 640 -428 640 -480 640 -480 640 -640 480 -640 427 -640 593 -640 480 -640 617 -640 360 -640 480 -640 438 -640 425 -640 422 -480 640 -500 375 -640 426 -640 427 -640 427 -640 480 -640 431 -640 425 -640 427 -640 427 -640 428 -640 424 -640 503 -640 480 -640 425 -640 427 -426 640 -428 640 -640 426 -640 361 -426 640 -375 500 -640 480 -500 375 -640 361 -640 640 -630 640 -480 640 -640 480 -480 640 -640 480 -640 427 -640 480 -530 640 -640 480 -640 428 -640 427 -500 325 -480 640 -433 640 -640 427 -640 452 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -480 640 -640 480 -640 424 -640 426 -427 640 -640 480 -640 426 -640 414 -375 500 -640 428 -640 427 -480 640 -640 640 -640 480 -640 427 -640 427 -640 427 -500 375 -640 427 -640 480 -480 640 -500 390 -640 427 -617 640 -640 480 -640 480 -427 640 -500 375 -640 427 -640 454 -480 640 -640 427 -640 424 -640 426 -640 425 -500 333 -640 480 -640 268 -640 404 -480 640 -640 424 -640 427 -640 429 -640 361 -600 400 -640 426 -500 351 -640 480 -640 480 -640 424 -640 360 -427 640 -640 449 -640 480 -640 480 -640 427 -375 500 -640 427 -640 359 -640 471 -640 480 -500 327 -640 427 -427 640 -427 640 -612 612 -640 480 -640 429 -427 640 -427 640 -640 426 -640 426 -640 424 -480 640 -500 375 -428 640 -480 640 -640 599 -333 500 -640 427 -640 360 -612 612 -640 480 -640 594 -640 480 -480 640 -640 426 -640 427 -640 480 -500 376 -480 640 -500 375 -426 640 -640 426 -640 480 -640 360 -600 450 -612 612 -486 640 -640 480 -512 640 -427 640 -640 480 -480 640 -640 426 -489 640 -640 480 -475 355 -480 640 -375 500 -480 640 -426 640 -480 640 -640 361 -536 640 -500 375 -480 640 -375 500 -640 427 -640 640 -640 421 -500 473 -640 428 -369 640 -640 480 -375 500 -500 375 -640 480 -640 480 -640 480 -640 422 -640 425 -640 480 -640 480 -480 640 -640 427 -640 427 -640 425 -426 640 -640 427 -500 312 -640 263 -480 640 -640 480 -640 640 -375 500 -640 463 -640 480 -640 456 -640 480 -500 375 -640 425 -427 640 -640 426 -500 329 -640 480 -500 375 -640 427 -640 480 -640 427 -640 547 -640 426 -480 640 -640 427 -640 418 -640 328 -480 640 -640 480 -640 427 -500 255 -640 427 -480 640 -480 640 -640 409 -640 480 -428 640 -375 500 -500 333 -640 480 -606 640 -640 480 -640 434 -640 464 -640 429 -640 427 -480 640 -640 426 -640 369 -640 426 -640 366 -640 426 -640 480 -375 500 -500 375 -640 480 -640 426 -640 480 -640 480 -640 420 -395 640 -612 612 -640 480 -640 426 -480 640 -640 427 -500 375 -460 640 -640 412 -640 427 -640 480 -473 600 -640 640 -612 612 -640 480 -640 404 -640 480 -640 480 -640 526 -500 363 -640 414 -640 400 -640 427 -640 427 -640 427 -640 480 -640 480 -640 427 -640 515 -498 640 -640 472 -640 480 -480 640 -640 415 -333 500 -640 480 -640 461 -640 426 -640 406 -640 512 -428 640 -640 427 -640 480 -640 480 -640 628 -640 427 -427 640 -426 640 -640 427 -640 427 -640 480 -640 424 -554 640 -480 640 -640 415 -640 426 -480 640 -500 334 -500 375 -640 427 -640 466 -640 427 -640 428 -427 640 -640 428 -640 427 -640 480 -640 480 -640 360 -640 426 -640 480 -500 333 -500 356 -640 360 -640 480 -640 427 -480 640 -640 480 -640 592 -612 612 -640 480 -640 479 -640 466 -640 429 -640 480 -612 612 -640 512 -479 640 -640 480 -640 480 -640 480 -640 427 -640 480 -500 349 -640 523 -640 480 -640 480 -640 483 -640 428 -399 500 -500 375 -640 427 -640 381 -640 480 -640 427 -640 426 -640 393 -640 426 -565 640 -480 640 -640 426 -480 640 -480 640 -454 640 -573 640 -640 480 -640 427 -480 640 -640 427 -640 480 -497 500 -640 427 -640 360 -500 375 -640 427 -640 425 -480 640 -640 428 -426 640 -500 491 -480 640 -374 500 -640 480 -640 425 -360 480 -640 480 -612 612 -640 480 -640 349 -375 500 -640 425 -640 360 -640 427 -640 427 -428 640 -640 480 -425 640 -375 500 -640 359 -640 480 -500 375 -427 640 -640 429 -640 480 -640 480 -640 480 -640 470 -434 640 -500 375 -640 425 -640 305 -640 427 -640 480 -426 640 -360 640 -640 480 -375 500 -480 640 -478 640 -640 480 -595 640 -640 428 -640 480 -480 640 -640 480 -500 281 -640 480 -500 333 -640 427 -640 428 -500 191 -409 640 -640 480 -425 640 -640 512 -640 480 -640 426 -640 427 -640 424 -640 427 -640 427 -640 480 -640 480 -640 476 -640 536 -640 480 -640 480 -640 480 -500 375 -640 427 -640 480 -500 500 -640 480 -640 340 -640 480 -640 480 -426 640 -640 473 -500 333 -640 480 -640 470 -640 427 -640 502 -640 426 -640 298 -640 480 -480 640 -640 480 -640 480 -640 480 -640 426 -612 612 -500 375 -640 429 -500 338 -500 375 -640 480 -500 375 -492 640 -640 427 -640 429 -640 599 -640 480 -338 450 -640 480 -640 480 -640 359 -500 366 -640 424 -428 640 -640 480 -640 427 -640 480 -500 333 -500 375 -640 425 -480 640 -426 640 -640 346 -640 480 -640 480 -640 480 -612 612 -428 640 -640 427 -399 640 -356 500 -427 640 -640 480 -640 480 -640 480 -640 640 -640 480 -640 441 -640 480 -500 375 -480 640 -612 612 -500 375 -640 441 -640 427 -640 427 -640 427 -427 640 -640 424 -480 640 -640 427 -500 392 -640 427 -427 640 -640 512 -640 480 -486 640 -640 480 -640 453 -640 425 -640 480 -640 428 -479 640 -640 480 -640 480 -375 500 -480 640 -640 427 -490 640 -480 640 -640 424 -427 640 -640 426 -640 426 -333 500 -375 500 -427 640 -640 424 -480 640 -500 333 -640 426 -640 480 -640 471 -632 640 -640 480 -640 421 -640 480 -640 352 -640 427 -480 640 -640 426 -640 480 -640 459 -640 480 -640 427 -427 640 -640 480 -640 443 -640 428 -640 480 -640 480 -485 640 -427 640 -640 427 -640 424 -640 640 -640 480 -640 427 -640 427 -640 406 -640 493 -640 480 -612 612 -500 375 -640 466 -640 422 -640 434 -640 428 -640 427 -640 427 -640 480 -640 425 -454 640 -640 338 -640 427 -500 334 -640 363 -640 426 -457 640 -640 427 -640 478 -428 640 -500 375 -640 480 -360 640 -640 427 -640 427 -480 640 -640 480 -640 424 -640 360 -640 414 -640 437 -640 480 -640 428 -500 375 -480 640 -480 640 -427 640 -448 300 -486 640 -500 375 -500 400 -640 449 -640 415 -427 640 -640 428 -640 480 -640 480 -427 640 -500 333 -500 341 -500 375 -500 375 -640 480 -640 427 -640 512 -640 427 -480 640 -640 480 -500 334 -640 427 -640 424 -640 426 -640 427 -480 640 -480 640 -640 426 -640 427 -640 480 -640 429 -480 640 -640 480 -640 427 -612 612 -500 333 -640 427 -612 612 -500 375 -640 427 -426 640 -640 428 -640 480 -550 640 -500 375 -334 500 -427 640 -640 480 -640 480 -463 640 -367 500 -640 427 -640 438 -500 331 -612 612 -640 480 -500 291 -600 400 -640 427 -427 640 -640 480 -640 480 -375 500 -640 428 -640 427 -500 176 -640 427 -640 425 -640 597 -640 427 -640 480 -480 640 -640 640 -640 480 -425 640 -500 375 -456 640 -640 427 -640 426 -640 519 -640 411 -375 500 -640 427 -428 640 -428 640 -640 463 -640 561 -640 361 -427 640 -640 480 -640 426 -640 480 -522 640 -640 512 -640 480 -640 480 -640 508 -640 480 -640 427 -439 640 -640 360 -640 499 -640 479 -640 480 -640 640 -640 427 -640 480 -640 427 -425 640 -375 500 -500 357 -500 375 -418 640 -640 425 -386 500 -640 426 -640 480 -640 438 -640 480 -640 429 -640 480 -500 332 -427 640 -640 424 -293 500 -425 640 -612 612 -640 546 -640 481 -640 433 -612 612 -640 480 -640 489 -640 480 -480 640 -640 480 -428 640 -328 480 -640 423 -640 426 -480 640 -640 480 -470 640 -640 425 -640 480 -640 480 -612 612 -640 480 -448 500 -575 640 -640 425 -640 480 -427 640 -640 480 -640 480 -640 480 -345 640 -640 427 -500 331 -427 640 -640 427 -640 480 -640 640 -640 478 -478 640 -640 426 -640 480 -640 480 -640 427 -640 480 -640 427 -640 640 -640 480 -640 425 -427 640 -500 375 -480 640 -500 375 -500 375 -629 640 -640 480 -640 426 -640 480 -640 427 -640 426 -480 640 -640 425 -500 375 -640 480 -640 480 -480 640 -640 426 -640 425 -640 427 -426 640 -480 640 -424 640 -640 406 -640 272 -640 480 -640 480 -424 640 -427 640 -640 480 -440 640 -375 500 -640 426 -429 640 -383 640 -640 480 -612 612 -640 426 -640 480 -640 428 -640 480 -640 480 -640 425 -640 480 -428 640 -427 640 -640 480 -640 480 -640 480 -640 427 -640 425 -640 424 -640 480 -640 430 -640 480 -640 359 -640 480 -499 500 -640 480 -640 480 -640 478 -640 360 -640 427 -640 512 -640 415 -640 480 -640 480 -612 612 -640 214 -640 426 -640 481 -640 427 -459 640 -640 427 -480 640 -480 640 -640 480 -430 640 -640 480 -640 426 -640 480 -478 640 -640 423 -640 480 -640 480 -506 640 -640 480 -640 427 -383 640 -640 425 -640 427 -500 375 -335 500 -640 480 -199 640 -640 428 -640 428 -640 480 -640 480 -480 640 -640 425 -500 375 -640 426 -500 500 -640 480 -640 427 -640 480 -640 572 -640 427 -640 424 -640 438 -500 500 -640 427 -640 423 -640 480 -640 220 -640 428 -480 640 -640 480 -640 429 -375 500 -333 500 -640 480 -640 400 -640 426 -640 429 -640 480 -640 480 -640 426 -640 428 -500 375 -640 480 -427 640 -480 640 -375 500 -500 357 -480 640 -352 640 -640 473 -640 480 -640 480 -640 427 -640 454 -640 427 -640 529 -640 480 -640 427 -640 640 -640 480 -640 352 -640 320 -640 543 -640 558 -640 480 -640 426 -640 426 -500 375 -480 640 -640 480 -640 480 -500 375 -640 427 -640 424 -500 333 -640 478 -640 427 -640 480 -640 428 -640 480 -640 428 -640 427 -500 375 -640 480 -640 425 -480 640 -435 640 -640 428 -640 379 -640 480 -640 272 -427 640 -640 426 -640 424 -640 428 -500 375 -640 480 -640 428 -640 410 -640 480 -640 426 -341 500 -640 427 -640 427 -424 640 -640 595 -640 480 -640 427 -640 425 -640 324 -640 427 -640 425 -640 480 -480 640 -480 640 -500 500 -640 427 -640 413 -640 427 -640 426 -640 428 -640 480 -640 444 -448 336 -640 426 -445 500 -500 375 -480 640 -640 427 -640 493 -500 334 -338 500 -480 640 -480 640 -640 480 -640 480 -640 640 -640 390 -640 480 -640 398 -640 504 -640 480 -640 534 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -425 640 -375 500 -640 426 -640 430 -640 597 -500 375 -640 480 -640 474 -640 640 -500 333 -640 426 -640 428 -640 480 -640 436 -640 458 -480 640 -480 640 -426 640 -428 640 -500 345 -640 360 -640 360 -640 480 -375 500 -640 427 -500 333 -480 640 -640 480 -425 640 -640 478 -558 640 -640 410 -640 425 -428 640 -640 426 -480 640 -640 427 -471 640 -640 469 -640 427 -640 480 -640 480 -640 480 -375 500 -429 640 -640 480 -369 336 -640 443 -480 640 -640 478 -333 500 -640 428 -640 481 -640 427 -640 480 -640 428 -640 480 -640 482 -375 500 -640 512 -640 480 -640 480 -640 426 -640 640 -640 480 -640 438 -640 480 -640 427 -531 640 -480 640 -640 478 -640 425 -640 425 -640 427 -640 426 -640 431 -612 612 -411 640 -500 375 -640 427 -640 498 -640 480 -640 420 -500 376 -427 640 -640 425 -431 640 -521 640 -640 428 -480 640 -375 500 -640 427 -640 480 -640 427 -500 375 -480 640 -541 640 -640 480 -640 432 -500 364 -640 480 -500 333 -504 378 -523 640 -640 489 -640 360 -640 480 -480 640 -640 427 -640 427 -480 640 -640 427 -640 427 -500 333 -640 480 -640 427 -640 400 -640 426 -640 480 -640 425 -425 640 -640 480 -427 640 -640 541 -640 491 -640 426 -480 640 -480 640 -564 640 -640 478 -424 640 -335 500 -500 377 -640 426 -640 428 -640 430 -640 478 -640 429 -640 427 -332 500 -361 640 -640 457 -640 480 -640 427 -640 427 -640 361 -640 480 -640 480 -640 427 -480 640 -640 428 -640 424 -640 426 -480 640 -426 640 -640 426 -640 592 -640 480 -640 480 -640 480 -480 640 -640 423 -640 480 -640 480 -383 640 -500 375 -640 489 -640 480 -500 375 -640 480 -500 333 -480 640 -640 363 -427 640 -640 480 -640 426 -640 479 -427 640 -640 435 -333 500 -640 426 -640 427 -640 478 -640 441 -640 480 -480 640 -640 427 -427 640 -640 640 -500 376 -427 640 -640 426 -640 426 -640 424 -640 459 -640 457 -640 437 -640 480 -640 480 -640 399 -640 480 -480 640 -640 480 -640 480 -640 393 -375 500 -427 640 -640 480 -640 427 -640 480 -640 427 -500 375 -480 640 -480 640 -640 425 -500 387 -640 429 -640 480 -478 640 -480 640 -640 426 -500 333 -500 375 -640 480 -640 429 -640 480 -426 640 -427 640 -480 640 -500 332 -640 480 -480 640 -640 426 -640 432 -486 640 -428 640 -640 429 -640 459 -393 640 -640 425 -427 640 -640 428 -548 640 -640 411 -489 500 -640 427 -640 414 -640 427 -480 640 -500 344 -480 640 -640 503 -428 640 -500 375 -500 375 -640 444 -640 427 -500 375 -640 424 -456 640 -612 612 -375 500 -427 640 -500 333 -640 480 -640 480 -640 480 -640 480 -640 425 -640 512 -582 640 -480 640 -640 480 -640 515 -500 369 -640 428 -640 480 -478 640 -640 427 -500 332 -577 640 -500 375 -444 640 -640 453 -640 360 -640 633 -640 383 -640 480 -640 427 -640 406 -500 357 -480 640 -640 424 -640 480 -640 480 -579 640 -640 480 -640 480 -640 427 -450 338 -640 480 -640 356 -514 640 -425 567 -640 480 -600 400 -427 640 -640 431 -640 480 -640 426 -640 480 -640 426 -612 612 -640 480 -480 640 -468 640 -640 480 -640 443 -640 427 -425 640 -640 519 -480 640 -333 500 -427 640 -640 427 -428 640 -640 425 -640 425 -640 480 -640 480 -640 480 -500 375 -640 425 -480 640 -640 491 -640 486 -480 640 -500 375 -640 427 -640 428 -640 308 -640 365 -479 640 -500 333 -512 640 -640 480 -640 480 -640 480 -640 361 -640 427 -640 480 -554 640 -500 332 -640 427 -640 425 -640 512 -640 480 -500 375 -375 500 -640 448 -640 426 -305 480 -612 612 -375 500 -640 452 -640 425 -640 480 -640 427 -640 428 -640 426 -500 332 -640 425 -640 360 -612 612 -480 640 -640 429 -428 640 -500 375 -640 413 -640 480 -640 427 -500 375 -476 640 -640 480 -640 480 -640 427 -640 480 -345 500 -500 375 -480 640 -640 427 -640 427 -640 360 -392 640 -500 375 -640 427 -574 640 -640 428 -640 427 -640 438 -500 375 -640 424 -480 640 -640 427 -640 427 -500 375 -640 427 -640 425 -640 425 -480 640 -640 477 -640 480 -640 424 -640 494 -640 424 -333 500 -453 640 -500 375 -610 407 -612 612 -640 428 -426 640 -375 500 -640 480 -640 427 -425 640 -640 427 -640 640 -449 401 -640 426 -427 640 -640 429 -640 428 -600 400 -640 640 -640 464 -500 375 -640 427 -640 427 -640 480 -640 360 -480 640 -640 425 -525 525 -426 640 -640 427 -500 375 -640 427 -640 427 -425 640 -480 640 -640 573 -630 450 -640 480 -612 612 -640 480 -480 640 -640 506 -640 425 -640 405 -360 640 -640 480 -640 622 -640 425 -375 500 -640 427 -612 612 -640 457 -568 640 -640 480 -640 427 -640 426 -480 640 -427 640 -640 427 -640 428 -640 400 -640 480 -480 640 -640 428 -480 640 -480 640 -480 640 -599 640 -640 480 -640 480 -640 426 -640 478 -640 480 -640 427 -640 425 -375 500 -640 480 -375 500 -607 640 -375 500 -640 480 -640 434 -638 640 -493 500 -640 480 -640 506 -640 427 -640 427 -463 640 -640 360 -640 427 -640 619 -640 484 -375 500 -640 480 -538 640 -500 333 -640 429 -500 375 -500 488 -640 428 -640 427 -438 640 -640 480 -640 393 -640 427 -640 480 -500 330 -640 572 -500 366 -640 480 -640 425 -640 424 -640 478 -500 381 -640 427 -640 480 -640 399 -640 499 -640 426 -640 402 -375 500 -479 640 -500 335 -640 428 -640 428 -500 375 -640 480 -500 341 -640 483 -640 361 -424 640 -640 480 -640 427 -640 483 -640 427 -640 424 -640 480 -640 424 -480 640 -640 640 -427 640 -400 300 -640 480 -375 500 -640 480 -640 429 -500 332 -323 486 -640 480 -640 273 -640 427 -640 466 -640 506 -640 463 -640 480 -640 480 -640 640 -427 640 -640 480 -426 640 -640 480 -640 456 -480 640 -640 480 -640 480 -500 376 -500 375 -640 480 -480 640 -640 383 -640 480 -640 480 -420 640 -640 480 -640 427 -374 500 -640 471 -612 612 -640 480 -640 427 -640 480 -500 375 -640 480 -640 480 -640 427 -640 452 -640 402 -640 352 -640 427 -500 375 -640 480 -375 500 -640 640 -640 464 -427 640 -500 296 -376 500 -640 544 -480 640 -640 480 -500 332 -640 426 -640 426 -640 463 -640 426 -640 466 -640 480 -371 500 -500 640 -500 375 -333 500 -640 480 -500 333 -240 193 -480 640 -426 640 -640 424 -640 480 -640 480 -480 640 -571 640 -480 640 -640 640 -640 480 -375 500 -640 427 -428 640 -640 472 -640 428 -640 480 -377 500 -480 640 -640 426 -500 333 -480 640 -640 360 -640 478 -431 640 -536 640 -640 426 -640 424 -612 612 -480 640 -427 640 -640 480 -640 480 -640 427 -427 640 -425 640 -640 427 -500 375 -436 640 -640 427 -640 437 -333 500 -480 640 -612 612 -559 640 -640 427 -640 426 -640 480 -640 400 -640 406 -640 358 -640 424 -500 315 -640 426 -640 480 -640 427 -640 480 -640 424 -427 640 -398 500 -640 480 -500 313 -640 360 -640 480 -640 360 -640 480 -640 427 -640 426 -480 640 -640 456 -500 346 -500 475 -640 427 -640 427 -640 414 -428 640 -640 428 -428 640 -500 332 -426 640 -640 427 -480 640 -640 480 -640 480 -500 375 -500 375 -640 307 -640 480 -480 640 -640 472 -640 426 -426 640 -640 428 -427 640 -480 640 -480 640 -340 500 -640 480 -640 428 -640 502 -640 480 -640 457 -640 552 -640 359 -640 428 -500 375 -640 480 -480 640 -500 310 -524 640 -640 427 -640 427 -640 480 -500 375 -478 640 -640 480 -426 640 -640 433 -375 500 -640 616 -640 428 -640 480 -640 480 -500 334 -427 640 -640 429 -640 427 -640 480 -640 480 -640 480 -640 427 -640 480 -573 640 -427 640 -640 480 -640 427 -500 375 -640 480 -500 373 -478 640 -640 429 -371 500 -480 640 -640 440 -640 425 -640 480 -500 375 -427 640 -500 332 -427 640 -640 480 -334 500 -640 427 -640 427 -640 480 -428 640 -375 500 -640 427 -640 383 -427 640 -500 333 -640 427 -500 375 -427 640 -640 480 -640 425 -640 427 -640 427 -640 427 -640 358 -500 375 -640 427 -640 480 -640 480 -478 640 -480 640 -640 360 -640 480 -640 427 -480 640 -333 500 -640 427 -640 512 -640 480 -500 334 -480 640 -640 427 -583 640 -480 640 -640 480 -640 426 -640 427 -640 512 -480 640 -640 427 -640 480 -640 625 -462 640 -640 480 -640 480 -640 339 -640 427 -500 341 -640 427 -640 462 -500 375 -640 427 -500 375 -375 500 -640 427 -640 478 -640 480 -435 640 -640 426 -640 427 -427 640 -640 448 -640 426 -500 375 -640 426 -640 480 -640 427 -375 500 -640 427 -500 375 -488 640 -640 480 -640 426 -640 640 -480 640 -320 240 -640 483 -640 426 -640 489 -640 426 -640 359 -473 500 -640 480 -640 433 -612 612 -640 428 -640 457 -500 375 -413 500 -640 474 -640 458 -427 640 -375 500 -421 640 -640 427 -476 640 -568 640 -640 426 -640 425 -424 640 -500 324 -640 480 -640 427 -640 426 -500 375 -426 640 -640 480 -640 427 -375 500 -640 426 -640 640 -640 425 -640 480 -640 480 -640 480 -640 427 -612 612 -640 413 -640 480 -500 333 -640 498 -640 427 -302 500 -640 354 -424 640 -427 640 -480 640 -640 492 -428 640 -640 496 -640 428 -612 612 -480 640 -640 483 -640 480 -640 480 -640 480 -640 479 -640 427 -640 425 -640 426 -640 428 -500 375 -640 429 -640 429 -500 375 -480 640 -390 293 -480 640 -640 425 -444 640 -640 640 -500 375 -640 480 -640 427 -640 427 -500 499 -500 334 -640 480 -414 640 -500 375 -640 478 -486 640 -640 480 -478 640 -640 359 -640 480 -480 640 -640 480 -640 427 -640 480 -640 640 -500 500 -414 310 -640 428 -600 469 -640 459 -500 375 -640 480 -449 600 -640 427 -640 480 -480 640 -640 428 -640 426 -640 480 -426 640 -640 480 -640 424 -640 433 -640 480 -640 480 -640 434 -375 500 -640 480 -500 334 -640 428 -640 427 -427 640 -640 480 -640 480 -640 427 -640 427 -640 480 -640 480 -500 363 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -480 640 -640 480 -480 640 -640 480 -640 427 -500 281 -640 427 -426 640 -478 640 -640 480 -640 480 -640 427 -640 427 -573 640 -640 297 -500 333 -640 428 -640 480 -640 640 -480 640 -640 494 -640 427 -640 480 -428 640 -640 427 -427 640 -640 480 -500 375 -640 427 -500 372 -432 640 -640 426 -427 640 -640 427 -429 640 -640 393 -478 640 -640 426 -640 426 -500 332 -499 500 -640 484 -640 640 -640 424 -375 500 -500 375 -640 428 -640 426 -427 640 -500 333 -640 426 -612 612 -640 480 -640 427 -640 360 -640 480 -640 480 -539 640 -615 310 -480 640 -640 640 -640 453 -427 640 -640 513 -640 427 -640 480 -640 480 -640 403 -612 612 -500 375 -640 480 -640 427 -640 640 -640 480 -640 427 -480 640 -640 480 -640 480 -640 483 -640 480 -640 427 -500 375 -640 480 -640 490 -612 612 -612 612 -500 375 -640 478 -480 640 -480 640 -640 480 -640 480 -426 640 -640 478 -640 480 -640 425 -640 512 -426 640 -640 383 -640 427 -640 480 -458 640 -640 510 -480 640 -640 478 -640 426 -640 480 -640 427 -640 480 -640 412 -640 480 -640 428 -640 480 -640 426 -640 480 -500 375 -640 392 -640 427 -640 427 -480 640 -600 400 -640 426 -640 479 -640 425 -640 480 -640 480 -486 640 -426 640 -640 427 -640 426 -640 425 -640 360 -640 426 -427 640 -334 500 -500 375 -640 427 -640 427 -640 480 -581 640 -640 480 -640 480 -480 640 -640 427 -640 480 -640 427 -640 425 -640 480 -480 640 -640 427 -640 422 -640 426 -640 480 -480 640 -640 480 -640 480 -640 427 -640 360 -640 480 -640 427 -426 640 -542 640 -640 480 -640 482 -640 428 -480 640 -640 424 -375 500 -480 640 -427 640 -640 480 -640 480 -640 427 -640 427 -640 427 -427 640 -500 375 -480 640 -640 480 -375 500 -640 427 -640 480 -640 495 -640 409 -640 427 -640 480 -640 425 -640 361 -375 500 -480 640 -480 640 -500 500 -640 361 -480 640 -500 332 -640 427 -500 375 -480 640 -640 388 -500 375 -640 366 -640 480 -426 640 -640 428 -640 427 -640 428 -424 640 -500 375 -612 612 -640 480 -640 512 -640 427 -640 428 -480 640 -640 425 -640 480 -640 434 -640 451 -500 334 -640 430 -500 375 -640 480 -640 516 -640 480 -427 640 -480 640 -640 480 -640 425 -640 480 -640 480 -640 427 -640 427 -640 427 -640 480 -640 480 -640 381 -640 480 -640 401 -500 335 -640 361 -640 425 -429 640 -480 640 -512 640 -427 640 -640 640 -480 640 -500 375 -640 427 -480 640 -640 480 -640 429 -375 500 -640 506 -428 640 -640 427 -640 480 -640 577 -500 375 -640 559 -640 360 -480 640 -640 427 -612 612 -640 428 -640 512 -480 640 -640 424 -511 640 -500 375 -480 640 -640 429 -640 480 -640 640 -500 375 -640 426 -640 427 -640 481 -640 396 -640 426 -640 480 -500 375 -500 333 -480 640 -454 640 -333 500 -640 480 -640 447 -640 480 -640 427 -640 480 -640 480 -640 427 -640 200 -500 375 -640 480 -640 480 -640 427 -640 425 -640 427 -640 478 -426 640 -640 427 -357 500 -640 424 -640 480 -640 425 -640 426 -640 426 -640 480 -500 375 -480 640 -640 414 -500 346 -640 427 -478 640 -640 349 -640 427 -640 427 -640 638 -640 427 -512 640 -640 378 -640 425 -640 425 -500 375 -375 500 -640 425 -640 427 -640 480 -640 395 -640 348 -640 480 -640 480 -427 640 -500 375 -640 426 -500 340 -375 500 -640 480 -640 480 -640 480 -426 640 -480 640 -326 640 -640 427 -640 483 -640 424 -640 515 -640 425 -640 391 -480 640 -640 360 -640 427 -612 612 -640 424 -465 640 -480 640 -640 426 -494 500 -640 478 -640 427 -640 427 -640 427 -480 640 -640 558 -640 480 -500 334 -640 429 -640 480 -640 426 -640 506 -640 480 -640 640 -640 480 -640 480 -500 375 -640 427 -640 426 -640 426 -612 612 -640 428 -640 480 -640 480 -640 426 -427 640 -640 428 -640 427 -640 427 -640 480 -640 427 -640 480 -640 427 -612 612 -640 480 -640 480 -425 640 -640 427 -640 424 -640 427 -480 640 -640 480 -640 425 -500 332 -640 427 -640 640 -375 500 -427 640 -500 375 -640 480 -640 427 -500 334 -427 640 -424 640 -427 640 -640 339 -640 480 -640 427 -500 333 -481 640 -200 150 -640 480 -425 640 -640 480 -428 640 -640 480 -640 512 -600 400 -640 428 -640 480 -640 359 -428 640 -612 612 -640 480 -640 425 -640 480 -500 334 -429 640 -640 425 -640 427 -419 640 -640 480 -426 640 -612 612 -640 427 -640 427 -640 458 -375 500 -428 640 -500 375 -640 427 -480 640 -640 480 -480 640 -640 480 -500 375 -640 427 -480 640 -640 457 -500 333 -640 480 -640 483 -640 294 -640 427 -375 500 -640 480 -640 426 -640 427 -640 427 -640 426 -640 208 -640 424 -290 640 -640 480 -640 480 -640 480 -400 600 -640 424 -640 426 -640 480 -426 640 -640 426 -640 480 -427 640 -427 640 -640 480 -480 640 -640 441 -366 640 -640 427 -640 426 -500 375 -480 640 -375 500 -640 449 -640 480 -640 427 -457 640 -640 428 -480 640 -430 640 -480 640 -600 450 -640 453 -640 480 -640 238 -640 480 -640 428 -640 424 -500 375 -640 185 -640 427 -335 500 -640 478 -640 427 -427 640 -500 333 -640 480 -428 640 -640 480 -640 427 -386 640 -640 457 -640 480 -640 433 -640 429 -640 427 -640 480 -640 478 -640 480 -612 612 -640 428 -640 323 -640 439 -640 480 -640 493 -640 480 -427 640 -640 427 -640 455 -640 480 -640 425 -640 427 -375 500 -500 333 -640 480 -640 480 -640 480 -427 640 -480 640 -640 436 -375 500 -427 640 -640 427 -426 640 -457 640 -640 359 -640 480 -640 583 -640 424 -500 375 -441 640 -640 425 -640 426 -640 360 -427 640 -640 441 -640 426 -640 480 -640 427 -612 612 -640 425 -640 425 -640 427 -640 427 -640 480 -360 237 -375 500 -480 640 -524 640 -640 408 -427 640 -612 612 -640 480 -428 640 -640 480 -640 480 -640 426 -500 357 -500 364 -500 375 -640 423 -640 480 -640 427 -612 612 -640 484 -640 423 -544 640 -640 427 -640 480 -500 375 -500 500 -425 640 -426 640 -500 333 -480 640 -640 427 -402 640 -640 424 -341 280 -640 427 -640 512 -640 480 -640 491 -480 640 -640 480 -500 375 -640 480 -640 400 -500 333 -426 640 -640 427 -640 480 -500 375 -500 400 -500 375 -375 500 -640 479 -640 406 -640 514 -427 640 -640 222 -500 375 -459 640 -480 640 -640 425 -500 375 -640 427 -640 539 -640 425 -640 448 -640 427 -426 640 -500 323 -640 327 -427 640 -359 640 -640 428 -640 426 -640 425 -425 640 -424 640 -500 379 -427 640 -640 427 -375 500 -640 480 -640 480 -640 468 -640 480 -427 640 -640 480 -640 480 -640 426 -640 428 -640 426 -640 426 -640 480 -640 480 -640 403 -332 500 -500 333 -426 640 -640 458 -480 640 -500 375 -446 640 -640 480 -640 480 -640 384 -500 375 -640 426 -640 478 -500 375 -640 479 -500 375 -500 311 -640 543 -640 427 -500 375 -640 412 -480 640 -480 640 -375 500 -640 427 -640 427 -480 640 -640 426 -640 424 -480 640 -640 451 -640 427 -640 640 -640 448 -640 480 -640 480 -640 427 -640 427 -640 512 -640 480 -480 640 -640 481 -640 417 -640 425 -500 375 -640 563 -640 427 -640 426 -640 427 -640 427 -640 459 -640 459 -640 480 -640 438 -429 640 -640 545 -640 426 -612 612 -640 480 -640 428 -640 424 -640 427 -635 640 -640 417 -640 427 -480 360 -500 375 -500 375 -640 417 -640 360 -427 640 -500 375 -480 640 -640 389 -640 480 -640 480 -640 443 -640 427 -640 427 -640 427 -640 442 -512 640 -640 480 -494 640 -640 427 -612 612 -640 427 -612 612 -500 500 -640 427 -640 427 -640 427 -640 424 -480 640 -640 429 -640 356 -640 442 -640 458 -640 434 -640 427 -640 427 -480 640 -488 640 -640 480 -640 452 -427 640 -640 428 -640 425 -500 375 -427 640 -640 426 -640 480 -428 640 -483 640 -640 480 -640 429 -640 428 -640 480 -640 412 -640 427 -500 375 -427 640 -500 473 -640 640 -640 480 -640 427 -640 480 -640 429 -640 427 -426 640 -424 640 -640 400 -640 479 -640 490 -640 480 -480 640 -640 480 -500 333 -640 457 -640 427 -640 480 -428 640 -640 480 -640 425 -500 375 -640 279 -500 228 -640 480 -640 480 -640 480 -500 500 -640 456 -640 536 -500 375 -640 427 -640 478 -426 640 -480 640 -480 640 -500 400 -640 480 -480 640 -640 351 -640 480 -640 480 -640 427 -640 427 -640 480 -612 612 -640 360 -640 360 -640 332 -640 480 -500 349 -500 333 -640 386 -382 500 -500 375 -480 640 -614 640 -640 418 -500 375 -640 428 -640 640 -640 359 -640 480 -640 464 -541 640 -500 375 -640 426 -640 480 -640 427 -640 613 -500 349 -640 425 -500 375 -640 480 -480 640 -630 640 -640 427 -640 480 -640 480 -640 480 -500 375 -400 600 -500 375 -640 457 -640 461 -640 480 -640 480 -640 337 -512 640 -640 425 -427 640 -640 443 -640 640 -612 612 -500 375 -640 480 -640 425 -640 480 -640 428 -427 640 -640 512 -375 500 -480 640 -640 480 -640 524 -640 640 -640 480 -640 428 -640 480 -428 640 -640 363 -640 480 -640 445 -428 640 -640 480 -640 257 -640 281 -640 426 -426 640 -640 480 -640 425 -500 375 -640 426 -427 640 -375 500 -640 427 -640 359 -640 423 -640 427 -640 426 -640 480 -480 640 -640 480 -640 483 -640 480 -640 427 -640 427 -640 425 -640 359 -640 429 -604 640 -640 427 -500 500 -640 360 -640 480 -640 456 -640 485 -500 290 -640 480 -640 480 -480 640 -640 480 -640 426 -640 489 -478 640 -640 427 -640 427 -640 480 -640 480 -484 640 -640 480 -433 640 -640 480 -612 612 -640 480 -640 480 -480 640 -480 500 -426 640 -640 457 -640 425 -427 640 -640 480 -426 640 -487 640 -640 425 -421 640 -500 328 -375 500 -640 480 -335 500 -640 427 -640 427 -640 571 -376 500 -612 612 -500 500 -640 243 -640 479 -640 480 -533 640 -333 500 -640 639 -425 640 -640 516 -640 427 -480 640 -612 612 -640 426 -640 480 -480 640 -427 640 -640 428 -500 314 -640 480 -640 427 -427 640 -640 480 -500 309 -640 480 -480 640 -640 479 -640 427 -640 480 -640 480 -600 450 -640 428 -640 480 -480 640 -640 426 -640 480 -640 480 -640 427 -640 388 -428 640 -426 640 -500 375 -640 427 -640 480 -640 396 -640 480 -640 480 -640 426 -640 427 -640 427 -640 480 -640 480 -640 400 -640 427 -640 277 -500 333 -640 480 -640 424 -640 480 -640 480 -640 379 -640 480 -479 640 -375 500 -640 427 -498 640 -640 427 -480 640 -480 640 -640 427 -640 480 -427 640 -480 640 -640 480 -640 316 -640 427 -500 375 -640 427 -640 427 -458 640 -500 333 -500 499 -620 441 -640 425 -640 480 -640 448 -500 331 -528 640 -640 425 -480 640 -640 427 -193 225 -640 381 -640 427 -640 427 -640 430 -640 482 -640 469 -640 386 -640 425 -427 640 -640 480 -640 640 -640 480 -640 481 -425 640 -375 500 -640 427 -500 332 -640 427 -640 480 -640 480 -640 393 -427 640 -480 640 -640 427 -640 427 -480 640 -640 480 -640 502 -640 425 -500 375 -500 205 -502 640 -426 640 -640 480 -640 480 -640 428 -640 480 -640 427 -640 480 -640 428 -499 500 -500 373 -480 640 -480 640 -640 427 -640 480 -640 480 -640 427 -640 426 -640 640 -640 424 -640 427 -500 335 -640 480 -640 360 -640 480 -640 428 -640 483 -640 427 -640 557 -640 426 -640 478 -426 640 -640 480 -640 427 -427 640 -640 480 -480 640 -640 423 -640 459 -427 640 -500 333 -640 427 -500 375 -640 399 -612 612 -640 480 -640 480 -640 480 -500 375 -640 480 -500 310 -640 480 -640 425 -500 269 -612 612 -640 360 -640 480 -640 419 -640 427 -500 332 -640 480 -375 500 -500 357 -480 640 -640 427 -152 205 -640 426 -500 375 -640 424 -427 640 -640 427 -640 427 -480 640 -640 427 -640 480 -640 442 -480 640 -427 640 -500 333 -632 640 -500 337 -640 428 -375 500 -436 640 -640 428 -500 333 -640 480 -480 640 -640 480 -640 480 -640 360 -640 480 -640 466 -480 640 -640 427 -360 480 -640 480 -640 427 -500 348 -480 640 -640 426 -457 640 -640 427 -640 480 -640 480 -480 640 -640 426 -640 427 -360 640 -640 606 -612 612 -640 480 -640 480 -442 640 -640 427 -427 640 -640 428 -640 480 -640 480 -640 457 -612 612 -640 427 -500 375 -640 512 -640 480 -500 375 -640 428 -426 640 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -640 459 -640 426 -480 640 -640 425 -550 365 -640 359 -640 480 -640 480 -640 480 -640 427 -640 427 -640 425 -640 415 -464 640 -424 640 -640 480 -428 640 -640 353 -640 426 -640 427 -640 461 -640 378 -640 427 -640 254 -640 424 -640 424 -380 640 -427 640 -640 427 -640 427 -500 333 -640 480 -640 430 -427 640 -640 480 -612 612 -334 500 -640 427 -640 433 -640 480 -500 375 -640 427 -640 313 -478 640 -640 481 -480 640 -640 427 -529 640 -640 480 -640 480 -478 640 -640 448 -640 640 -640 427 -640 496 -640 480 -640 428 -640 480 -640 391 -640 427 -640 590 -500 167 -640 505 -427 640 -640 480 -640 480 -612 612 -640 329 -640 425 -612 612 -640 478 -640 360 -427 640 -640 465 -640 634 -640 636 -640 429 -427 640 -640 427 -640 480 -640 427 -480 640 -640 427 -640 480 -640 480 -357 500 -492 640 -640 360 -612 612 -640 480 -427 640 -427 640 -480 640 -640 429 -500 375 -500 375 -600 445 -500 314 -640 480 -640 428 -500 374 -640 426 -480 640 -640 482 -640 425 -640 480 -640 430 -546 640 -640 427 -640 480 -640 480 -640 480 -640 480 -415 500 -640 473 -640 480 -500 352 -640 428 -612 612 -640 477 -640 480 -640 480 -503 640 -480 640 -640 427 -480 640 -500 375 -640 480 -564 640 -424 640 -427 640 -640 426 -640 500 -640 480 -640 321 -612 612 -640 480 -640 360 -640 537 -640 428 -500 375 -640 427 -500 332 -376 500 -631 640 -373 500 -427 640 -640 427 -640 425 -640 427 -428 640 -500 375 -500 332 -640 480 -640 480 -640 424 -333 500 -640 424 -640 471 -640 478 -500 333 -640 414 -640 427 -640 480 -426 640 -640 427 -427 640 -427 640 -640 424 -640 480 -640 320 -640 480 -640 477 -427 640 -640 427 -640 457 -640 640 -612 612 -480 640 -500 332 -640 384 -427 640 -640 427 -640 433 -640 395 -640 480 -350 400 -500 375 -426 640 -640 427 -600 487 -500 375 -427 640 -427 640 -640 270 -640 480 -480 640 -375 500 -500 375 -640 479 -640 480 -375 500 -640 480 -640 354 -509 640 -480 640 -640 434 -487 640 -640 427 -480 640 -640 426 -640 428 -500 333 -640 427 -640 425 -500 375 -500 375 -640 427 -640 429 -640 458 -480 640 -477 640 -640 428 -640 427 -480 640 -640 427 -640 427 -640 480 -640 359 -640 391 -480 640 -640 425 -427 640 -640 640 -640 425 -640 616 -640 480 -360 640 -640 480 -640 480 -500 375 -427 640 -498 640 -640 432 -457 640 -640 480 -640 480 -640 427 -640 361 -640 380 -640 480 -640 479 -640 480 -640 494 -640 427 -640 428 -480 640 -427 640 -640 427 -640 427 -640 480 -640 480 -500 375 -640 425 -640 486 -640 480 -640 427 -640 467 -640 480 -426 640 -640 427 -640 401 -640 427 -640 429 -426 640 -640 480 -640 480 -480 640 -640 427 -640 413 -640 303 -640 427 -640 480 -640 441 -500 375 -334 500 -640 424 -640 426 -640 480 -640 426 -640 360 -427 640 -427 640 -500 371 -640 472 -640 314 -600 480 -427 640 -500 375 -480 640 -445 500 -640 480 -612 612 -482 294 -427 640 -640 427 -427 640 -640 425 -360 640 -640 480 -426 640 -539 640 -480 640 -500 375 -640 480 -493 640 -640 426 -426 640 -640 512 -640 364 -640 622 -500 375 -616 640 -640 425 -375 500 -640 359 -640 480 -640 480 -640 480 -640 426 -427 640 -640 449 -640 512 -640 425 -640 427 -640 425 -480 640 -480 640 -640 480 -640 480 -640 640 -640 438 -640 428 -640 346 -640 513 -480 640 -363 640 -424 640 -640 480 -640 480 -640 452 -640 512 -640 425 -500 375 -640 427 -640 427 -640 427 -640 427 -480 640 -640 451 -640 424 -640 478 -640 408 -640 427 -426 640 -640 348 -640 427 -640 360 -640 480 -640 469 -640 480 -640 480 -640 360 -500 375 -612 612 -500 375 -427 640 -640 425 -482 640 -640 480 -640 216 -640 480 -480 640 -640 427 -480 640 -640 478 -640 427 -640 426 -640 480 -640 480 -640 617 -640 427 -640 425 -640 466 -640 480 -640 480 -612 612 -427 640 -612 612 -640 383 -640 480 -426 640 -640 480 -500 375 -640 486 -640 640 -425 640 -612 612 -640 427 -640 438 -640 427 -640 426 -640 427 -480 640 -480 640 -427 640 -480 640 -640 480 -640 427 -612 612 -640 413 -640 480 -480 640 -500 486 -427 640 -640 427 -640 428 -640 426 -640 360 -640 427 -640 434 -418 640 -640 459 -640 481 -640 480 -612 612 -640 480 -640 480 -535 640 -640 480 -640 359 -480 640 -640 427 -640 404 -426 640 -640 480 -640 427 -640 478 -428 640 -640 427 -640 428 -640 427 -428 640 -640 568 -640 425 -428 640 -640 427 -640 480 -428 640 -640 426 -480 640 -500 375 -640 427 -640 480 -640 480 -640 424 -500 375 -640 512 -640 480 -480 640 -472 500 -448 640 -640 480 -640 427 -640 426 -640 427 -640 533 -640 480 -640 512 -640 480 -640 382 -640 424 -640 428 -500 375 -640 426 -640 428 -640 480 -640 427 -640 360 -480 640 -427 640 -640 480 -640 480 -640 426 -640 403 -640 480 -640 426 -640 480 -500 375 -640 372 -640 480 -640 480 -640 480 -500 375 -640 480 -361 500 -500 375 -640 480 -640 427 -640 428 -640 427 -640 480 -426 640 -640 480 -640 427 -640 424 -640 493 -640 426 -500 333 -640 448 -605 640 -500 333 -640 480 -500 500 -640 427 -426 640 -640 625 -640 419 -640 480 -640 478 -640 427 -640 427 -640 480 -640 427 -640 360 -640 427 -640 427 -443 460 -640 480 -500 333 -479 640 -640 381 -500 375 -640 480 -640 480 -360 640 -640 409 -427 640 -640 480 -640 480 -640 426 -640 425 -640 480 -640 480 -640 480 -425 640 -480 640 -640 427 -640 427 -640 480 -640 478 -640 426 -375 500 -640 427 -424 640 -640 427 -612 612 -640 253 -427 640 -425 640 -640 601 -500 366 -360 640 -425 640 -612 612 -640 425 -640 536 -424 640 -500 341 -500 339 -427 640 -640 427 -640 361 -640 480 -640 480 -290 359 -640 482 -427 640 -640 427 -640 427 -427 640 -640 480 -451 640 -640 480 -640 427 -640 427 -640 480 -480 640 -640 512 -640 480 -426 640 -640 360 -640 427 -500 375 -640 480 -612 612 -640 480 -640 400 -640 383 -640 480 -640 640 -500 333 -500 375 -375 500 -640 480 -640 481 -612 612 -640 304 -640 480 -640 480 -480 640 -640 480 -640 427 -500 383 -640 480 -500 383 -640 477 -612 612 -640 480 -426 640 -640 425 -640 480 -612 612 -480 640 -375 500 -640 480 -612 612 -640 428 -500 375 -640 454 -640 480 -640 457 -640 481 -640 359 -612 612 -427 640 -375 500 -375 500 -640 425 -640 404 -612 612 -427 640 -500 334 -640 383 -640 480 -400 300 -640 479 -457 640 -640 432 -333 500 -640 480 -640 480 -427 640 -375 500 -480 640 -640 427 -640 427 -640 425 -640 428 -500 375 -640 427 -469 640 -640 480 -640 480 -640 480 -427 640 -375 500 -333 500 -609 640 -640 427 -640 480 -612 612 -640 506 -373 500 -480 640 -640 480 -640 512 -500 380 -640 480 -612 612 -612 612 -640 427 -640 391 -640 469 -640 481 -640 434 -640 427 -640 480 -375 500 -640 427 -640 325 -640 595 -640 538 -640 512 -640 427 -640 480 -450 300 -640 427 -640 427 -500 375 -640 426 -640 426 -640 480 -640 424 -640 427 -640 482 -640 480 -640 427 -640 513 -640 427 -480 640 -480 640 -427 640 -370 640 -640 480 -640 426 -640 480 -640 427 -480 640 -640 427 -640 425 -640 427 -640 480 -612 612 -335 500 -640 412 -480 640 -480 640 -439 640 -500 382 -640 616 -640 480 -427 640 -640 427 -640 427 -500 189 -438 640 -480 640 -640 426 -640 480 -640 480 -640 427 -500 375 -500 333 -530 640 -640 424 -480 640 -426 640 -426 640 -640 428 -640 426 -640 425 -375 500 -640 424 -500 333 -427 640 -427 640 -435 640 -640 483 -640 315 -640 427 -427 640 -640 360 -640 512 -640 383 -375 500 -478 640 -640 340 -640 426 -640 428 -640 427 -640 480 -250 312 -640 480 -640 427 -640 431 -640 425 -640 426 -640 428 -640 490 -500 375 -640 427 -640 480 -480 640 -640 427 -427 640 -640 427 -480 640 -612 612 -512 640 -640 428 -500 357 -640 480 -640 480 -640 427 -427 640 -640 427 -640 427 -640 427 -640 425 -640 480 -640 480 -612 612 -640 480 -428 640 -500 375 -640 537 -500 333 -640 480 -383 640 -500 375 -370 277 -640 427 -640 404 -640 451 -640 483 -500 375 -640 426 -480 640 -640 427 -480 640 -375 500 -640 427 -640 480 -640 425 -640 366 -428 640 -640 452 -640 426 -425 640 -640 361 -640 381 -640 428 -500 375 -640 360 -426 640 -500 334 -640 427 -500 375 -640 424 -640 427 -500 375 -640 428 -375 500 -640 424 -480 640 -480 640 -375 500 -640 427 -640 480 -640 475 -427 640 -640 423 -640 427 -640 480 -480 640 -640 423 -354 640 -600 450 -480 640 -612 612 -640 427 -375 500 -640 421 -640 408 -480 640 -480 640 -500 375 -640 427 -640 480 -640 360 -640 480 -640 480 -640 640 -640 480 -378 640 -480 640 -375 500 -640 426 -640 423 -375 500 -640 426 -640 425 -500 375 -480 640 -360 640 -640 425 -422 640 -640 427 -640 480 -481 640 -427 640 -640 427 -640 214 -640 426 -500 281 -640 485 -640 425 -640 425 -640 480 -500 375 -640 427 -375 500 -640 480 -640 427 -427 640 -640 513 -640 480 -382 500 -640 428 -640 480 -640 480 -640 564 -640 427 -483 640 -500 321 -640 480 -500 333 -500 347 -480 640 -333 500 -640 427 -640 426 -612 612 -640 427 -640 480 -478 640 -640 427 -640 479 -640 478 -640 427 -640 427 -640 425 -640 457 -333 500 -632 640 -480 640 -640 428 -500 334 -640 363 -452 640 -640 480 -427 640 -640 425 -640 480 -500 486 -640 480 -426 640 -640 381 -426 640 -640 428 -640 481 -640 453 -375 500 -500 338 -640 427 -640 424 -640 480 -640 640 -640 480 -500 375 -640 326 -640 446 -640 427 -376 342 -640 427 -640 512 -500 375 -640 427 -480 640 -640 426 -640 426 -426 640 -640 427 -640 426 -640 427 -640 427 -640 360 -597 640 -640 427 -640 427 -640 480 -640 353 -640 447 -640 427 -368 500 -480 640 -640 425 -640 480 -500 332 -640 480 -640 480 -333 500 -640 426 -640 426 -640 426 -640 480 -500 375 -640 480 -640 427 -404 500 -640 480 -500 375 -640 400 -640 446 -640 233 -480 640 -427 640 -500 375 -640 425 -640 436 -640 480 -320 240 -640 480 -640 451 -640 405 -593 395 -427 640 -640 379 -640 480 -640 427 -432 640 -640 425 -640 427 -640 428 -640 480 -480 640 -500 375 -640 450 -640 480 -428 640 -426 640 -640 419 -375 500 -640 480 -640 427 -640 480 -640 456 -640 436 -500 500 -427 640 -640 427 -334 500 -640 566 -612 612 -640 445 -500 375 -480 640 -640 424 -640 480 -640 434 -640 427 -500 375 -640 480 -480 640 -500 333 -480 640 -640 425 -640 480 -640 480 -334 500 -640 480 -428 640 -640 480 -640 427 -480 320 -480 640 -640 355 -640 411 -500 375 -640 425 -461 615 -640 486 -480 640 -640 427 -640 480 -640 427 -640 373 -500 341 -640 427 -640 480 -640 427 -424 640 -640 480 -640 425 -640 480 -640 208 -640 543 -640 434 -640 480 -428 640 -500 375 -640 480 -640 480 -640 466 -500 375 -640 480 -500 384 -640 426 -640 427 -640 424 -640 480 -640 480 -500 500 -640 427 -480 640 -640 428 -640 427 -640 481 -500 439 -640 458 -640 426 -500 375 -640 425 -640 437 -640 469 -640 426 -640 427 -480 640 -640 480 -640 425 -640 427 -640 481 -640 428 -640 480 -640 426 -612 612 -640 480 -500 476 -500 416 -640 427 -640 450 -424 640 -640 480 -640 428 -640 426 -425 640 -640 479 -640 480 -640 427 -640 427 -426 640 -360 640 -640 425 -519 640 -640 427 -640 441 -640 640 -468 640 -375 500 -500 375 -640 397 -640 480 -427 640 -500 375 -427 640 -500 375 -640 449 -640 215 -640 480 -640 479 -640 480 -640 480 -640 509 -500 375 -427 640 -640 425 -640 428 -640 480 -640 480 -640 480 -640 638 -640 480 -640 480 -640 480 -640 348 -640 454 -640 430 -640 480 -427 640 -640 425 -640 480 -640 400 -426 640 -640 457 -640 427 -398 500 -640 480 -640 480 -427 640 -640 427 -480 640 -640 428 -640 480 -640 427 -640 427 -640 480 -500 313 -640 427 -332 500 -480 640 -640 480 -424 640 -640 480 -480 640 -480 640 -427 640 -423 640 -640 427 -428 640 -640 479 -640 480 -459 640 -640 480 -640 427 -640 480 -500 375 -640 426 -640 480 -640 427 -640 423 -640 480 -640 640 -426 640 -640 427 -500 375 -500 333 -640 428 -640 480 -640 426 -375 500 -640 427 -640 360 -640 481 -640 426 -500 431 -640 427 -640 480 -640 424 -640 399 -640 426 -640 452 -427 640 -334 500 -333 500 -314 500 -640 326 -349 640 -640 407 -526 640 -640 426 -434 640 -640 427 -426 640 -500 333 -640 425 -640 480 -640 480 -640 427 -640 436 -640 360 -482 484 -500 375 -640 480 -427 640 -500 375 -640 426 -500 334 -640 588 -427 640 -640 480 -640 425 -640 426 -640 480 -358 373 -344 500 -640 427 -561 640 -500 375 -426 640 -427 640 -640 480 -522 640 -640 480 -500 359 -640 640 -640 480 -640 480 -640 480 -475 640 -500 376 -640 427 -640 480 -640 411 -640 480 -640 486 -500 368 -500 375 -640 392 -640 429 -478 640 -640 480 -334 500 -640 428 -640 432 -612 612 -640 427 -640 480 -383 640 -640 480 -640 480 -539 640 -427 640 -640 480 -480 640 -640 424 -640 426 -640 426 -480 640 -500 375 -480 640 -640 360 -640 426 -640 426 -640 426 -640 427 -640 424 -640 383 -430 500 -640 480 -600 450 -500 375 -640 480 -640 427 -640 640 -640 426 -640 480 -640 480 -500 333 -426 640 -333 500 -640 480 -640 426 -500 332 -480 640 -640 480 -640 480 -426 640 -640 480 -500 375 -480 640 -500 208 -640 478 -612 612 -640 631 -640 480 -500 364 -640 640 -640 305 -449 640 -640 409 -640 426 -640 480 -640 480 -640 427 -640 427 -640 422 -426 640 -640 480 -640 428 -481 640 -500 375 -640 337 -640 480 -500 374 -640 480 -640 416 -500 375 -640 427 -640 427 -480 640 -427 640 -640 436 -640 480 -428 640 -426 640 -640 446 -640 592 -640 480 -640 360 -640 427 -640 480 -375 500 -640 427 -375 500 -333 500 -640 428 -427 640 -640 480 -500 375 -640 360 -600 400 -480 640 -500 331 -640 475 -640 427 -500 375 -640 427 -640 425 -426 640 -640 381 -640 427 -243 360 -480 640 -500 400 -640 480 -640 480 -640 359 -640 427 -640 426 -640 640 -640 427 -640 425 -640 454 -640 425 -640 427 -640 480 -439 640 -640 480 -640 480 -640 480 -639 640 -640 333 -640 480 -427 640 -640 480 -640 435 -640 480 -640 480 -640 478 -640 480 -640 445 -500 334 -640 480 -640 428 -640 427 -640 427 -500 375 -640 425 -640 429 -640 480 -640 427 -472 640 -640 480 -640 360 -640 424 -640 361 -640 480 -640 431 -640 426 -640 428 -640 480 -500 333 -640 427 -640 425 -640 425 -640 480 -486 640 -426 640 -640 480 -500 375 -480 640 -640 480 -427 640 -640 479 -640 409 -640 480 -640 480 -640 427 -640 480 -640 427 -427 640 -500 375 -480 640 -427 640 -500 375 -640 480 -640 481 -500 357 -640 480 -375 500 -640 425 -640 480 -480 640 -640 480 -640 457 -640 480 -424 640 -640 383 -640 480 -640 492 -640 480 -640 480 -427 640 -480 640 -640 427 -428 640 -640 427 -640 480 -640 480 -640 427 -612 612 -640 480 -640 425 -640 427 -427 640 -480 640 -640 480 -500 375 -500 366 -640 480 -640 484 -500 375 -640 427 -640 480 -640 420 -500 333 -640 480 -640 385 -640 426 -640 427 -500 325 -640 500 -427 640 -640 426 -640 480 -500 376 -640 480 -500 375 -640 427 -555 640 -640 427 -640 404 -480 640 -640 480 -427 640 -541 640 -640 359 -640 427 -427 640 -640 427 -640 426 -640 427 -600 600 -640 424 -640 427 -640 424 -640 480 -480 640 -640 480 -640 495 -500 375 -640 479 -500 376 -640 489 -333 500 -490 640 -500 375 -640 628 -640 427 -640 427 -640 433 -640 427 -640 424 -640 480 -416 500 -640 569 -428 640 -480 640 -480 640 -427 640 -640 450 -427 640 -500 375 -640 427 -500 375 -640 480 -640 427 -640 434 -640 424 -640 426 -640 425 -640 480 -440 640 -640 480 -640 425 -640 480 -500 375 -640 480 -640 480 -640 480 -480 640 -500 426 -640 480 -640 480 -640 480 -640 484 -480 640 -640 471 -426 640 -427 640 -640 427 -500 375 -640 480 -640 426 -640 479 -640 427 -481 640 -640 428 -480 640 -640 480 -640 427 -640 640 -640 428 -500 333 -640 427 -640 424 -333 500 -640 424 -640 478 -640 480 -640 427 -480 640 -640 428 -640 480 -640 480 -331 500 -426 640 -640 424 -640 427 -640 360 -640 424 -427 640 -640 480 -480 640 -640 427 -640 360 -640 393 -640 428 -640 427 -640 424 -333 500 -480 640 -640 424 -640 640 -640 426 -640 429 -640 426 -640 599 -640 480 -480 640 -640 480 -640 408 -375 500 -640 430 -425 640 -640 426 -375 500 -427 640 -640 480 -640 427 -426 640 -640 396 -480 640 -640 360 -640 599 -640 479 -640 425 -480 640 -640 480 -640 480 -640 427 -640 427 -640 427 -425 500 -480 640 -640 448 -383 640 -640 480 -427 640 -640 480 -425 640 -640 477 -640 427 -333 500 -640 480 -500 375 -500 333 -640 427 -640 534 -640 480 -640 426 -640 480 -640 426 -640 480 -500 377 -640 480 -480 640 -640 480 -640 429 -640 426 -480 640 -640 478 -640 360 -500 333 -640 480 -640 428 -425 640 -640 480 -640 480 -500 375 -612 612 -500 333 -640 480 -640 479 -640 376 -640 480 -640 508 -640 425 -640 427 -500 467 -500 375 -294 500 -640 640 -640 480 -433 640 -480 640 -640 640 -500 351 -640 427 -640 427 -640 334 -640 428 -429 640 -457 640 -640 480 -500 436 -500 356 -640 425 -612 612 -500 493 -305 640 -640 480 -640 480 -640 480 -640 427 -640 427 -510 640 -424 640 -470 300 -640 480 -640 466 -640 480 -640 480 -640 360 -640 427 -408 640 -480 320 -640 427 -640 480 -500 375 -495 640 -500 379 -426 640 -640 480 -640 426 -640 513 -500 375 -479 640 -640 480 -500 375 -640 478 -480 640 -500 375 -640 480 -640 429 -500 375 -427 640 -640 427 -640 426 -640 425 -640 609 -640 360 -594 447 -640 443 -640 427 -500 375 -640 480 -640 426 -500 375 -640 480 -612 612 -500 375 -640 481 -640 360 -480 640 -640 478 -631 640 -640 427 -640 480 -640 477 -640 480 -640 480 -429 640 -500 375 -640 571 -640 640 -640 480 -640 427 -640 426 -640 524 -640 480 -640 427 -640 394 -612 612 -640 421 -640 426 -480 640 -640 480 -640 640 -457 640 -640 427 -640 248 -427 640 -640 480 -640 426 -427 640 -500 400 -500 375 -640 480 -500 376 -640 506 -640 480 -512 640 -640 480 -640 427 -640 480 -640 427 -480 640 -427 640 -640 425 -500 379 -640 361 -426 640 -500 375 -640 480 -478 640 -640 427 -484 640 -640 427 -500 375 -455 640 -480 640 -500 335 -640 396 -326 500 -640 427 -640 426 -640 425 -549 640 -640 480 -640 426 -640 480 -427 640 -640 424 -640 480 -425 640 -480 640 -640 329 -640 480 -480 640 -500 384 -400 400 -640 480 -640 424 -640 386 -640 360 -640 427 -640 480 -640 427 -640 480 -640 426 -640 480 -480 640 -427 640 -500 375 -640 540 -640 428 -640 425 -640 427 -640 480 -333 500 -563 640 -640 640 -626 526 -640 428 -640 480 -640 427 -640 360 -500 331 -427 640 -640 423 -640 483 -426 640 -640 480 -640 480 -640 480 -427 640 -640 427 -640 640 -500 375 -640 360 -518 640 -426 640 -640 458 -640 427 -640 427 -640 480 -640 593 -640 522 -375 500 -481 640 -640 480 -640 480 -640 403 -427 640 -480 640 -423 640 -426 640 -640 490 -500 375 -640 425 -640 480 -480 640 -640 360 -640 173 -640 480 -640 480 -480 640 -615 640 -640 426 -640 427 -480 640 -480 640 -640 480 -640 512 -640 380 -640 640 -500 400 -500 375 -640 480 -640 426 -640 427 -640 432 -402 500 -640 480 -480 640 -640 480 -597 640 -640 292 -640 426 -640 480 -640 480 -480 640 -640 431 -612 612 -640 427 -640 478 -640 480 -546 640 -640 427 -500 375 -478 640 -640 481 -640 439 -640 426 -640 486 -427 640 -640 427 -427 640 -500 375 -500 375 -640 505 -640 235 -640 428 -640 425 -640 427 -640 480 -478 640 -640 426 -640 427 -640 480 -640 478 -480 640 -512 640 -612 612 -640 427 -480 640 -500 333 -640 424 -375 500 -640 587 -379 335 -640 480 -640 414 -640 426 -400 500 -613 640 -640 480 -427 640 -640 356 -640 480 -480 640 -640 480 -640 480 -640 480 -640 427 -640 640 -640 425 -491 500 -640 478 -480 640 -489 500 -500 375 -640 480 -380 640 -334 500 -429 480 -640 417 -640 427 -640 480 -640 429 -640 426 -461 640 -425 640 -640 480 -640 480 -640 427 -640 427 -448 640 -640 480 -640 427 -640 480 -480 640 -640 429 -427 640 -640 427 -612 612 -640 427 -640 427 -427 640 -500 375 -640 478 -640 429 -582 640 -640 480 -453 640 -640 426 -640 431 -640 427 -640 478 -612 612 -500 410 -360 640 -640 425 -427 640 -640 426 -640 427 -561 640 -640 427 -640 426 -640 427 -640 427 -640 428 -640 480 -640 427 -640 427 -538 640 -573 640 -500 364 -640 426 -467 500 -640 451 -640 427 -640 424 -432 324 -640 428 -640 480 -640 427 -640 437 -334 500 -640 576 -640 430 -640 480 -640 555 -500 375 -500 375 -640 480 -425 640 -500 357 -640 427 -640 427 -640 480 -640 427 -640 427 -427 640 -461 640 -640 480 -425 640 -500 335 -640 480 -375 500 -500 400 -640 427 -640 427 -640 480 -427 640 -640 480 -640 427 -640 480 -448 299 -500 375 -640 426 -640 427 -480 640 -480 640 -640 401 -375 500 -640 480 -640 427 -612 612 -640 484 -640 480 -640 427 -426 640 -480 640 -480 640 -640 429 -640 426 -640 427 -640 480 -640 427 -480 640 -640 480 -426 640 -640 427 -640 480 -640 320 -500 375 -640 640 -427 640 -640 480 -423 640 -640 480 -640 414 -640 506 -480 640 -480 640 -640 367 -640 351 -300 400 -640 322 -640 428 -500 382 -640 428 -640 480 -640 481 -640 427 -425 640 -640 425 -514 640 -640 480 -500 368 -640 360 -640 466 -640 503 -640 427 -500 282 -640 427 -640 427 -640 396 -480 640 -480 640 -640 425 -428 640 -500 333 -640 480 -500 333 -640 427 -640 480 -612 612 -480 640 -640 478 -640 480 -640 428 -640 427 -332 500 -640 427 -480 640 -640 426 -480 640 -640 480 -640 428 -640 429 -640 282 -640 493 -640 389 -375 500 -640 428 -640 427 -500 375 -480 640 -640 480 -640 480 -640 426 -640 400 -640 640 -375 500 -640 480 -428 640 -414 500 -640 544 -640 640 -640 427 -640 427 -480 640 -427 640 -640 480 -484 640 -375 500 -427 640 -640 360 -640 480 -619 640 -640 480 -480 640 -640 640 -640 429 -427 640 -640 480 -640 424 -640 480 -640 428 -425 640 -500 326 -640 427 -428 640 -640 589 -640 426 -480 640 -640 480 -500 500 -500 375 -480 640 -480 640 -500 332 -640 427 -640 428 -640 480 -500 375 -640 446 -640 480 -640 480 -427 640 -640 480 -640 403 -590 590 -500 346 -640 426 -640 428 -640 480 -500 375 -489 640 -400 500 -640 428 -640 359 -640 480 -480 640 -640 424 -424 640 -640 427 -426 640 -640 480 -640 427 -640 478 -640 480 -478 640 -500 374 -427 640 -640 424 -640 480 -640 427 -640 480 -612 612 -640 396 -640 427 -500 375 -640 546 -640 408 -640 480 -640 426 -500 334 -640 428 -640 480 -640 489 -480 640 -480 640 -640 480 -640 480 -640 427 -500 336 -640 427 -500 375 -480 640 -640 427 -640 428 -500 376 -640 480 -500 336 -640 480 -640 426 -500 334 -480 360 -640 480 -640 402 -424 640 -480 640 -640 480 -640 480 -612 612 -640 518 -640 484 -427 640 -612 612 -640 480 -480 640 -485 500 -375 500 -565 640 -426 640 -375 500 -640 603 -640 480 -427 640 -640 517 -625 640 -640 388 -480 640 -500 332 -512 640 -640 427 -612 612 -630 640 -640 601 -640 480 -640 506 -480 640 -640 426 -640 427 -640 480 -640 427 -428 640 -640 427 -333 500 -500 333 -640 480 -500 375 -640 480 -640 480 -640 480 -640 429 -500 333 -640 427 -640 427 -640 478 -640 458 -640 480 -500 335 -427 640 -397 567 -640 480 -480 640 -640 427 -640 427 -640 480 -429 640 -640 425 -640 640 -640 428 -640 480 -500 332 -640 383 -480 640 -612 612 -480 640 -640 426 -640 480 -445 640 -640 427 -500 375 -640 427 -640 329 -640 480 -640 480 -640 492 -640 427 -640 480 -640 454 -640 360 -640 427 -425 640 -640 480 -640 242 -480 640 -640 425 -640 480 -640 461 -640 480 -640 423 -640 480 -640 480 -640 631 -640 582 -480 640 -500 375 -640 480 -640 480 -640 428 -640 429 -640 480 -640 425 -640 480 -640 480 -640 480 -640 480 -368 500 -640 401 -640 480 -427 640 -640 480 -640 428 -640 457 -640 425 -480 640 -640 480 -500 333 -640 480 -640 427 -640 481 -640 427 -480 640 -640 480 -500 335 -500 329 -427 640 -640 427 -640 427 -640 427 -640 480 -640 457 -500 375 -640 428 -431 640 -640 423 -640 640 -640 524 -428 640 -640 426 -640 428 -640 426 -640 425 -375 500 -500 175 -500 500 -448 640 -640 429 -612 612 -640 480 -640 427 -640 480 -640 480 -640 384 -640 514 -640 480 -640 427 -640 427 -403 604 -640 512 -640 480 -612 612 -500 331 -640 427 -640 259 -500 375 -500 375 -640 480 -640 427 -640 426 -640 480 -640 299 -640 425 -640 427 -640 512 -479 640 -500 333 -640 427 -640 512 -640 373 -480 640 -500 375 -640 427 -640 424 -500 375 -640 429 -425 640 -480 640 -399 640 -640 480 -640 482 -500 322 -640 480 -640 480 -640 508 -640 424 -640 480 -640 489 -480 640 -640 427 -640 458 -640 466 -640 480 -500 375 -640 424 -500 387 -640 480 -427 640 -640 495 -426 640 -640 480 -640 480 -480 640 -640 408 -480 640 -480 640 -640 480 -426 640 -640 480 -640 424 -640 427 -640 478 -640 478 -640 474 -375 500 -640 480 -640 427 -640 480 -448 336 -500 345 -460 500 -640 480 -640 480 -360 640 -640 386 -640 344 -428 640 -480 640 -500 412 -640 427 -640 480 -640 480 -500 332 -640 427 -640 572 -640 480 -640 387 -500 333 -445 640 -480 640 -640 423 -500 366 -640 359 -480 640 -640 426 -612 612 -500 375 -480 640 -640 480 -640 361 -640 480 -640 431 -640 427 -640 426 -640 427 -480 640 -640 230 -640 361 -640 480 -640 483 -640 480 -500 375 -480 640 -640 458 -640 640 -640 480 -640 426 -480 360 -640 427 -640 480 -640 482 -640 425 -640 410 -640 480 -640 458 -640 370 -640 426 -640 480 -500 375 -640 480 -424 640 -500 333 -640 427 -500 375 -494 640 -640 427 -480 640 -640 480 -640 427 -640 400 -333 500 -375 500 -500 333 -480 640 -640 427 -640 426 -640 480 -500 333 -640 480 -473 640 -640 480 -480 640 -600 400 -640 480 -640 403 -480 640 -480 640 -500 375 -500 375 -480 640 -500 375 -579 640 -640 426 -480 640 -640 404 -640 480 -640 480 -640 426 -640 426 -640 512 -640 480 -640 427 -500 333 -427 640 -640 427 -640 360 -426 640 -640 480 -640 480 -425 640 -591 640 -500 500 -640 427 -428 640 -640 380 -640 480 -640 480 -640 480 -640 426 -640 171 -500 375 -458 640 -640 426 -500 448 -640 424 -640 427 -612 612 -500 384 -333 500 -640 480 -640 360 -519 640 -640 427 -500 375 -500 375 -640 480 -425 640 -640 512 -640 549 -640 400 -640 480 -480 640 -640 640 -464 640 -640 426 -640 353 -480 640 -640 427 -640 463 -500 375 -480 640 -500 375 -474 640 -640 428 -480 384 -640 480 -640 480 -640 439 -508 640 -612 612 -640 427 -640 480 -640 402 -640 338 -640 361 -500 374 -640 427 -640 480 -640 416 -452 500 -612 612 -640 640 -375 500 -480 640 -640 480 -640 428 -500 344 -640 427 -640 480 -640 427 -640 427 -640 424 -640 480 -640 425 -640 471 -640 480 -640 431 -640 427 -640 480 -640 512 -640 480 -640 480 -640 427 -640 480 -425 640 -640 427 -640 441 -640 480 -480 640 -640 427 -640 360 -500 375 -640 425 -481 640 -640 421 -640 480 -450 640 -640 454 -640 425 -427 640 -640 360 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -640 480 -427 640 -424 640 -640 480 -640 461 -500 154 -480 640 -375 500 -640 427 -640 480 -581 640 -426 640 -640 480 -512 640 -425 640 -640 428 -500 332 -640 427 -640 427 -640 478 -640 433 -640 463 -640 444 -640 360 -640 480 -480 640 -640 429 -640 426 -640 480 -334 500 -640 425 -640 434 -640 640 -640 640 -640 359 -640 480 -640 427 -640 424 -640 482 -640 480 -500 324 -640 428 -640 371 -640 427 -360 640 -640 480 -427 640 -640 427 -640 173 -640 480 -640 426 -640 487 -375 500 -640 480 -500 334 -500 375 -334 500 -640 426 -640 480 -640 480 -480 640 -640 480 -480 640 -640 426 -640 480 -640 483 -640 427 -385 640 -640 478 -640 480 -640 427 -640 359 -640 480 -640 427 -640 480 -640 480 -640 640 -640 480 -640 425 -603 640 -640 512 -640 480 -640 424 -640 640 -640 427 -640 482 -500 332 -640 401 -640 480 -640 426 -640 480 -640 425 -335 246 -640 480 -240 363 -480 640 -500 375 -640 480 -500 375 -640 426 -640 428 -640 427 -375 500 -640 421 -480 640 -500 375 -604 453 -640 427 -640 478 -400 600 -480 640 -640 640 -612 612 -640 427 -228 500 -640 462 -640 487 -272 480 -640 480 -480 640 -640 427 -427 640 -435 640 -375 500 -640 480 -640 427 -640 452 -640 428 -427 640 -500 231 -375 500 -640 480 -563 640 -640 479 -426 640 -640 360 -428 640 -640 608 -640 361 -640 480 -640 427 -640 480 -480 640 -375 500 -640 640 -640 426 -640 353 -640 480 -491 500 -640 424 -640 470 -640 337 -640 468 -640 480 -640 432 -640 502 -640 360 -640 480 -456 640 -499 640 -640 480 -425 640 -640 399 -640 480 -425 640 -640 480 -640 426 -500 319 -640 427 -500 335 -426 640 -640 478 -375 500 -426 640 -640 478 -468 298 -640 640 -612 612 -640 421 -500 375 -426 640 -640 640 -500 338 -428 640 -500 333 -480 640 -329 497 -640 640 -500 500 -640 431 -505 640 -640 425 -500 375 -480 640 -480 640 -612 612 -379 640 -640 425 -640 479 -640 427 -640 480 -637 640 -500 336 -500 375 -640 425 -640 426 -640 306 -640 514 -640 640 -333 500 -640 427 -480 640 -612 612 -640 480 -640 480 -421 640 -640 480 -429 640 -640 480 -612 612 -640 480 -640 480 -640 425 -516 640 -480 640 -480 640 -640 427 -640 426 -640 480 -640 426 -640 428 -640 480 -640 425 -480 640 -640 480 -480 440 -500 394 -426 640 -612 612 -500 375 -500 334 -500 394 -640 427 -640 480 -640 480 -640 480 -640 427 -640 428 -500 375 -640 480 -427 640 -640 478 -375 500 -640 426 -389 640 -640 480 -480 640 -640 427 -500 334 -426 640 -500 375 -640 427 -640 426 -640 406 -640 480 -640 478 -640 401 -428 640 -640 424 -375 500 -640 427 -640 480 -640 427 -426 640 -640 427 -480 640 -640 427 -640 633 -375 500 -640 429 -640 426 -640 518 -640 480 -640 427 -640 426 -640 426 -640 480 -500 366 -375 500 -480 640 -640 591 -640 480 -640 427 -640 426 -459 500 -500 335 -640 427 -640 364 -640 427 -640 578 -640 459 -480 640 -640 480 -467 352 -500 500 -640 480 -640 426 -640 360 -640 480 -640 480 -640 429 -480 640 -640 311 -480 640 -563 422 -640 474 -640 360 -640 427 -640 426 -640 480 -500 375 -640 417 -640 427 -480 640 -640 480 -154 205 -500 375 -640 480 -640 427 -640 418 -480 640 -640 530 -375 500 -431 640 -500 375 -640 480 -500 334 -640 416 -640 353 -427 640 -429 640 -640 480 -640 480 -640 480 -480 640 -640 480 -500 334 -640 427 -478 640 -640 427 -500 375 -500 332 -640 480 -640 480 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -640 480 -612 612 -640 379 -640 427 -333 500 -640 453 -640 426 -640 425 -375 500 -640 480 -640 427 -480 640 -640 427 -640 437 -478 640 -424 640 -480 640 -480 640 -478 640 -427 640 -640 583 -480 640 -640 424 -480 640 -375 500 -640 428 -640 426 -640 427 -375 500 -640 428 -427 640 -480 640 -640 427 -623 640 -640 480 -640 480 -640 480 -500 333 -640 425 -480 640 -463 640 -480 640 -640 426 -500 333 -640 427 -640 480 -612 612 -478 640 -640 427 -640 480 -640 480 -424 640 -640 478 -640 427 -640 480 -612 612 -640 480 -427 640 -640 428 -500 375 -334 500 -426 640 -333 500 -640 459 -640 427 -640 427 -640 427 -640 428 -480 640 -640 480 -500 333 -427 640 -500 333 -640 427 -500 375 -427 640 -558 640 -500 375 -373 500 -640 480 -640 480 -640 480 -500 249 -480 640 -500 367 -640 427 -640 480 -640 480 -640 427 -480 640 -640 480 -480 640 -604 453 -640 429 -512 640 -640 360 -640 339 -631 640 -425 640 -640 427 -640 480 -640 425 -640 480 -640 480 -427 640 -612 612 -480 640 -640 408 -470 640 -640 426 -500 281 -640 480 -640 428 -640 426 -375 500 -640 426 -375 500 -640 427 -640 427 -427 640 -640 480 -427 640 -640 427 -640 480 -640 338 -640 480 -640 602 -640 428 -480 640 -640 427 -500 329 -424 640 -375 500 -640 480 -640 406 -480 640 -500 375 -640 427 -512 640 -471 640 -640 424 -480 640 -640 443 -640 360 -640 427 -640 480 -480 640 -640 480 -500 434 -431 640 -640 427 -640 480 -480 360 -500 300 -640 426 -432 640 -640 480 -640 424 -640 480 -427 640 -427 640 -640 425 -640 427 -640 480 -640 427 -640 428 -432 288 -640 426 -500 332 -640 471 -640 348 -480 640 -480 640 -640 480 -320 240 -612 612 -640 427 -500 375 -333 500 -640 427 -640 480 -479 640 -640 480 -500 343 -640 622 -640 427 -640 426 -273 500 -480 640 -640 424 -480 640 -375 640 -612 612 -500 375 -640 480 -640 573 -480 640 -640 427 -640 480 -640 480 -640 426 -640 458 -640 426 -375 500 -500 375 -640 401 -640 480 -422 640 -640 426 -500 336 -640 412 -640 427 -640 480 -428 640 -427 640 -320 240 -427 640 -640 480 -640 480 -640 478 -640 480 -640 427 -500 375 -612 612 -479 640 -640 454 -640 427 -640 480 -640 427 -640 480 -500 375 -640 480 -500 375 -303 500 -640 427 -612 612 -486 640 -480 640 -640 428 -640 426 -480 640 -383 640 -640 480 -480 640 -640 424 -640 428 -640 409 -640 427 -640 480 -640 428 -500 500 -640 427 -556 640 -427 640 -640 480 -320 240 -640 640 -500 332 -640 480 -640 427 -612 612 -640 480 -640 480 -480 640 -456 640 -612 612 -640 400 -640 426 -640 410 -640 360 -439 640 -640 480 -612 612 -640 426 -640 480 -441 640 -500 310 -640 427 -640 427 -640 468 -640 427 -500 375 -640 480 -640 480 -427 640 -612 612 -480 640 -480 640 -640 427 -640 480 -640 427 -500 375 -640 480 -640 480 -640 427 -640 480 -480 640 -500 375 -640 427 -640 480 -612 612 -500 335 -640 428 -640 427 -640 425 -640 360 -640 480 -640 427 -640 480 -640 424 -640 480 -640 427 -640 427 -640 428 -640 426 -640 423 -640 468 -640 483 -640 616 -640 480 -640 427 -427 640 -640 480 -640 427 -640 427 -640 480 -640 490 -448 336 -480 640 -480 640 -333 500 -640 431 -640 591 -640 480 -640 427 -500 490 -640 480 -640 427 -640 442 -640 480 -640 480 -640 428 -640 427 -640 480 -640 427 -640 427 -640 427 -640 482 -640 361 -640 426 -640 397 -624 640 -640 427 -640 426 -640 480 -640 480 -500 375 -640 480 -514 640 -500 333 -640 480 -640 406 -328 500 -640 480 -500 356 -640 428 -640 480 -640 426 -640 427 -640 427 -640 464 -640 427 -640 480 -500 333 -640 480 -640 480 -640 480 -640 480 -375 207 -640 427 -640 480 -640 366 -458 640 -640 427 -640 426 -640 480 -481 640 -640 480 -640 425 -640 471 -500 333 -640 426 -500 375 -640 478 -640 427 -612 612 -640 484 -500 331 -500 284 -526 640 -426 640 -640 480 -640 426 -640 427 -640 427 -640 376 -640 480 -386 500 -640 425 -640 425 -374 500 -640 416 -640 499 -480 640 -640 427 -457 640 -640 480 -579 640 -640 511 -640 480 -640 428 -500 354 -500 375 -640 480 -426 640 -640 394 -640 426 -520 373 -480 640 -640 480 -480 640 -640 480 -640 480 -500 346 -640 480 -593 640 -640 480 -344 500 -640 393 -500 375 -480 640 -640 480 -500 458 -640 425 -480 640 -640 426 -640 480 -500 375 -438 640 -640 480 -640 427 -500 333 -612 612 -640 480 -500 408 -640 427 -640 480 -427 640 -640 427 -640 480 -640 427 -640 457 -640 427 -640 405 -480 640 -640 480 -640 426 -640 426 -500 343 -500 401 -427 640 -574 640 -640 480 -335 500 -500 375 -640 480 -640 480 -640 427 -640 480 -640 427 -640 564 -640 542 -500 500 -640 409 -480 640 -612 612 -428 640 -640 426 -640 480 -640 427 -640 424 -640 633 -640 480 -640 426 -640 480 -640 361 -640 426 -640 266 -640 424 -500 307 -640 480 -425 640 -500 368 -568 640 -640 453 -640 427 -640 503 -500 375 -640 374 -640 359 -640 427 -640 448 -426 640 -640 480 -400 500 -500 333 -640 427 -640 426 -640 427 -640 601 -640 427 -640 513 -640 480 -640 425 -427 640 -640 480 -640 426 -500 375 -640 427 -427 640 -640 480 -500 425 -500 340 -640 427 -640 480 -640 359 -640 478 -640 480 -427 640 -640 360 -640 376 -640 460 -640 406 -640 480 -640 427 -612 612 -500 375 -419 640 -640 588 -640 428 -480 640 -375 500 -640 427 -640 480 -640 480 -640 423 -640 480 -640 480 -640 513 -640 640 -640 361 -640 498 -640 426 -640 480 -640 427 -500 375 -640 427 -270 360 -457 640 -426 640 -386 640 -501 640 -479 640 -640 634 -640 426 -640 480 -521 640 -640 426 -428 640 -640 426 -500 375 -640 427 -640 360 -427 640 -640 480 -640 427 -431 259 -640 426 -640 604 -600 386 -393 500 -640 426 -640 478 -640 425 -612 612 -332 500 -639 640 -500 640 -640 448 -500 333 -500 333 -640 480 -640 427 -640 427 -500 349 -640 435 -640 424 -640 512 -500 333 -640 426 -640 480 -640 480 -480 640 -500 449 -640 480 -640 480 -640 427 -640 481 -480 640 -500 375 -640 425 -640 478 -500 330 -640 554 -640 479 -640 480 -640 480 -640 348 -640 427 -640 480 -640 480 -640 427 -640 425 -624 640 -640 480 -640 424 -531 640 -640 381 -640 480 -640 428 -640 427 -640 437 -393 500 -374 500 -640 480 -640 443 -640 480 -640 480 -640 428 -640 428 -640 443 -500 334 -640 427 -500 346 -640 430 -640 427 -640 427 -500 375 -640 354 -480 640 -640 428 -640 480 -360 640 -640 480 -426 640 -640 391 -640 478 -640 512 -640 480 -500 375 -276 410 -500 375 -480 640 -478 640 -427 640 -640 422 -640 425 -640 480 -640 426 -640 480 -640 480 -640 426 -640 520 -640 426 -640 480 -640 488 -612 612 -333 500 -640 480 -500 375 -640 427 -281 500 -640 426 -640 480 -413 500 -640 427 -640 480 -640 480 -640 427 -640 428 -503 640 -640 427 -640 359 -640 480 -640 425 -640 425 -640 427 -428 640 -640 480 -640 182 -640 427 -500 375 -479 640 -612 612 -480 640 -640 480 -640 480 -600 400 -640 427 -640 386 -640 480 -640 480 -375 500 -640 480 -640 480 -427 640 -640 427 -640 480 -640 396 -480 640 -640 480 -640 427 -480 640 -480 640 -640 360 -500 375 -640 543 -640 427 -640 465 -640 426 -360 640 -640 369 -640 480 -640 428 -640 480 -640 475 -403 500 -480 640 -640 410 -500 333 -480 640 -640 480 -640 427 -426 640 -640 480 -424 640 -640 336 -480 640 -640 427 -500 333 -480 640 -500 390 -640 442 -612 612 -640 541 -612 612 -401 500 -612 612 -640 427 -640 428 -640 426 -640 427 -640 425 -640 480 -375 500 -640 427 -640 427 -640 480 -640 418 -640 425 -427 640 -426 640 -640 480 -640 425 -375 500 -640 427 -640 427 -640 360 -500 400 -640 427 -640 480 -640 427 -426 640 -361 640 -640 427 -640 480 -640 480 -427 640 -640 480 -375 500 -480 640 -640 425 -640 480 -500 375 -640 480 -640 427 -640 427 -426 640 -640 426 -640 480 -640 427 -480 640 -640 427 -424 640 -640 428 -480 640 -480 640 -457 640 -640 480 -480 640 -500 334 -640 480 -426 640 -640 452 -500 333 -640 544 -640 428 -423 640 -640 427 -640 428 -480 640 -640 427 -640 480 -612 612 -640 427 -480 640 -500 375 -640 427 -640 428 -425 640 -391 640 -397 640 -640 480 -640 425 -640 480 -427 640 -640 480 -425 640 -640 480 -375 500 -500 335 -640 416 -640 427 -640 495 -640 427 -640 428 -500 375 -640 427 -640 425 -640 333 -480 640 -500 333 -425 640 -640 428 -640 640 -640 424 -640 427 -500 640 -640 427 -640 426 -640 427 -640 478 -640 457 -640 425 -640 480 -640 480 -500 331 -494 640 -640 480 -640 428 -375 500 -428 640 -500 281 -640 480 -640 426 -640 425 -640 427 -640 478 -640 414 -640 427 -449 640 -640 426 -479 640 -640 519 -640 479 -640 427 -480 640 -500 333 -640 427 -494 500 -640 427 -640 480 -640 552 -500 375 -480 640 -640 504 -640 480 -480 640 -569 640 -500 333 -640 480 -640 435 -640 480 -500 375 -640 427 -640 480 -500 375 -480 640 -640 480 -640 640 -398 640 -640 427 -640 424 -640 425 -341 500 -640 359 -640 422 -640 491 -640 503 -640 429 -640 480 -414 640 -640 480 -640 529 -640 480 -640 513 -640 478 -640 427 -375 500 -640 480 -640 480 -480 360 -640 640 -375 500 -640 480 -640 480 -480 640 -640 608 -640 480 -640 427 -640 480 -640 359 -640 480 -500 375 -500 375 -640 427 -640 480 -500 375 -640 426 -500 500 -640 532 -640 480 -612 612 -640 532 -612 612 -426 640 -500 332 -500 375 -640 480 -640 450 -458 640 -640 291 -640 427 -640 480 -640 429 -500 333 -640 480 -640 360 -640 427 -640 426 -640 480 -640 480 -480 640 -640 425 -480 640 -500 375 -476 640 -500 328 -640 480 -640 458 -640 480 -640 427 -640 360 -640 424 -640 411 -457 640 -640 558 -572 640 -427 640 -640 427 -427 640 -640 349 -640 480 -427 640 -640 427 -640 428 -640 360 -428 640 -640 360 -480 640 -640 425 -640 508 -640 640 -640 426 -640 491 -640 480 -612 612 -480 640 -640 427 -640 480 -640 426 -640 480 -500 463 -640 480 -640 480 -640 480 -640 419 -640 479 -640 480 -640 480 -500 375 -640 381 -640 425 -640 428 -480 640 -450 286 -640 480 -640 427 -600 450 -640 480 -640 428 -640 480 -640 480 -640 426 -640 427 -500 375 -640 480 -500 375 -500 375 -640 425 -640 308 -640 424 -480 640 -478 640 -427 640 -375 500 -640 428 -500 375 -434 640 -640 480 -640 480 -500 293 -640 427 -640 488 -640 427 -640 427 -640 427 -480 640 -640 426 -480 640 -640 424 -640 427 -424 640 -640 480 -640 480 -640 480 -494 640 -427 640 -640 348 -356 500 -640 480 -375 500 -431 640 -500 365 -640 428 -612 612 -640 489 -640 480 -480 640 -640 480 -640 424 -640 428 -640 480 -640 479 -640 427 -640 427 -480 640 -500 325 -640 427 -640 432 -640 427 -640 444 -427 640 -640 427 -425 640 -480 640 -640 433 -480 640 -640 409 -640 480 -640 427 -375 500 -333 500 -640 468 -480 640 -640 480 -640 471 -640 463 -640 429 -640 480 -640 402 -640 478 -472 640 -100 144 -640 428 -640 425 -640 481 -640 386 -640 480 -640 480 -640 427 -640 463 -480 640 -425 640 -500 333 -640 427 -640 480 -640 480 -640 424 -500 375 -640 482 -640 427 -640 427 -640 544 -640 427 -640 611 -480 640 -612 612 -640 480 -640 480 -640 480 -444 640 -640 427 -640 479 -253 640 -480 640 -640 480 -612 612 -640 478 -640 480 -640 427 -427 640 -640 480 -640 480 -427 640 -640 488 -520 640 -612 612 -640 427 -640 426 -640 480 -480 640 -640 407 -640 480 -640 480 -500 375 -480 640 -399 640 -640 480 -427 640 -640 384 -360 640 -457 640 -640 334 -640 426 -428 640 -640 425 -640 480 -640 427 -640 426 -396 640 -480 640 -640 427 -640 480 -640 480 -480 640 -640 480 -640 426 -640 417 -640 480 -640 513 -640 427 -640 426 -640 480 -640 485 -640 480 -640 360 -457 640 -640 427 -640 405 -640 360 -640 480 -640 199 -640 480 -640 428 -640 480 -640 426 -482 640 -640 433 -640 480 -640 640 -640 427 -640 480 -640 408 -548 640 -640 426 -480 640 -480 640 -612 612 -640 427 -640 640 -640 481 -360 640 -640 457 -640 480 -640 426 -640 426 -640 426 -426 640 -500 335 -640 461 -640 427 -640 480 -640 427 -630 640 -640 424 -640 215 -640 429 -640 429 -640 480 -640 480 -640 427 -640 478 -480 640 -640 479 -640 480 -640 426 -640 480 -640 427 -640 480 -640 480 -640 426 -640 480 -640 427 -640 428 -480 640 -612 612 -480 640 -424 640 -640 427 -612 612 -500 500 -640 427 -640 427 -500 375 -640 480 -427 640 -640 427 -500 375 -480 640 -640 480 -640 480 -426 640 -640 480 -640 480 -518 640 -640 462 -427 640 -640 427 -500 333 -500 375 -640 480 -427 640 -480 640 -640 480 -481 640 -640 480 -640 480 -500 375 -425 640 -480 640 -426 640 -427 640 -320 240 -640 427 -640 480 -640 480 -640 425 -640 480 -478 640 -640 427 -640 426 -640 456 -640 480 -480 640 -480 640 -640 640 -334 500 -640 428 -640 449 -500 375 -640 394 -640 480 -500 257 -426 640 -640 426 -427 640 -640 479 -640 427 -426 640 -640 506 -478 640 -480 640 -640 480 -500 333 -640 425 -640 480 -640 424 -400 500 -640 428 -375 500 -427 640 -640 315 -640 480 -334 500 -480 640 -480 640 -480 640 -640 480 -640 427 -640 480 -640 428 -296 640 -640 426 -500 333 -500 472 -431 640 -461 640 -640 480 -500 403 -640 427 -640 428 -640 480 -426 640 -500 375 -480 640 -500 375 -500 375 -640 427 -640 285 -640 428 -480 640 -640 427 -480 640 -640 427 -640 428 -640 427 -640 480 -640 427 -640 427 -333 500 -500 375 -512 640 -640 426 -640 480 -640 427 -612 612 -500 375 -640 427 -425 640 -640 443 -480 640 -640 487 -428 640 -332 500 -640 360 -640 482 -640 480 -640 426 -480 640 -640 427 -640 368 -640 480 -427 640 -425 640 -640 480 -500 335 -500 333 -424 640 -640 428 -454 640 -640 640 -640 480 -640 480 -640 427 -640 480 -640 427 -334 500 -640 579 -480 640 -640 383 -640 428 -640 480 -640 478 -640 426 -640 444 -640 569 -464 640 -631 640 -640 480 -640 428 -640 427 -640 480 -640 360 -640 480 -612 612 -426 640 -640 480 -427 640 -640 427 -640 480 -640 480 -640 480 -640 640 -426 640 -429 600 -500 375 -640 480 -500 375 -480 640 -640 480 -640 427 -640 480 -612 612 -640 481 -640 323 -640 429 -612 612 -640 480 -640 425 -640 360 -500 332 -640 480 -640 426 -500 375 -640 640 -480 640 -640 480 -640 480 -640 428 -640 480 -640 429 -640 640 -640 514 -333 500 -640 480 -516 640 -640 427 -640 422 -640 427 -640 427 -640 427 -480 640 -612 612 -640 480 -363 500 -500 375 -500 374 -429 640 -640 425 -427 640 -640 480 -640 480 -640 425 -640 480 -640 596 -640 429 -640 480 -640 473 -640 341 -640 427 -480 640 -600 591 -640 480 -500 375 -500 357 -480 359 -338 500 -640 486 -640 426 -640 480 -540 477 -471 640 -640 427 -500 311 -500 326 -427 640 -640 480 -640 480 -510 640 -640 480 -500 375 -640 314 -640 426 -500 332 -640 426 -640 480 -640 480 -640 396 -344 500 -480 640 -640 526 -640 480 -639 640 -612 612 -640 461 -500 375 -640 427 -640 426 -640 425 -640 428 -640 564 -640 428 -500 375 -640 416 -640 438 -640 480 -640 480 -640 480 -478 640 -480 640 -427 640 -640 424 -339 500 -640 467 -640 480 -640 480 -640 428 -428 640 -640 426 -400 600 -500 222 -640 640 -640 429 -640 360 -640 480 -640 427 -500 375 -480 640 -383 640 -640 424 -500 375 -640 426 -640 480 -640 426 -640 445 -512 640 -640 395 -640 424 -640 482 -640 427 -640 512 -640 480 -640 424 -640 426 -640 480 -640 480 -640 425 -480 640 -427 640 -640 427 -500 375 -640 445 -640 501 -640 426 -640 480 -612 612 -640 427 -375 500 -640 480 -640 427 -640 427 -640 424 -334 500 -500 333 -500 357 -640 480 -640 429 -640 427 -640 480 -580 377 -640 499 -426 640 -640 609 -640 480 -640 333 -479 640 -541 640 -640 496 -640 359 -640 427 -612 612 -640 473 -375 500 -640 427 -427 640 -480 640 -612 612 -480 640 -640 393 -500 332 -424 640 -500 414 -640 473 -640 253 -500 473 -640 426 -640 416 -640 427 -414 640 -640 427 -640 427 -640 427 -640 480 -640 480 -640 480 -640 427 -612 612 -640 480 -640 427 -640 480 -640 480 -640 324 -480 640 -640 361 -640 424 -320 240 -640 427 -480 640 -640 425 -640 550 -640 640 -640 480 -640 429 -640 480 -640 491 -640 426 -640 368 -384 640 -640 427 -480 640 -640 427 -640 426 -428 640 -640 480 -427 640 -640 384 -640 448 -640 444 -640 320 -640 427 -640 427 -612 612 -640 480 -480 640 -640 427 -425 640 -640 480 -640 373 -640 425 -500 375 -640 480 -617 640 -640 427 -640 640 -640 480 -364 640 -442 500 -640 480 -500 377 -640 486 -640 550 -640 426 -640 427 -640 491 -640 380 -640 425 -640 411 -480 640 -640 427 -640 480 -640 383 -640 461 -640 416 -640 426 -640 427 -427 640 -640 480 -433 640 -480 640 -612 612 -480 640 -640 427 -500 331 -500 375 -640 427 -640 480 -480 640 -480 640 -640 480 -640 427 -640 360 -500 336 -640 427 -640 407 -640 438 -640 427 -427 640 -481 640 -480 640 -640 480 -640 480 -320 240 -640 424 -640 508 -640 399 -480 640 -640 320 -640 480 -480 640 -294 196 -640 464 -427 640 -334 640 -480 640 -640 480 -500 375 -640 428 -640 426 -640 427 -500 335 -640 426 -640 640 -426 640 -640 428 -640 388 -480 640 -640 320 -480 640 -640 480 -640 480 -640 428 -333 500 -500 375 -640 424 -480 640 -569 640 -640 278 -500 375 -480 640 -640 424 -640 480 -640 427 -640 428 -640 360 -640 426 -456 640 -640 426 -640 426 -427 640 -427 640 -640 427 -640 480 -640 427 -510 640 -640 480 -640 475 -640 480 -640 417 -640 480 -640 480 -640 427 -640 426 -640 427 -426 640 -640 480 -640 427 -640 398 -640 480 -640 462 -333 500 -640 475 -375 500 -480 640 -500 341 -640 285 -640 480 -480 640 -640 427 -480 640 -426 640 -640 427 -640 640 -640 425 -640 426 -640 480 -480 640 -333 500 -640 383 -375 500 -640 480 -640 636 -427 640 -480 640 -640 480 -500 399 -500 332 -640 304 -640 480 -427 640 -640 480 -640 480 -512 640 -427 640 -500 391 -500 422 -433 640 -334 500 -640 640 -640 425 -424 640 -640 427 -640 400 -375 500 -640 427 -640 640 -640 424 -427 640 -529 640 -640 480 -640 393 -640 427 -640 480 -500 374 -500 333 -640 480 -425 640 -612 612 -640 480 -480 640 -480 640 -480 640 -480 640 -500 375 -500 153 -500 333 -640 426 -640 483 -640 480 -640 480 -640 427 -640 480 -640 427 -640 427 -640 438 -640 428 -634 640 -640 343 -640 529 -640 425 -640 426 -500 247 -640 425 -640 496 -480 640 -500 332 -640 478 -500 375 -480 640 -640 480 -640 427 -640 366 -640 438 -437 500 -389 540 -640 428 -640 480 -640 480 -360 640 -640 427 -478 640 -640 480 -500 334 -640 480 -640 427 -581 640 -640 480 -427 640 -640 400 -640 425 -640 480 -640 480 -640 443 -640 480 -640 427 -640 456 -640 427 -640 427 -640 484 -478 640 -640 480 -480 640 -640 480 -500 375 -640 430 -640 482 -640 427 -640 480 -640 426 -427 640 -427 640 -640 359 -640 480 -640 426 -640 399 -640 427 -445 640 -333 500 -640 425 -640 425 -480 640 -500 335 -424 640 -640 480 -480 640 -427 640 -500 334 -640 426 -640 480 -640 480 -640 480 -640 472 -490 367 -500 335 -640 480 -640 418 -612 612 -640 508 -640 480 -640 427 -640 360 -500 379 -640 427 -640 480 -640 427 -640 480 -640 424 -500 433 -480 640 -480 640 -640 480 -640 480 -640 426 -480 640 -640 428 -500 375 -640 144 -640 480 -640 425 -585 329 -483 640 -640 502 -640 425 -640 360 -640 480 -500 333 -640 480 -640 484 -640 383 -480 640 -640 480 -640 480 -640 424 -640 480 -640 427 -612 612 -383 640 -640 429 -640 485 -640 427 -500 276 -640 539 -640 480 -640 427 -640 478 -640 491 -480 640 -640 427 -640 480 -640 426 -640 425 -640 427 -640 480 -640 424 -480 640 -612 612 -640 426 -640 425 -640 359 -480 640 -640 368 -500 333 -480 640 -500 500 -640 480 -640 480 -640 425 -640 480 -640 456 -640 427 -640 480 -640 425 -640 427 -500 500 -484 640 -640 480 -447 640 -640 427 -525 640 -640 426 -640 480 -353 500 -500 375 -640 480 -640 359 -640 480 -640 396 -640 463 -640 480 -640 495 -640 427 -611 640 -480 640 -426 640 -640 446 -480 640 -427 640 -612 612 -640 480 -427 640 -640 423 -457 640 -640 423 -640 427 -640 480 -427 640 -640 480 -480 640 -640 427 -542 588 -640 425 -480 640 -428 640 -640 425 -640 427 -634 640 -640 480 -480 640 -640 426 -583 640 -640 480 -427 640 -640 480 -640 526 -500 321 -511 640 -640 480 -640 480 -640 480 -640 478 -640 425 -640 480 -640 428 -640 426 -426 640 -640 424 -427 640 -640 425 -640 426 -640 480 -640 425 -546 366 -640 427 -500 375 -640 427 -351 500 -640 425 -500 375 -640 427 -640 480 -480 640 -640 360 -640 480 -500 375 -480 640 -640 427 -427 640 -488 500 -369 640 -640 405 -500 375 -640 640 -640 427 -481 640 -360 640 -640 425 -640 427 -640 428 -480 640 -640 480 -484 640 -640 429 -500 400 -335 500 -640 428 -640 429 -500 333 -500 341 -428 640 -640 427 -640 427 -640 605 -640 640 -640 425 -640 360 -640 480 -427 640 -640 480 -480 640 -600 448 -640 480 -320 480 -424 640 -640 427 -427 640 -640 480 -429 640 -640 373 -427 640 -640 480 -426 640 -500 338 -640 490 -612 612 -640 426 -640 427 -640 428 -480 640 -480 640 -640 428 -640 427 -640 533 -640 553 -640 480 -427 640 -640 480 -640 426 -500 441 -480 640 -640 427 -640 480 -640 353 -640 308 -640 423 -480 640 -640 427 -640 427 -640 480 -400 300 -500 375 -500 347 -400 300 -640 480 -612 612 -640 486 -640 426 -640 433 -640 483 -612 612 -500 375 -640 480 -426 640 -640 425 -640 425 -640 425 -640 360 -640 480 -409 640 -640 480 -640 427 -640 480 -640 480 -636 636 -640 419 -640 452 -640 427 -640 480 -640 480 -640 479 -427 640 -640 427 -640 427 -640 406 -425 640 -333 500 -427 640 -640 427 -480 640 -500 375 -500 375 -391 500 -640 404 -640 480 -640 427 -640 480 -640 427 -640 360 -640 428 -640 426 -500 333 -640 480 -612 612 -428 640 -640 427 -480 640 -500 299 -640 457 -640 640 -640 427 -640 426 -640 439 -500 375 -640 391 -640 426 -640 426 -500 333 -375 500 -640 426 -640 424 -424 640 -640 427 -500 192 -426 640 -640 480 -640 480 -640 480 -640 438 -505 640 -640 405 -640 426 -427 640 -640 487 -500 375 -427 640 -640 427 -640 480 -640 480 -640 480 -640 480 -479 640 -428 640 -480 640 -640 427 -640 360 -640 427 -640 321 -640 480 -640 427 -640 480 -426 640 -640 456 -640 427 -640 373 -640 480 -640 480 -640 480 -640 426 -640 427 -640 382 -640 458 -640 484 -640 480 -640 478 -640 427 -640 362 -319 500 -640 480 -640 193 -640 480 -640 366 -640 480 -427 640 -640 430 -640 478 -429 640 -500 333 -612 612 -640 480 -640 427 -375 500 -640 427 -640 378 -640 173 -500 375 -640 480 -374 500 -462 640 -500 375 -640 480 -640 426 -448 640 -436 640 -640 480 -640 427 -640 338 -640 480 -427 640 -640 511 -640 480 -640 480 -640 427 -640 427 -480 640 -640 427 -500 333 -640 424 -427 640 -500 375 -427 640 -640 480 -640 480 -640 428 -640 427 -640 505 -498 640 -640 426 -640 480 -640 480 -640 480 -640 468 -640 480 -640 562 -640 424 -430 640 -640 480 -640 428 -640 480 -427 640 -428 640 -427 640 -480 640 -424 640 -640 427 -640 480 -640 425 -480 640 -500 375 -640 480 -480 640 -500 500 -333 500 -640 480 -600 450 -640 360 -500 375 -424 640 -331 500 -640 480 -426 640 -640 478 -612 612 -640 424 -640 480 -640 427 -426 640 -640 359 -640 424 -640 427 -640 427 -640 427 -480 640 -640 375 -360 640 -320 480 -640 508 -640 427 -640 480 -599 640 -640 480 -640 480 -640 480 -640 429 -500 375 -640 480 -640 427 -640 480 -428 640 -640 480 -480 640 -426 640 -640 427 -640 456 -640 480 -640 480 -478 640 -427 640 -500 496 -428 640 -640 427 -640 425 -334 500 -481 640 -640 427 -640 426 -640 480 -471 500 -640 506 -640 424 -480 640 -640 427 -640 444 -426 640 -640 480 -640 480 -640 428 -640 431 -640 431 -640 480 -500 333 -640 427 -427 640 -640 512 -640 480 -512 640 -640 359 -640 640 -640 428 -640 426 -640 640 -500 375 -640 519 -480 640 -640 375 -427 640 -640 215 -640 429 -360 640 -640 480 -640 425 -434 640 -640 480 -640 480 -640 429 -640 427 -612 612 -640 426 -640 423 -480 640 -640 558 -640 427 -640 429 -640 427 -480 640 -640 480 -640 480 -419 640 -640 426 -640 480 -640 427 -640 480 -284 500 -640 346 -640 400 -640 480 -640 425 -612 612 -640 480 -640 360 -640 480 -425 640 -640 427 -640 426 -500 375 -640 412 -640 480 -573 640 -640 427 -612 612 -640 423 -480 640 -640 360 -426 640 -640 480 -383 640 -640 427 -480 640 -640 480 -640 480 -500 376 -640 426 -480 640 -640 556 -640 427 -428 640 -640 428 -427 640 -375 500 -640 360 -500 375 -375 500 -640 481 -640 480 -640 480 -500 375 -640 480 -640 480 -640 640 -454 640 -640 477 -640 421 -480 640 -640 427 -640 480 -500 333 -640 426 -640 480 -640 425 -640 426 -640 424 -640 579 -640 383 -640 640 -640 485 -640 426 -427 640 -640 479 -344 500 -640 480 -640 480 -427 640 -640 478 -600 450 -640 428 -640 427 -640 426 -427 640 -640 427 -640 480 -640 480 -480 640 -480 640 -640 480 -500 375 -427 640 -450 338 -500 375 -640 480 -640 448 -500 330 -640 428 -500 375 -640 480 -612 612 -457 640 -386 640 -480 640 -640 480 -480 640 -640 427 -640 492 -450 640 -480 640 -427 640 -478 640 -640 480 -640 424 -500 375 -612 612 -480 640 -480 640 -640 427 -640 640 -640 427 -480 640 -333 500 -480 640 -640 480 -640 426 -480 640 -500 375 -640 383 -640 480 -640 427 -640 506 -640 427 -640 511 -453 640 -640 428 -640 480 -640 439 -640 640 -640 426 -640 418 -453 640 -568 640 -386 500 -479 640 -640 428 -640 426 -480 640 -640 268 -640 427 -640 431 -640 439 -640 480 -480 640 -640 360 -640 427 -500 333 -428 640 -640 480 -612 612 -640 503 -640 427 -640 478 -425 640 -425 640 -480 640 -640 480 -430 640 -427 640 -640 427 -640 393 -640 480 -640 480 -333 500 -399 500 -640 480 -480 640 -640 480 -640 360 -640 480 -640 427 -480 360 -640 296 -640 428 -640 427 -640 480 -640 558 -640 426 -640 563 -640 480 -640 425 -640 424 -640 480 -640 480 -640 427 -640 427 -402 402 -640 428 -640 429 -640 462 -640 427 -640 480 -480 640 -640 226 -640 480 -493 640 -573 640 -424 640 -640 408 -375 500 -500 375 -640 640 -640 427 -640 480 -424 640 -640 427 -640 480 -640 423 -640 427 -640 480 -640 426 -500 366 -640 480 -517 640 -480 640 -640 427 -640 458 -480 640 -640 412 -640 497 -640 480 -500 338 -640 480 -640 425 -640 459 -375 500 -640 480 -640 412 -500 375 -640 640 -640 427 -640 480 -640 480 -640 640 -427 640 -640 425 -640 428 -640 480 -500 375 -640 427 -500 333 -314 500 -640 478 -640 480 -640 480 -640 427 -442 640 -480 640 -428 640 -500 375 -500 383 -640 480 -480 640 -640 427 -640 426 -640 400 -640 424 -640 325 -384 500 -640 480 -640 480 -640 426 -375 500 -640 428 -500 376 -478 640 -640 480 -640 424 -480 640 -640 480 -480 640 -501 640 -640 425 -640 480 -640 480 -500 333 -640 480 -500 400 -640 342 -640 480 -500 375 -640 273 -640 277 -500 335 -640 480 -500 375 -427 640 -640 328 -500 263 -375 500 -640 425 -640 480 -480 640 -640 480 -640 426 -424 640 -500 332 -640 480 -500 375 -318 500 -484 640 -640 486 -640 480 -640 429 -500 375 -640 425 -640 400 -640 480 -500 333 -640 640 -640 480 -640 480 -640 426 -467 371 -333 500 -640 480 -640 480 -640 389 -640 427 -640 425 -640 426 -349 640 -480 640 -640 424 -500 333 -640 427 -640 481 -640 426 -500 375 -640 518 -494 389 -640 480 -640 480 -640 513 -640 426 -500 393 -500 188 -640 427 -640 427 -500 375 -427 640 -332 500 -480 640 -640 470 -640 480 -640 288 -640 480 -640 480 -640 480 -640 425 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -640 427 -480 640 -640 323 -640 480 -561 640 -640 480 -640 427 -640 427 -500 467 -640 427 -375 500 -480 640 -640 480 -428 640 -640 480 -640 480 -640 480 -500 375 -640 427 -640 428 -478 640 -640 426 -640 428 -640 360 -442 640 -478 640 -500 332 -640 426 -640 480 -500 375 -640 427 -495 640 -640 425 -640 427 -640 466 -640 479 -640 469 -640 551 -640 480 -640 480 -640 425 -640 427 -640 424 -640 480 -640 417 -640 480 -640 483 -640 480 -335 500 -640 640 -640 427 -640 480 -425 640 -640 427 -448 336 -425 640 -480 640 -640 400 -640 480 -640 509 -640 427 -500 294 -429 640 -640 360 -640 481 -640 426 -480 640 -640 428 -640 425 -640 426 -396 640 -500 335 -640 480 -640 425 -640 480 -480 640 -407 640 -500 375 -640 426 -640 480 -500 376 -640 427 -483 485 -426 640 -640 425 -640 480 -427 640 -640 640 -640 426 -612 612 -640 480 -640 427 -424 640 -640 427 -486 417 -640 480 -640 571 -427 640 -640 480 -640 480 -640 427 -640 480 -640 453 -640 426 -640 480 -640 480 -640 425 -640 493 -640 480 -426 640 -480 640 -640 480 -500 376 -640 427 -640 503 -334 500 -612 612 -500 333 -500 375 -375 500 -612 612 -640 480 -640 427 -500 333 -427 640 -480 640 -375 500 -640 427 -640 427 -521 315 -427 640 -427 640 -640 480 -500 375 -500 375 -640 387 -640 306 -640 426 -640 427 -640 458 -640 454 -640 480 -640 427 -640 427 -640 383 -500 375 -640 480 -640 427 -640 427 -500 375 -640 480 -640 480 -640 480 -640 427 -500 375 -640 480 -640 427 -640 260 -480 640 -640 427 -640 427 -500 333 -640 480 -480 640 -640 427 -427 640 -427 640 -640 427 -500 333 -480 640 -333 500 -427 640 -640 426 -640 390 -640 480 -400 301 -640 480 -500 339 -239 180 -640 425 -428 640 -640 426 -640 640 -640 478 -612 612 -640 465 -640 426 -427 640 -640 524 -640 436 -640 315 -640 427 -640 428 -500 333 -640 427 -500 374 -500 333 -640 427 -392 640 -640 446 -340 640 -640 480 -640 427 -480 640 -612 612 -359 640 -427 640 -426 640 -640 427 -427 640 -640 480 -375 500 -640 442 -640 480 -500 337 -640 480 -427 640 -375 500 -640 480 -640 427 -500 375 -332 500 -462 640 -426 640 -333 500 -640 480 -640 485 -640 428 -375 500 -640 640 -640 360 -640 424 -640 428 -640 411 -640 480 -640 425 -640 427 -640 426 -640 427 -640 480 -500 281 -640 429 -480 640 -425 640 -640 424 -427 640 -640 427 -640 479 -152 100 -640 480 -640 454 -640 428 -640 480 -426 640 -640 623 -640 480 -640 480 -640 640 -640 480 -640 359 -500 333 -640 480 -427 640 -426 640 -500 375 -480 640 -640 480 -333 500 -640 425 -612 612 -426 640 -640 480 -640 391 -480 640 -640 480 -640 427 -640 428 -640 480 -500 375 -640 427 -640 480 -640 634 -640 482 -640 426 -640 427 -640 480 -480 640 -640 480 -411 640 -640 512 -640 640 -556 640 -640 480 -427 640 -640 419 -640 433 -640 400 -640 427 -640 360 -640 426 -480 640 -480 640 -419 640 -640 528 -375 500 -640 480 -640 480 -640 480 -640 480 -640 427 -500 375 -427 640 -426 640 -425 640 -479 640 -480 640 -640 368 -640 427 -640 480 -424 640 -640 480 -640 408 -640 424 -466 640 -640 425 -480 640 -480 640 -640 458 -640 428 -500 375 -640 479 -500 375 -640 480 -200 300 -640 480 -433 640 -480 640 -500 421 -640 361 -640 480 -640 480 -500 375 -480 640 -640 480 -640 487 -640 427 -640 426 -640 429 -480 640 -640 640 -427 640 -427 640 -640 480 -500 375 -500 313 -640 424 -640 480 -640 424 -640 371 -640 425 -640 303 -640 427 -547 640 -640 429 -335 500 -640 480 -640 480 -500 333 -640 594 -640 427 -500 375 -458 640 -640 153 -480 640 -640 480 -640 408 -640 427 -500 375 -640 426 -640 427 -640 640 -640 427 -640 480 -640 609 -640 464 -640 425 -612 612 -640 480 -640 426 -426 640 -640 458 -640 480 -640 480 -640 416 -640 427 -640 480 -640 427 -640 426 -640 429 -612 612 -640 427 -640 403 -640 480 -640 431 -427 640 -640 480 -640 480 -640 427 -480 640 -480 640 -612 612 -640 427 -640 425 -480 640 -500 333 -640 480 -623 515 -375 500 -640 425 -459 640 -640 513 -356 373 -640 428 -640 427 -389 640 -640 408 -640 480 -640 517 -427 640 -640 426 -480 640 -640 404 -640 480 -427 640 -640 632 -500 375 -480 640 -640 415 -334 500 -375 500 -480 640 -640 480 -640 480 -491 640 -640 425 -480 640 -640 410 -612 612 -640 480 -480 640 -480 640 -640 427 -640 480 -640 452 -431 640 -640 428 -251 500 -640 426 -640 502 -640 427 -640 453 -640 480 -640 426 -640 451 -640 480 -640 428 -640 480 -640 480 -640 409 -493 640 -640 480 -500 334 -640 424 -640 518 -640 426 -598 640 -640 427 -640 427 -640 426 -640 427 -640 424 -375 500 -425 500 -640 418 -500 375 -640 480 -640 428 -480 640 -640 426 -500 335 -513 640 -375 500 -597 400 -640 427 -640 480 -640 480 -640 606 -640 380 -640 427 -640 480 -640 426 -640 618 -428 640 -640 425 -480 272 -429 640 -427 640 -640 404 -640 427 -375 500 -500 375 -640 426 -480 640 -480 640 -640 481 -612 612 -640 427 -640 480 -640 478 -640 480 -640 480 -426 640 -640 427 -640 424 -640 428 -640 480 -640 522 -480 640 -640 480 -375 500 -480 640 -640 425 -640 427 -640 383 -640 480 -600 600 -640 427 -640 480 -640 480 -620 413 -640 480 -640 417 -544 640 -515 640 -427 640 -640 480 -640 480 -640 424 -375 500 -640 480 -640 499 -500 332 -383 640 -500 375 -640 480 -640 427 -428 640 -640 481 -640 428 -640 640 -500 375 -640 359 -640 461 -640 426 -640 426 -427 640 -640 480 -640 480 -640 426 -640 480 -448 277 -640 428 -640 393 -500 324 -640 432 -640 480 -479 640 -640 425 -500 375 -640 428 -480 640 -427 640 -640 427 -427 640 -640 484 -640 427 -612 612 -480 640 -500 375 -640 481 -480 640 -480 640 -640 425 -480 640 -604 453 -440 300 -640 477 -640 426 -640 427 -640 480 -640 480 -426 640 -478 640 -640 640 -640 640 -612 612 -640 480 -640 480 -640 427 -532 640 -480 640 -500 332 -612 612 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -375 500 -640 640 -640 423 -640 509 -640 396 -640 428 -480 640 -640 480 -426 640 -500 375 -640 480 -640 427 -500 400 -640 427 -640 414 -640 427 -334 500 -640 426 -640 427 -427 640 -427 640 -500 332 -640 480 -360 640 -640 428 -640 426 -480 640 -640 427 -640 427 -422 640 -640 360 -400 500 -480 640 -640 427 -375 500 -335 500 -640 361 -331 500 -640 480 -640 480 -640 480 -640 536 -640 640 -428 640 -640 427 -640 480 -500 333 -640 427 -640 385 -480 640 -640 428 -500 375 -640 425 -427 640 -480 640 -480 640 -640 427 -640 427 -640 480 -640 427 -640 427 -640 480 -462 640 -640 480 -640 480 -640 640 -426 640 -640 427 -640 425 -428 640 -640 427 -640 424 -640 427 -500 375 -479 640 -640 425 -640 428 -500 375 -640 426 -640 480 -427 640 -500 333 -640 480 -425 640 -640 410 -640 480 -640 425 -480 640 -640 480 -640 427 -640 453 -640 426 -640 480 -640 483 -640 427 -640 427 -640 450 -612 612 -640 478 -478 640 -425 640 -640 424 -640 427 -640 427 -640 480 -375 500 -500 439 -640 359 -640 426 -640 480 -480 640 -640 427 -640 480 -640 480 -500 375 -640 480 -640 427 -640 480 -640 426 -433 640 -640 427 -640 463 -640 425 -640 425 -640 426 -640 424 -640 426 -640 429 -640 427 -500 333 -640 480 -640 480 -640 480 -640 427 -480 640 -480 640 -480 485 -640 427 -640 427 -640 428 -480 640 -371 500 -500 375 -640 427 -500 375 -375 500 -500 375 -640 428 -500 375 -640 480 -640 626 -640 360 -640 564 -640 424 -640 480 -375 500 -640 428 -640 427 -640 426 -479 640 -640 512 -640 480 -488 640 -334 500 -640 427 -480 640 -640 499 -480 640 -640 480 -640 627 -640 425 -640 480 -426 640 -640 424 -640 480 -640 427 -640 427 -640 569 -640 480 -640 426 -480 640 -640 480 -481 640 -428 640 -640 427 -640 427 -640 422 -640 429 -480 360 -640 480 -640 480 -640 376 -640 346 -428 640 -640 427 -640 427 -640 360 -640 458 -427 640 -640 479 -500 375 -640 480 -400 300 -500 375 -480 640 -640 427 -428 640 -640 640 -480 640 -640 640 -640 480 -640 471 -640 455 -640 427 -640 480 -640 425 -424 640 -640 361 -640 419 -640 480 -376 500 -640 480 -640 436 -500 375 -480 640 -640 480 -640 481 -640 254 -640 427 -640 427 -640 426 -640 453 -480 640 -640 427 -428 640 -427 640 -640 299 -469 640 -640 480 -640 480 -616 640 -640 480 -500 375 -375 500 -612 612 -332 500 -640 394 -612 612 -640 427 -640 428 -640 426 -640 480 -500 375 -640 427 -480 640 -640 480 -480 640 -640 456 -427 640 -640 480 -559 600 -375 500 -500 375 -640 480 -640 427 -640 480 -480 640 -500 333 -640 184 -427 640 -500 375 -640 480 -640 464 -640 481 -640 326 -426 640 -640 426 -640 427 -500 375 -640 352 -640 480 -640 479 -615 640 -640 425 -640 427 -640 363 -640 480 -640 437 -640 480 -480 319 -600 600 -640 453 -500 332 -640 424 -640 490 -640 480 -356 500 -640 480 -500 333 -375 500 -640 427 -640 480 -640 429 -640 428 -640 425 -640 489 -333 500 -640 439 -480 640 -640 426 -612 612 -391 640 -640 480 -640 427 -281 640 -640 424 -480 640 -640 359 -640 427 -640 480 -480 640 -640 480 -500 375 -640 427 -640 427 -640 427 -640 427 -640 480 -640 480 -640 427 -612 612 -427 640 -640 480 -480 640 -640 480 -640 480 -640 427 -500 375 -427 640 -480 640 -640 428 -640 480 -640 480 -640 457 -640 360 -640 480 -500 337 -640 464 -427 640 -640 424 -640 400 -500 333 -640 427 -500 332 -640 480 -480 640 -640 427 -640 427 -525 350 -640 351 -640 425 -640 480 -640 480 -640 426 -328 500 -575 640 -640 259 -640 426 -640 401 -500 375 -440 500 -640 427 -640 354 -480 640 -640 480 -640 480 -640 480 -640 415 -600 327 -457 640 -500 333 -480 640 -612 612 -640 640 -640 480 -640 424 -425 640 -640 408 -640 431 -640 424 -640 427 -500 500 -425 640 -500 375 -640 410 -640 428 -640 480 -480 640 -640 480 -479 640 -640 480 -500 375 -424 640 -640 480 -640 426 -640 428 -640 425 -640 427 -640 575 -640 438 -640 480 -480 640 -612 612 -640 426 -640 427 -640 443 -640 376 -500 375 -427 640 -612 612 -427 640 -426 640 -640 480 -640 480 -383 640 -640 482 -640 480 -640 480 -640 425 -640 424 -424 640 -640 640 -640 428 -640 531 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 478 -640 483 -640 430 -640 480 -560 640 -426 640 -640 427 -400 500 -500 388 -640 476 -640 427 -640 427 -640 427 -640 424 -480 640 -612 612 -538 360 -480 640 -640 428 -604 402 -375 500 -640 480 -500 375 -500 375 -476 640 -640 495 -640 640 -402 640 -640 478 -640 480 -640 427 -475 640 -640 480 -640 480 -640 428 -600 450 -640 433 -426 640 -480 640 -640 480 -640 427 -640 625 -640 480 -640 427 -480 640 -457 640 -640 480 -640 480 -612 612 -640 425 -480 640 -640 427 -640 550 -640 426 -640 427 -640 640 -640 480 -640 480 -640 427 -360 328 -640 424 -315 484 -500 375 -640 427 -640 438 -640 426 -640 466 -425 640 -640 427 -640 427 -640 426 -640 480 -640 480 -640 427 -500 467 -640 401 -640 426 -640 480 -375 500 -640 481 -360 640 -546 640 -640 480 -480 640 -640 480 -640 427 -640 428 -640 506 -448 336 -640 425 -612 612 -428 640 -480 640 -480 640 -481 640 -640 480 -640 427 -640 477 -640 480 -612 612 -500 500 -640 426 -640 478 -640 427 -500 342 -426 640 -375 500 -640 427 -416 640 -640 446 -640 480 -640 480 -640 424 -640 427 -640 480 -640 427 -418 640 -640 426 -640 426 -427 640 -640 480 -640 481 -640 480 -375 500 -640 480 -640 480 -640 480 -640 480 -640 428 -640 392 -426 640 -640 480 -640 480 -640 427 -640 383 -640 529 -640 482 -640 427 -640 427 -640 457 -427 640 -480 640 -640 411 -640 480 -640 480 -640 360 -640 427 -640 480 -640 426 -640 401 -640 360 -640 480 -480 640 -427 640 -640 480 -640 428 -640 480 -596 640 -500 333 -640 480 -640 496 -409 500 -640 495 -455 341 -500 332 -427 640 -640 427 -640 427 -375 500 -640 429 -640 480 -640 427 -640 480 -640 480 -640 478 -426 640 -640 360 -640 384 -640 423 -640 427 -640 480 -434 640 -640 426 -640 427 -640 427 -640 427 -640 427 -640 480 -640 396 -640 480 -640 426 -640 480 -424 640 -640 479 -640 425 -480 640 -640 480 -640 480 -640 515 -640 480 -480 640 -640 428 -640 480 -640 426 -640 426 -480 640 -480 640 -640 480 -640 480 -640 424 -480 640 -640 426 -640 448 -640 425 -427 640 -375 500 -640 480 -480 640 -500 281 -480 640 -640 452 -360 640 -640 243 -640 480 -640 480 -640 514 -640 446 -640 428 -640 480 -457 640 -424 640 -480 640 -500 375 -612 612 -640 453 -640 427 -480 640 -640 453 -513 640 -640 426 -640 480 -640 427 -500 375 -640 480 -424 640 -500 375 -640 480 -640 426 -640 480 -640 400 -480 640 -424 640 -500 375 -640 512 -640 480 -640 425 -640 480 -500 375 -500 375 -428 640 -640 488 -640 480 -640 425 -500 375 -500 375 -640 624 -640 429 -500 500 -640 429 -640 480 -413 640 -480 640 -427 640 -427 640 -480 640 -640 347 -640 516 -427 640 -427 640 -500 375 -640 480 -426 640 -436 640 -640 428 -640 426 -640 427 -640 480 -333 500 -640 426 -480 640 -640 427 -640 480 -480 640 -480 640 -500 375 -427 640 -640 427 -510 640 -480 640 -419 637 -427 640 -352 288 -480 640 -640 524 -480 640 -367 500 -640 480 -640 480 -640 426 -480 640 -640 480 -519 640 -640 427 -640 329 -640 427 -640 383 -640 480 -480 640 -640 427 -640 429 -480 640 -400 500 -640 426 -640 427 -500 333 -480 640 -299 500 -640 480 -640 480 -640 480 -334 500 -640 480 -640 480 -640 434 -500 375 -479 640 -640 427 -640 360 -640 409 -427 640 -640 510 -427 640 -640 479 -640 212 -480 640 -640 480 -640 427 -640 478 -396 500 -640 387 -640 640 -640 477 -640 417 -640 439 -640 427 -640 425 -640 438 -450 600 -640 424 -640 427 -640 361 -640 480 -640 427 -640 512 -640 480 -640 480 -640 471 -500 311 -640 426 -640 426 -640 480 -640 428 -500 375 -480 640 -640 471 -640 480 -640 428 -640 427 -640 451 -480 640 -427 640 -388 640 -640 314 -640 427 -500 400 -500 334 -640 426 -640 427 -640 480 -640 424 -427 640 -640 471 -640 480 -640 431 -640 427 -640 427 -514 640 -500 271 -329 640 -640 480 -500 332 -640 425 -480 640 -500 375 -640 428 -640 426 -640 425 -640 480 -640 412 -640 431 -640 443 -640 481 -500 333 -640 425 -640 384 -427 640 -640 427 -427 640 -500 375 -640 480 -640 427 -640 360 -480 640 -640 480 -500 233 -480 640 -640 426 -449 640 -640 396 -640 426 -566 640 -640 427 -640 529 -612 612 -640 409 -640 426 -480 640 -640 480 -640 428 -500 375 -500 375 -640 512 -640 427 -640 480 -425 640 -640 426 -612 612 -398 640 -640 363 -640 469 -460 640 -640 482 -500 332 -640 425 -640 426 -640 426 -427 640 -640 480 -640 480 -640 427 -640 446 -640 424 -427 640 -640 480 -640 480 -640 427 -640 425 -424 640 -640 427 -640 480 -640 480 -640 400 -640 480 -480 640 -640 288 -480 640 -375 500 -640 480 -500 399 -640 480 -500 375 -480 640 -426 640 -640 480 -640 480 -640 480 -640 427 -640 544 -640 429 -500 365 -640 480 -640 426 -640 428 -640 480 -640 429 -483 640 -640 427 -640 426 -640 480 -640 513 -500 375 -500 396 -381 640 -640 480 -500 375 -640 480 -427 640 -640 426 -640 427 -640 458 -640 360 -640 426 -466 640 -640 480 -480 640 -427 640 -640 427 -640 425 -640 480 -640 428 -500 461 -119 184 -640 427 -640 426 -640 480 -492 500 -640 480 -427 640 -640 360 -640 480 -640 480 -640 640 -375 500 -640 427 -640 423 -568 320 -640 480 -640 480 -640 389 -480 640 -407 640 -640 480 -640 471 -640 445 -480 640 -335 500 -480 640 -640 480 -640 480 -640 428 -640 400 -640 480 -640 480 -640 361 -640 640 -500 375 -427 640 -640 480 -640 424 -640 426 -640 479 -480 640 -640 480 -500 377 -500 362 -500 375 -640 480 -500 333 -640 427 -640 480 -640 427 -640 480 -500 374 -640 361 -640 480 -640 427 -570 640 -640 425 -640 480 -640 480 -640 480 -480 640 -500 334 -640 480 -480 640 -480 640 -500 375 -480 640 -640 640 -640 480 -640 275 -640 480 -500 375 -640 480 -398 640 -640 427 -640 413 -640 509 -640 435 -640 426 -640 361 -427 640 -640 427 -640 480 -429 640 -640 480 -640 533 -500 375 -480 640 -640 425 -640 480 -640 470 -640 423 -640 480 -640 480 -427 640 -640 480 -333 500 -640 427 -640 427 -640 424 -640 480 -428 640 -640 480 -640 429 -640 427 -375 500 -640 427 -640 427 -480 640 -640 329 -640 480 -640 425 -480 640 -640 354 -640 427 -640 480 -640 480 -640 480 -500 375 -640 480 -426 640 -427 640 -640 480 -500 400 -480 640 -427 640 -640 427 -640 369 -600 640 -480 640 -612 612 -640 424 -478 640 -640 427 -640 426 -640 480 -480 640 -640 269 -640 640 -480 640 -420 640 -640 480 -480 640 -427 640 -640 427 -640 499 -480 640 -640 427 -640 478 -512 640 -640 427 -612 612 -640 407 -640 426 -555 640 -640 428 -427 640 -640 427 -640 480 -640 480 -640 426 -640 480 -640 480 -640 335 -640 425 -480 640 -640 428 -640 489 -640 458 -612 612 -460 640 -500 333 -332 500 -480 640 -640 427 -640 426 -640 480 -500 375 -640 425 -640 427 -612 612 -640 480 -640 480 -568 640 -640 427 -375 500 -500 345 -640 427 -640 480 -640 480 -640 426 -480 640 -427 640 -500 375 -500 375 -640 480 -640 287 -640 427 -640 480 -640 427 -500 333 -640 427 -640 480 -480 640 -640 426 -640 480 -640 426 -425 640 -480 640 -512 640 -640 425 -640 427 -426 640 -640 427 -640 480 -478 640 -480 640 -427 640 -500 400 -640 480 -640 509 -640 399 -500 333 -640 640 -640 425 -640 360 -640 480 -640 419 -500 375 -504 640 -640 480 -640 480 -640 480 -640 480 -500 375 -500 333 -640 427 -640 480 -640 424 -640 424 -640 427 -600 600 -640 480 -500 375 -500 332 -427 640 -640 448 -640 426 -500 375 -640 480 -640 462 -640 429 -640 480 -640 480 -425 640 -500 333 -500 375 -427 640 -640 480 -640 480 -640 428 -612 612 -640 480 -640 408 -600 459 -640 480 -427 640 -640 480 -640 480 -640 427 -426 640 -640 424 -640 516 -640 425 -489 640 -640 439 -640 391 -640 426 -640 480 -640 427 -640 427 -480 640 -480 640 -640 472 -640 480 -640 480 -640 384 -640 479 -612 612 -640 426 -480 640 -500 272 -640 427 -640 471 -360 640 -640 427 -640 480 -640 480 -640 424 -640 498 -431 640 -640 426 -640 427 -640 478 -640 426 -426 640 -640 480 -640 480 -500 375 -427 640 -640 346 -640 383 -640 333 -640 480 -500 317 -462 640 -427 640 -640 457 -640 404 -640 425 -640 360 -480 640 -640 427 -640 427 -425 640 -640 425 -640 427 -480 640 -640 427 -640 354 -427 640 -640 382 -640 480 -640 436 -350 500 -640 429 -640 427 -375 500 -612 612 -640 480 -500 333 -383 640 -500 334 -640 480 -494 640 -640 426 -640 427 -427 640 -640 480 -640 444 -640 424 -640 426 -640 480 -640 480 -427 640 -500 411 -427 640 -640 426 -640 427 -640 427 -640 480 -640 424 -640 424 -425 640 -629 640 -640 480 -640 427 -640 427 -640 480 -640 427 -427 640 -640 391 -640 480 -500 368 -500 340 -640 512 -640 427 -426 640 -426 640 -640 426 -640 448 -640 480 -640 588 -612 612 -640 480 -500 269 -492 640 -640 427 -640 478 -640 509 -480 640 -640 480 -640 360 -640 480 -640 427 -640 429 -640 513 -640 480 -640 425 -640 488 -640 345 -640 461 -500 375 -640 480 -500 375 -480 640 -500 345 -640 480 -640 415 -640 428 -640 480 -480 640 -640 559 -640 360 -640 480 -640 426 -427 640 -640 427 -500 297 -427 640 -448 640 -640 427 -640 425 -640 480 -640 480 -384 640 -426 640 -640 504 -640 427 -481 640 -480 640 -640 456 -640 480 -640 479 -480 640 -612 612 -640 427 -640 418 -640 360 -427 640 -640 426 -640 427 -640 480 -500 333 -375 500 -500 334 -480 360 -480 640 -640 480 -640 480 -640 348 -375 500 -640 426 -426 640 -640 425 -640 426 -500 375 -500 375 -640 427 -640 480 -640 426 -427 640 -640 502 -480 640 -640 360 -640 313 -640 427 -640 478 -427 640 -461 640 -480 640 -640 407 -550 640 -640 480 -480 640 -640 481 -640 427 -612 612 -550 275 -640 430 -640 480 -480 640 -640 427 -640 480 -640 427 -640 480 -640 427 -640 384 -640 427 -640 480 -640 427 -640 449 -375 500 -640 359 -396 640 -640 428 -640 428 -400 600 -640 425 -427 640 -640 480 -640 480 -640 481 -428 640 -640 359 -612 612 -640 438 -640 358 -640 394 -640 480 -640 480 -640 399 -427 640 -500 333 -640 427 -640 427 -640 480 -640 561 -640 428 -640 361 -640 587 -640 480 -640 480 -640 480 -640 427 -400 500 -500 375 -500 309 -640 403 -640 480 -381 640 -640 427 -481 640 -640 480 -640 427 -640 311 -480 640 -640 424 -640 480 -612 612 -640 480 -640 480 -640 494 -640 574 -640 426 -469 640 -640 480 -640 480 -425 640 -640 481 -640 480 -640 359 -640 472 -640 476 -640 360 -375 500 -640 409 -422 640 -640 383 -640 359 -640 437 -640 480 -640 350 -640 480 -640 427 -640 401 -640 480 -500 377 -640 426 -612 612 -500 333 -640 425 -480 640 -640 369 -640 427 -333 500 -427 640 -427 640 -640 427 -416 640 -640 424 -640 427 -640 463 -427 640 -640 480 -640 480 -640 480 -640 480 -640 426 -640 480 -640 457 -500 335 -640 364 -640 428 -640 427 -640 424 -640 427 -640 425 -640 425 -640 609 -480 640 -640 426 -640 426 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -640 391 -479 640 -427 640 -640 427 -461 640 -640 425 -500 375 -500 400 -640 427 -640 502 -480 640 -500 397 -640 480 -427 640 -500 334 -402 640 -640 427 -640 427 -640 480 -640 427 -640 425 -640 609 -640 480 -640 427 -640 567 -640 424 -640 427 -640 427 -640 428 -640 480 -640 480 -479 640 -640 480 -425 640 -640 553 -640 480 -640 480 -640 480 -640 425 -640 480 -640 448 -420 640 -480 640 -480 640 -480 640 -427 640 -640 502 -500 375 -360 640 -427 640 -500 491 -640 427 -640 426 -640 427 -640 428 -640 480 -500 375 -640 480 -480 640 -640 427 -640 427 -640 427 -428 640 -428 640 -640 480 -640 480 -640 480 -640 448 -640 390 -640 478 -427 640 -500 333 -450 600 -640 391 -600 399 -480 640 -640 361 -500 380 -640 494 -640 451 -640 427 -427 640 -640 480 -640 480 -640 360 -640 593 -500 375 -640 434 -480 640 -640 480 -427 640 -425 640 -640 640 -640 418 -640 399 -640 427 -612 612 -640 427 -640 480 -640 491 -427 640 -427 640 -640 480 -640 640 -640 519 -640 427 -375 500 -478 640 -336 500 -480 640 -500 421 -480 640 -640 421 -640 426 -500 335 -640 426 -640 480 -640 427 -640 480 -510 640 -640 427 -640 273 -640 428 -640 426 -640 480 -640 480 -463 640 -640 424 -425 640 -500 375 -427 640 -480 480 -640 424 -640 427 -640 480 -500 375 -640 427 -640 428 -640 446 -640 427 -500 375 -375 500 -500 375 -427 640 -640 640 -480 640 -640 428 -640 480 -640 427 -640 425 -334 500 -640 361 -612 612 -640 427 -341 500 -612 612 -640 428 -640 360 -640 360 -640 480 -640 370 -640 475 -640 479 -640 427 -456 640 -640 427 -428 640 -640 480 -640 492 -640 558 -640 480 -427 640 -640 496 -480 640 -500 375 -640 425 -480 640 -640 426 -640 464 -640 480 -640 480 -500 328 -640 640 -640 640 -640 429 -640 426 -640 427 -640 426 -640 410 -640 457 -640 426 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -424 640 -640 428 -500 375 -428 640 -337 500 -640 426 -334 500 -640 480 -640 289 -640 425 -500 375 -427 640 -640 480 -360 640 -333 500 -640 480 -640 574 -640 427 -640 480 -640 427 -426 640 -640 427 -640 426 -640 480 -640 427 -375 500 -500 375 -640 480 -640 335 -640 444 -640 212 -640 480 -546 640 -640 480 -640 359 -640 426 -500 375 -640 426 -640 480 -500 400 -640 480 -640 480 -425 640 -478 640 -480 422 -425 640 -481 640 -400 600 -640 480 -640 480 -640 480 -480 640 -612 612 -462 640 -439 640 -480 640 -612 612 -426 640 -500 394 -640 428 -640 444 -640 427 -640 427 -640 428 -640 380 -640 480 -640 480 -640 438 -612 612 -640 427 -444 500 -640 360 -640 423 -640 640 -427 640 -640 480 -640 480 -640 480 -480 640 -640 426 -640 480 -640 426 -640 427 -640 456 -640 426 -375 500 -640 438 -640 459 -640 366 -640 480 -640 480 -640 480 -428 640 -640 480 -640 345 -640 429 -480 640 -480 640 -500 332 -640 425 -418 640 -640 233 -640 480 -375 500 -640 480 -427 640 -640 428 -640 480 -424 640 -332 500 -640 443 -640 480 -640 427 -640 463 -600 400 -640 425 -640 427 -640 480 -640 480 -640 428 -500 375 -640 480 -640 459 -640 427 -640 480 -640 480 -480 640 -427 640 -640 381 -426 640 -427 640 -500 400 -640 425 -480 640 -424 640 -640 427 -640 480 -640 480 -612 612 -640 427 -640 359 -333 500 -426 640 -640 427 -640 480 -640 480 -640 480 -640 426 -640 480 -426 640 -500 375 -640 427 -500 318 -500 375 -640 481 -640 360 -640 427 -426 640 -500 375 -640 427 -640 480 -500 334 -640 480 -640 427 -480 640 -640 427 -640 429 -640 426 -640 426 -640 373 -640 426 -640 426 -640 457 -640 512 -640 480 -478 640 -640 480 -640 383 -426 640 -640 481 -640 427 -500 375 -640 426 -640 480 -425 640 -640 428 -478 640 -427 640 -640 287 -640 426 -640 480 -640 427 -419 640 -640 640 -640 427 -640 480 -640 480 -500 333 -640 426 -480 640 -600 596 -640 428 -640 475 -640 360 -640 480 -640 427 -640 480 -640 478 -640 415 -640 480 -480 640 -640 457 -500 375 -429 640 -427 640 -640 619 -640 427 -640 225 -640 426 -426 640 -640 534 -640 427 -640 480 -640 444 -640 480 -640 480 -640 478 -640 313 -640 426 -640 426 -640 410 -640 424 -640 480 -480 640 -500 333 -640 480 -640 384 -500 341 -640 480 -500 500 -640 427 -640 480 -500 400 -480 640 -640 429 -427 640 -500 281 -640 480 -640 439 -640 480 -640 428 -640 480 -640 425 -500 375 -640 416 -640 480 -640 426 -640 480 -640 512 -640 366 -612 612 -344 500 -640 320 -640 533 -500 375 -640 480 -640 480 -500 334 -480 640 -640 427 -500 376 -640 480 -480 640 -640 424 -500 500 -480 640 -480 640 -640 401 -640 480 -500 499 -480 640 -640 480 -640 427 -640 480 -400 500 -640 424 -640 424 -640 480 -427 640 -640 427 -640 425 -500 375 -640 428 -640 414 -640 426 -640 426 -640 428 -427 640 -640 480 -612 612 -640 480 -640 480 -640 457 -500 335 -480 640 -640 427 -500 375 -480 640 -640 427 -640 480 -640 480 -483 640 -480 640 -640 427 -640 455 -640 480 -480 320 -640 480 -434 640 -640 425 -436 640 -396 640 -500 375 -640 478 -640 426 -640 480 -640 480 -640 427 -427 640 -640 427 -640 480 -640 426 -500 375 -500 500 -640 412 -640 342 -480 640 -640 426 -333 500 -640 458 -640 480 -500 500 -640 360 -640 480 -640 640 -512 640 -612 612 -640 427 -640 427 -636 640 -612 612 -640 480 -640 480 -640 480 -640 389 -640 542 -640 480 -640 430 -640 425 -500 333 -640 640 -640 427 -425 640 -427 640 -640 480 -333 500 -640 426 -640 426 -640 512 -640 480 -360 640 -640 427 -333 357 -500 375 -478 640 -640 478 -640 427 -640 428 -640 427 -640 413 -457 640 -612 612 -480 640 -640 483 -640 480 -640 480 -640 360 -480 640 -427 640 -640 480 -640 511 -640 480 -640 480 -300 400 -640 360 -375 500 -640 424 -640 480 -640 480 -640 574 -427 640 -640 478 -640 480 -534 640 -480 640 -640 480 -640 425 -372 500 -640 480 -640 425 -640 425 -640 384 -640 480 -497 500 -640 426 -427 640 -640 429 -640 480 -640 427 -640 428 -640 480 -484 640 -640 449 -459 640 -640 480 -640 601 -612 612 -640 480 -335 500 -427 640 -640 411 -500 332 -640 360 -480 640 -640 427 -426 640 -447 500 -640 424 -640 427 -640 346 -640 480 -640 360 -640 480 -428 640 -500 299 -640 427 -640 457 -640 427 -478 500 -427 640 -640 427 -640 449 -640 466 -640 480 -427 640 -640 480 -640 480 -640 480 -640 558 -640 480 -500 334 -640 444 -640 480 -361 640 -480 640 -640 473 -600 600 -640 496 -500 357 -480 640 -640 480 -500 330 -375 500 -640 427 -500 375 -541 640 -480 640 -640 480 -640 416 -640 480 -640 425 -640 426 -500 376 -640 427 -427 640 -478 640 -640 427 -425 640 -640 427 -640 425 -640 426 -640 360 -425 640 -375 500 -640 480 -640 427 -427 640 -640 443 -322 365 -638 512 -640 424 -640 478 -639 640 -640 480 -500 333 -640 427 -640 433 -640 502 -640 614 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -375 500 -640 426 -640 299 -333 500 -640 427 -500 333 -640 480 -427 640 -431 640 -500 333 -640 480 -640 480 -640 434 -640 484 -640 458 -640 296 -640 427 -427 640 -640 480 -336 500 -472 640 -500 332 -640 427 -500 375 -640 480 -480 640 -480 640 -500 386 -612 612 -640 213 -640 426 -334 500 -640 471 -640 360 -640 586 -640 427 -640 424 -640 413 -640 427 -640 427 -612 612 -640 480 -640 427 -331 500 -640 428 -500 336 -500 375 -640 560 -640 480 -612 612 -640 480 -640 427 -500 375 -427 640 -640 480 -640 480 -640 366 -640 425 -640 427 -640 480 -426 640 -640 480 -640 640 -640 480 -640 425 -640 480 -500 333 -640 427 -640 480 -640 478 -478 640 -640 428 -640 480 -500 375 -640 501 -500 375 -427 640 -640 481 -640 426 -640 480 -426 640 -480 640 -435 640 -427 640 -640 427 -640 427 -640 480 -240 320 -640 428 -640 640 -640 509 -640 480 -640 480 -500 394 -375 500 -428 640 -640 480 -640 426 -640 480 -500 333 -428 640 -375 500 -431 640 -640 480 -640 427 -590 640 -500 465 -466 640 -600 600 -433 640 -500 332 -434 640 -640 640 -640 480 -640 425 -480 640 -480 640 -640 480 -640 480 -640 480 -640 301 -640 480 -640 478 -640 360 -640 425 -500 376 -640 427 -640 432 -640 427 -460 390 -500 375 -640 426 -480 640 -640 426 -640 426 -640 427 -426 640 -500 375 -640 426 -640 480 -640 427 -640 263 -480 640 -640 480 -640 425 -500 333 -640 480 -640 427 -640 427 -480 640 -640 480 -640 449 -500 327 -640 480 -500 350 -640 480 -640 320 -480 640 -400 500 -612 612 -425 640 -372 500 -375 500 -500 334 -640 427 -427 640 -640 480 -480 640 -640 427 -500 375 -478 640 -465 500 -640 428 -336 500 -480 640 -410 640 -416 500 -640 453 -500 375 -640 480 -500 375 -360 640 -640 401 -640 640 -640 480 -640 427 -640 480 -640 426 -332 500 -640 361 -640 480 -427 640 -640 426 -640 505 -640 588 -640 427 -640 409 -500 333 -500 375 -500 376 -640 415 -640 480 -640 480 -640 426 -640 480 -640 427 -640 399 -600 366 -640 360 -640 457 -640 480 -640 427 -640 427 -640 428 -480 640 -640 521 -500 333 -640 480 -500 325 -581 640 -640 480 -640 426 -500 333 -480 640 -640 428 -640 426 -427 640 -640 427 -640 427 -459 640 -375 500 -480 640 -640 427 -640 427 -640 451 -612 612 -640 480 -640 427 -427 640 -612 612 -640 427 -429 640 -640 480 -480 640 -640 480 -640 428 -480 640 -500 295 -640 424 -640 428 -500 375 -480 640 -428 640 -480 640 -640 427 -375 500 -500 333 -612 612 -640 480 -640 463 -500 333 -640 427 -462 640 -640 480 -640 480 -640 433 -640 618 -640 480 -425 640 -500 375 -640 214 -640 480 -640 480 -640 480 -640 480 -640 480 -500 356 -375 500 -640 480 -640 427 -480 353 -640 640 -500 375 -640 480 -640 424 -640 427 -640 426 -640 426 -640 640 -640 427 -640 427 -500 375 -640 434 -640 427 -640 427 -500 375 -500 333 -640 425 -420 640 -427 640 -640 428 -640 480 -640 480 -640 360 -374 500 -640 428 -375 500 -640 408 -500 375 -433 640 -612 612 -640 480 -640 480 -426 640 -427 640 -640 487 -480 640 -423 640 -640 480 -640 427 -640 480 -335 640 -640 426 -640 440 -640 480 -427 640 -640 480 -427 640 -640 480 -640 427 -500 375 -427 640 -640 427 -640 540 -640 426 -640 427 -500 377 -427 640 -640 480 -640 425 -500 332 -640 571 -640 428 -480 640 -640 428 -478 640 -640 569 -640 480 -428 640 -640 424 -640 480 -640 427 -640 514 -640 485 -640 409 -427 640 -640 427 -640 427 -429 640 -389 640 -640 480 -640 427 -359 640 -640 425 -640 426 -640 427 -640 373 -640 426 -640 427 -640 427 -486 640 -640 480 -427 640 -639 640 -500 375 -500 373 -640 480 -426 640 -640 366 -640 338 -333 500 -500 338 -427 640 -640 479 -500 375 -640 480 -640 519 -640 427 -320 240 -640 427 -612 612 -640 341 -428 640 -480 640 -640 466 -640 473 -640 313 -480 640 -640 640 -640 476 -640 480 -640 427 -640 480 -375 500 -427 640 -640 426 -640 480 -640 480 -444 640 -426 640 -427 640 -380 640 -640 480 -640 480 -640 339 -640 427 -640 573 -640 480 -480 640 -640 427 -640 480 -640 428 -640 426 -500 497 -640 428 -640 475 -640 361 -640 426 -256 217 -640 480 -640 480 -640 480 -427 640 -640 480 -500 375 -640 424 -500 341 -640 480 -453 640 -640 444 -500 400 -480 640 -500 333 -480 640 -640 427 -640 478 -640 424 -640 424 -640 427 -500 332 -427 640 -500 375 -500 334 -361 500 -640 430 -640 427 -500 375 -640 479 -428 640 -640 479 -427 640 -428 640 -640 425 -640 480 -640 424 -514 640 -480 640 -640 428 -640 480 -640 479 -640 426 -640 427 -640 424 -500 375 -360 640 -640 479 -427 640 -640 490 -500 375 -480 640 -500 333 -640 423 -640 426 -480 640 -640 480 -640 415 -640 431 -480 640 -640 423 -640 480 -428 640 -500 375 -640 396 -640 427 -640 427 -500 375 -640 480 -640 427 -640 499 -480 640 -480 640 -640 427 -640 470 -640 425 -500 333 -500 335 -640 410 -160 120 -640 428 -478 640 -640 436 -612 612 -640 480 -500 375 -640 425 -427 640 -400 453 -437 640 -480 640 -612 612 -500 281 -640 480 -425 640 -480 640 -640 344 -640 480 -640 428 -479 640 -640 428 -480 640 -500 375 -640 428 -640 427 -640 426 -640 480 -500 438 -427 640 -640 480 -640 480 -480 640 -640 362 -640 427 -640 480 -320 500 -640 393 -500 375 -453 640 -427 640 -640 503 -640 429 -640 425 -424 640 -426 640 -640 480 -640 480 -640 480 -640 426 -640 480 -426 640 -640 290 -640 480 -480 360 -640 480 -517 640 -480 640 -640 480 -480 640 -500 335 -450 338 -427 640 -640 480 -640 480 -640 480 -640 426 -640 480 -640 600 -431 640 -640 480 -428 640 -435 640 -640 427 -640 640 -640 425 -640 480 -640 426 -640 480 -640 426 -500 375 -640 480 -500 471 -640 480 -640 426 -640 426 -480 640 -640 431 -640 480 -640 429 -425 640 -640 342 -640 427 -640 480 -612 612 -640 428 -500 333 -252 252 -459 640 -640 427 -640 480 -389 640 -640 480 -640 427 -375 500 -640 425 -640 360 -489 640 -640 447 -500 334 -640 424 -480 640 -500 375 -640 425 -640 480 -427 640 -640 427 -640 480 -360 356 -500 375 -640 480 -640 427 -457 640 -500 375 -640 480 -479 640 -480 640 -640 427 -640 427 -640 478 -640 427 -640 480 -640 360 -640 480 -640 324 -640 427 -480 640 -640 427 -640 360 -640 429 -640 480 -331 500 -427 640 -640 458 -640 463 -640 427 -427 640 -640 480 -640 480 -640 427 -640 480 -442 640 -640 480 -640 426 -426 640 -640 429 -429 640 -640 426 -425 640 -640 480 -640 427 -640 440 -424 640 -640 426 -500 327 -640 480 -640 426 -640 480 -640 427 -480 640 -640 426 -640 480 -640 514 -500 384 -624 640 -457 640 -500 375 -640 486 -640 427 -640 480 -640 433 -426 640 -640 480 -640 411 -500 375 -640 360 -427 640 -640 427 -480 640 -640 288 -360 640 -640 427 -480 272 -640 480 -640 428 -640 480 -640 448 -640 640 -640 426 -640 427 -384 512 -640 427 -640 480 -640 426 -480 640 -480 640 -500 400 -500 335 -640 426 -640 480 -640 453 -480 640 -320 240 -640 480 -640 425 -640 480 -640 428 -375 500 -640 427 -640 458 -640 427 -640 320 -500 375 -500 407 -640 427 -389 640 -500 375 -640 483 -640 630 -480 640 -480 640 -640 480 -433 640 -480 640 -640 428 -640 412 -500 313 -640 427 -612 612 -480 640 -640 480 -480 640 -640 426 -640 426 -500 344 -640 361 -500 333 -640 480 -640 357 -640 427 -640 426 -640 429 -640 428 -640 426 -480 640 -640 263 -640 480 -640 480 -640 480 -640 486 -316 640 -480 640 -640 427 -640 480 -612 612 -640 523 -427 640 -480 640 -416 500 -640 428 -640 427 -576 576 -640 427 -640 480 -640 425 -640 427 -640 529 -640 428 -640 427 -500 332 -640 636 -640 480 -640 427 -640 426 -640 480 -640 480 -640 480 -640 480 -640 428 -640 427 -640 346 -640 480 -640 496 -640 480 -640 480 -480 640 -500 375 -640 506 -640 480 -426 640 -640 362 -480 640 -550 375 -640 428 -480 640 -640 428 -640 480 -640 428 -612 612 -375 500 -640 480 -640 429 -640 640 -640 457 -640 480 -640 360 -640 481 -640 458 -640 416 -480 640 -640 480 -640 400 -640 427 -640 453 -640 427 -640 359 -612 612 -480 640 -640 480 -640 427 -640 480 -640 428 -640 426 -480 640 -640 425 -640 428 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 393 -640 426 -640 480 -500 495 -640 428 -640 426 -640 426 -480 640 -640 480 -480 640 -434 640 -578 433 -480 640 -640 427 -640 480 -500 433 -612 612 -640 427 -427 640 -428 640 -640 424 -480 640 -427 640 -478 640 -640 376 -332 500 -480 640 -640 389 -640 427 -640 427 -612 612 -640 480 -428 640 -640 478 -448 640 -427 640 -640 444 -500 375 -500 333 -500 375 -640 425 -480 640 -640 426 -640 427 -640 480 -640 480 -640 480 -500 332 -427 640 -640 480 -640 480 -640 480 -640 425 -640 480 -640 427 -640 480 -500 375 -640 426 -640 427 -640 427 -500 375 -640 428 -640 426 -640 428 -640 480 -640 426 -640 427 -640 360 -640 480 -640 479 -500 334 -334 500 -480 640 -640 464 -640 426 -500 375 -640 427 -500 375 -640 480 -480 640 -640 408 -640 408 -640 427 -640 424 -640 427 -640 427 -640 427 -640 425 -500 283 -480 640 -640 426 -518 640 -640 480 -640 559 -640 428 -640 480 -640 480 -640 480 -640 427 -640 426 -427 640 -333 500 -640 427 -640 480 -500 375 -640 480 -427 640 -640 458 -427 640 -640 480 -640 480 -480 640 -640 427 -640 427 -640 427 -640 480 -480 360 -640 427 -427 640 -640 428 -640 427 -375 500 -427 640 -640 427 -480 640 -424 640 -500 332 -500 375 -350 500 -640 427 -640 454 -480 640 -640 425 -640 533 -640 425 -500 375 -640 426 -640 503 -379 640 -640 377 -500 333 -480 640 -640 477 -480 640 -640 480 -640 480 -480 640 -640 426 -640 549 -640 480 -640 427 -500 375 -640 426 -640 361 -640 419 -428 640 -640 418 -612 612 -427 640 -640 427 -640 419 -500 236 -640 480 -640 480 -640 640 -640 425 -478 640 -500 452 -640 426 -640 426 -640 363 -640 360 -640 438 -478 640 -640 355 -640 427 -640 427 -500 375 -640 427 -640 480 -480 640 -640 457 -494 373 -640 511 -640 480 -500 333 -640 480 -500 375 -640 427 -383 640 -500 333 -640 383 -640 360 -640 428 -640 427 -640 427 -640 426 -612 612 -640 428 -640 426 -500 335 -375 500 -640 419 -415 640 -263 350 -640 480 -640 426 -375 500 -640 427 -640 427 -640 480 -500 375 -640 480 -500 333 -640 480 -640 480 -426 640 -640 480 -640 480 -375 500 -640 359 -640 427 -640 428 -640 480 -500 497 -427 640 -640 512 -427 500 -441 331 -640 458 -640 360 -640 425 -602 640 -640 425 -640 480 -640 427 -640 425 -480 640 -337 500 -640 480 -640 480 -640 459 -640 426 -640 480 -640 480 -640 640 -600 600 -480 640 -333 500 -640 426 -640 450 -333 500 -640 426 -640 427 -640 480 -640 480 -640 406 -480 640 -640 427 -640 418 -500 333 -640 427 -425 640 -640 480 -500 334 -640 480 -640 480 -640 480 -640 480 -640 629 -500 375 -427 640 -640 426 -640 480 -640 481 -640 396 -640 429 -640 483 -427 640 -640 427 -640 427 -640 457 -640 427 -612 612 -640 480 -640 480 -640 480 -640 480 -640 480 -474 640 -446 500 -500 375 -640 480 -640 465 -640 478 -640 448 -640 427 -500 375 -490 326 -640 427 -426 640 -640 428 -640 400 -640 345 -640 425 -640 480 -640 427 -640 480 -640 468 -500 375 -429 640 -640 427 -640 425 -640 584 -424 640 -640 403 -640 425 -640 426 -640 427 -640 480 -640 559 -640 221 -640 480 -640 426 -640 480 -612 612 -427 640 -640 480 -500 298 -426 640 -480 360 -480 640 -640 427 -640 480 -640 426 -640 361 -640 480 -640 366 -640 480 -500 375 -500 375 -478 640 -640 427 -640 428 -480 640 -640 428 -640 427 -640 426 -640 480 -640 425 -640 480 -640 480 -500 375 -640 480 -640 639 -640 559 -500 331 -394 640 -426 640 -640 480 -640 480 -640 480 -640 427 -428 640 -640 427 -640 393 -640 426 -640 424 -469 279 -427 640 -640 335 -640 430 -428 640 -500 640 -426 640 -398 640 -427 640 -640 427 -640 427 -640 427 -457 640 -425 640 -640 434 -500 411 -500 375 -640 480 -640 476 -640 480 -640 575 -640 427 -640 480 -425 640 -640 395 -640 451 -640 513 -640 480 -640 427 -481 640 -480 640 -640 427 -640 480 -480 640 -640 480 -640 427 -640 424 -640 480 -315 482 -640 426 -640 426 -640 480 -640 480 -640 480 -640 426 -453 640 -383 640 -600 450 -640 463 -640 480 -640 474 -640 480 -640 478 -500 375 -640 427 -612 612 -612 612 -640 383 -640 640 -640 480 -500 342 -500 333 -640 428 -640 480 -427 640 -640 427 -640 448 -434 640 -480 640 -640 427 -640 480 -640 480 -500 333 -640 587 -640 424 -448 640 -640 428 -640 406 -640 458 -600 400 -640 426 -500 375 -640 426 -425 640 -640 391 -500 375 -432 288 -334 500 -640 480 -500 380 -640 480 -500 333 -640 480 -375 500 -640 427 -640 429 -427 640 -500 396 -640 480 -640 480 -500 334 -640 339 -480 640 -640 265 -640 480 -640 480 -640 480 -500 375 -640 480 -479 640 -640 598 -640 427 -640 383 -494 640 -640 427 -500 333 -640 360 -427 640 -640 480 -640 481 -333 500 -480 640 -500 400 -640 372 -480 640 -480 640 -640 512 -640 480 -632 640 -640 480 -453 640 -640 480 -640 480 -361 640 -612 612 -640 427 -500 339 -640 480 -500 376 -500 375 -640 480 -640 363 -640 566 -640 425 -640 480 -500 400 -640 433 -640 427 -480 640 -640 427 -640 427 -640 427 -640 427 -640 353 -471 640 -358 640 -640 427 -640 480 -480 640 -640 480 -640 480 -640 427 -640 480 -640 480 -640 426 -640 480 -640 424 -612 612 -480 640 -640 468 -640 467 -513 640 -640 483 -640 428 -612 612 -427 640 -612 612 -500 333 -500 332 -640 480 -640 427 -444 640 -640 428 -640 487 -481 640 -426 319 -640 424 -333 500 -640 445 -640 427 -640 427 -640 640 -640 478 -500 333 -640 427 -426 640 -640 427 -478 640 -640 480 -518 640 -640 360 -640 480 -640 427 -427 640 -334 500 -640 426 -640 399 -480 640 -375 500 -640 523 -375 500 -338 500 -640 640 -480 640 -640 480 -640 427 -458 640 -640 328 -480 640 -480 640 -640 513 -640 427 -640 405 -640 480 -640 480 -640 426 -640 361 -640 424 -640 443 -640 480 -640 442 -640 359 -640 480 -640 480 -640 480 -640 427 -640 480 -640 437 -427 640 -640 427 -640 480 -640 480 -640 480 -640 480 -640 426 -640 480 -640 425 -480 640 -640 480 -640 426 -640 425 -480 640 -640 426 -640 362 -480 640 -500 330 -640 433 -640 480 -480 640 -640 590 -640 254 -640 426 -640 427 -640 433 -640 429 -640 480 -460 345 -480 640 -640 427 -640 426 -640 480 -500 333 -427 640 -500 332 -480 640 -640 480 -640 640 -500 375 -640 425 -424 640 -500 333 -273 448 -640 631 -451 640 -417 640 -640 427 -640 428 -500 375 -640 459 -479 640 -640 428 -640 396 -500 375 -640 427 -640 427 -640 359 -640 424 -640 427 -640 427 -640 480 -640 228 -640 424 -640 427 -500 333 -500 375 -640 480 -613 640 -600 450 -640 480 -478 640 -640 360 -375 500 -322 471 -640 640 -500 375 -640 428 -632 640 -480 640 -500 498 -453 604 -640 480 -640 359 -500 375 -640 482 -640 478 -640 494 -640 427 -640 480 -427 640 -640 480 -525 640 -480 640 -640 480 -640 429 -640 425 -640 424 -640 480 -640 426 -500 333 -330 500 -640 425 -640 516 -640 427 -500 375 -605 640 -640 427 -640 427 -640 480 -612 612 -375 500 -640 480 -640 427 -640 563 -425 640 -640 427 -640 479 -640 480 -480 640 -640 478 -640 589 -640 427 -640 427 -482 640 -411 640 -640 238 -640 427 -640 427 -427 640 -640 427 -333 500 -640 427 -480 640 -500 375 -640 266 -640 480 -640 549 -421 500 -426 640 -375 500 -333 500 -640 340 -640 443 -640 631 -408 640 -640 552 -640 360 -427 640 -640 480 -480 640 -500 400 -640 254 -489 640 -500 333 -480 640 -640 383 -640 513 -640 428 -640 480 -640 426 -640 480 -640 483 -612 612 -640 389 -640 374 -640 480 -500 375 -640 360 -640 427 -640 480 -640 334 -480 640 -640 383 -418 640 -500 376 -640 623 -612 612 -640 426 -500 375 -423 640 -640 427 -640 480 -640 480 -640 480 -480 640 -640 426 -357 340 -427 640 -640 436 -640 426 -640 427 -469 640 -500 375 -640 453 -640 480 -500 375 -500 375 -375 500 -640 480 -640 512 -500 375 -359 640 -640 480 -320 265 -640 480 -640 480 -640 427 -480 640 -640 432 -640 480 -500 375 -640 430 -500 375 -640 444 -640 427 -640 425 -640 360 -511 640 -640 427 -480 640 -424 640 -512 640 -640 426 -640 427 -640 427 -640 640 -640 360 -640 371 -640 427 -640 480 -640 480 -426 640 -640 471 -640 426 -554 640 -640 385 -640 424 -478 640 -640 480 -500 375 -640 428 -640 478 -640 427 -500 333 -425 640 -640 480 -640 348 -640 473 -640 480 -477 640 -480 640 -640 271 -640 341 -640 456 -640 427 -427 640 -640 640 -640 429 -480 640 -640 427 -640 478 -368 500 -640 480 -640 426 -640 480 -640 478 -640 481 -500 375 -640 427 -640 480 -500 333 -640 399 -640 426 -640 478 -640 480 -375 500 -640 425 -640 454 -640 421 -640 480 -640 427 -640 640 -438 640 -435 640 -640 480 -640 320 -640 506 -640 480 -640 480 -640 640 -640 426 -383 640 -438 640 -612 612 -513 640 -640 424 -640 425 -640 359 -480 640 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -640 427 -640 427 -500 334 -640 480 -480 640 -640 451 -640 480 -640 480 -465 640 -640 320 -640 429 -640 456 -640 425 -640 426 -640 446 -500 375 -458 380 -640 355 -640 480 -640 480 -640 426 -276 640 -480 640 -640 480 -640 508 -640 386 -640 482 -413 500 -640 453 -640 640 -640 479 -640 480 -640 427 -640 300 -428 640 -640 428 -480 640 -333 500 -640 427 -640 409 -640 428 -480 640 -480 640 -640 422 -412 640 -640 441 -640 425 -427 640 -640 480 -480 640 -640 426 -480 640 -640 480 -500 341 -640 427 -640 360 -640 360 -427 640 -640 428 -640 428 -640 480 -640 425 -640 480 -640 480 -640 427 -400 300 -640 467 -500 333 -504 378 -640 457 -480 640 -640 373 -500 375 -426 640 -640 480 -640 428 -500 333 -640 427 -530 640 -640 480 -640 480 -640 427 -640 480 -640 427 -640 427 -640 480 -480 640 -383 640 -456 640 -480 640 -640 425 -640 426 -640 424 -640 480 -640 425 -640 480 -640 427 -480 640 -640 480 -640 360 -640 480 -480 640 -640 640 -300 450 -640 427 -640 425 -640 400 -640 427 -445 640 -640 480 -640 427 -640 480 -428 640 -640 296 -500 312 -640 400 -640 420 -640 381 -640 480 -375 500 -640 426 -640 426 -640 457 -500 334 -640 480 -640 480 -428 640 -640 466 -480 640 -480 640 -480 640 -640 486 -612 612 -640 480 -480 640 -640 427 -640 427 -640 425 -640 467 -640 426 -480 640 -480 640 -640 480 -640 480 -640 281 -612 612 -333 500 -500 333 -640 427 -640 480 -640 512 -640 480 -480 640 -640 480 -640 427 -640 427 -640 427 -427 640 -614 640 -640 480 -480 640 -640 427 -480 640 -640 480 -254 336 -640 360 -640 455 -640 424 -640 480 -640 480 -640 426 -375 500 -480 640 -427 640 -500 375 -640 424 -640 473 -640 457 -640 359 -500 334 -391 640 -640 428 -480 640 -640 426 -640 427 -640 347 -640 427 -640 436 -640 480 -640 481 -472 640 -500 375 -640 427 -640 424 -336 640 -640 480 -640 353 -640 411 -640 454 -600 450 -640 361 -640 480 -640 640 -640 426 -480 640 -640 480 -500 417 -640 427 -428 640 -640 480 -640 427 -640 427 -480 640 -375 500 -480 640 -640 360 -640 633 -640 427 -640 480 -640 283 -640 434 -360 640 -640 458 -640 480 -640 480 -480 640 -640 480 -640 480 -640 586 -640 640 -640 425 -375 500 -640 427 -640 436 -640 425 -640 360 -640 406 -640 427 -640 492 -640 427 -640 426 -640 424 -500 333 -640 426 -480 640 -640 427 -640 426 -640 431 -427 640 -375 500 -640 360 -640 427 -480 640 -425 640 -640 444 -640 427 -427 640 -591 640 -640 480 -640 427 -640 416 -640 480 -640 427 -640 426 -640 427 -640 440 -640 477 -640 480 -640 359 -640 311 -640 427 -640 326 -640 427 -640 480 -640 310 -640 480 -362 640 -640 480 -470 640 -480 640 -640 449 -640 481 -484 640 -332 500 -569 640 -427 640 -375 500 -612 612 -640 424 -640 467 -485 500 -612 612 -640 480 -500 332 -427 640 -640 425 -640 426 -480 640 -640 480 -640 480 -478 640 -640 480 -640 427 -640 424 -640 428 -640 426 -640 426 -640 427 -640 428 -324 640 -640 449 -500 375 -500 375 -500 281 -506 640 -427 640 -640 480 -640 480 -640 480 -427 640 -612 612 -640 489 -640 480 -480 640 -640 427 -640 424 -500 375 -640 480 -640 480 -612 612 -640 480 -640 480 -426 640 -640 361 -640 427 -640 424 -427 640 -640 428 -640 438 -640 426 -640 480 -640 427 -640 378 -640 427 -640 573 -640 427 -640 480 -640 480 -640 429 -500 333 -640 480 -640 427 -640 428 -640 426 -640 480 -425 640 -640 428 -375 500 -640 425 -640 426 -640 480 -640 480 -640 480 -375 500 -640 480 -640 427 -640 480 -500 375 -500 359 -428 640 -640 362 -640 425 -640 424 -427 640 -640 480 -640 480 -419 500 -370 640 -333 500 -640 427 -500 375 -612 612 -640 432 -640 415 -500 375 -480 640 -612 612 -640 480 -500 400 -640 427 -500 331 -500 375 -500 375 -640 480 -640 558 -640 480 -480 640 -640 480 -478 640 -480 640 -640 480 -640 427 -480 640 -640 480 -480 640 -333 426 -640 431 -500 375 -640 478 -480 640 -640 640 -640 480 -480 640 -640 418 -640 427 -640 480 -640 424 -640 444 -640 480 -526 640 -640 480 -640 480 -640 429 -640 429 -500 375 -424 640 -640 396 -640 318 -640 428 -428 640 -640 480 -433 640 -640 480 -640 427 -500 375 -640 386 -640 427 -640 427 -640 480 -640 480 -640 442 -500 332 -640 428 -360 640 -640 427 -612 612 -480 640 -640 424 -640 480 -425 640 -640 425 -640 480 -640 608 -640 428 -333 500 -427 640 -640 432 -640 480 -640 369 -640 602 -427 640 -640 427 -640 433 -640 426 -478 640 -500 333 -640 360 -640 427 -640 480 -640 351 -640 488 -640 480 -640 424 -640 427 -640 506 -453 604 -640 427 -358 500 -640 480 -500 333 -640 363 -640 640 -640 425 -480 640 -640 480 -640 480 -640 480 -640 428 -640 427 -640 433 -640 466 -640 480 -512 384 -640 411 -640 480 -483 500 -640 480 -640 427 -640 480 -640 480 -640 480 -640 483 -480 640 -640 457 -426 640 -640 480 -500 311 -640 480 -640 426 -500 333 -640 400 -480 640 -640 428 -640 427 -640 426 -640 426 -640 428 -500 333 -640 425 -640 480 -640 425 -480 640 -640 424 -500 375 -612 612 -640 480 -640 480 -427 640 -640 555 -482 640 -640 427 -640 480 -640 478 -640 427 -640 428 -640 519 -640 428 -500 333 -640 360 -640 483 -640 242 -640 480 -500 281 -500 375 -640 429 -500 375 -427 640 -640 424 -640 480 -640 427 -640 480 -640 427 -500 375 -480 640 -640 426 -640 425 -427 640 -640 480 -640 426 -500 409 -640 427 -640 425 -480 640 -500 436 -480 640 -478 640 -500 400 -640 480 -640 427 -640 428 -640 480 -640 425 -640 426 -500 375 -640 480 -640 485 -640 469 -640 426 -612 612 -640 483 -375 500 -640 426 -640 427 -500 375 -640 532 -640 429 -500 375 -640 640 -640 436 -640 427 -640 480 -375 500 -640 427 -640 426 -640 425 -426 640 -427 640 -640 428 -640 480 -640 427 -612 612 -640 479 -480 640 -640 480 -640 427 -480 640 -375 500 -375 500 -640 427 -424 640 -640 427 -640 570 -469 341 -640 480 -640 427 -480 640 -640 427 -640 427 -426 640 -640 427 -640 485 -640 453 -640 427 -427 640 -640 360 -640 480 -427 640 -640 480 -640 480 -640 429 -640 478 -640 480 -480 640 -500 337 -640 480 -640 493 -640 427 -640 424 -640 425 -640 425 -640 427 -480 640 -640 549 -639 640 -500 375 -640 480 -640 399 -640 424 -640 401 -640 429 -640 428 -640 360 -640 427 -521 640 -427 640 -640 342 -425 640 -640 427 -640 480 -640 480 -640 480 -500 375 -426 640 -500 358 -640 514 -640 480 -640 427 -640 640 -640 444 -480 640 -500 335 -640 408 -640 634 -640 427 -640 427 -640 480 -640 427 -640 426 -640 477 -375 500 -640 427 -463 640 -640 480 -418 640 -640 480 -640 480 -640 480 -640 480 -640 425 -427 640 -480 640 -640 433 -640 428 -498 640 -640 427 -640 480 -427 640 -352 500 -640 480 -424 640 -612 612 -640 433 -640 480 -640 480 -640 558 -640 425 -640 428 -640 360 -426 640 -500 286 -640 480 -640 359 -511 640 -640 516 -267 400 -475 500 -494 500 -640 264 -640 427 -640 428 -480 640 -480 640 -640 360 -480 640 -640 423 -640 480 -640 468 -500 325 -500 411 -500 375 -480 640 -640 427 -640 427 -427 640 -640 608 -640 359 -480 640 -640 480 -640 425 -640 426 -640 427 -640 423 -640 428 -640 480 -640 480 -375 500 -640 427 -640 425 -640 504 -640 427 -640 480 -640 354 -445 400 -640 409 -640 427 -400 300 -640 480 -640 427 -463 640 -640 461 -640 479 -640 425 -640 480 -640 429 -500 333 -640 428 -375 500 -612 612 -640 427 -436 640 -480 640 -500 375 -640 480 -640 526 -640 480 -448 500 -480 640 -640 422 -640 480 -640 640 -640 480 -426 640 -500 375 -480 640 -640 480 -640 424 -640 427 -640 457 -640 429 -640 427 -450 600 -425 640 -640 640 -640 229 -640 579 -640 425 -640 426 -640 480 -466 640 -640 427 -640 480 -640 424 -480 640 -640 427 -427 640 -480 319 -640 429 -480 640 -480 640 -333 500 -500 375 -534 640 -640 480 -640 427 -640 427 -640 425 -424 640 -480 640 -640 425 -640 480 -640 428 -480 640 -480 640 -640 426 -360 640 -500 375 -640 428 -640 426 -500 375 -640 480 -375 500 -375 500 -640 372 -640 480 -425 640 -640 480 -612 612 -640 640 -640 480 -500 375 -640 427 -640 506 -640 480 -640 328 -640 480 -640 401 -640 483 -640 428 -433 500 -640 371 -640 427 -640 480 -640 457 -425 640 -640 480 -481 640 -640 480 -640 480 -640 480 -640 424 -427 640 -640 618 -640 640 -500 239 -612 612 -640 421 -640 430 -640 428 -640 567 -500 375 -640 480 -612 612 -640 425 -640 426 -427 640 -640 480 -640 427 -640 348 -640 480 -512 640 -480 640 -480 640 -480 640 -640 427 -640 480 -640 480 -640 426 -427 640 -640 425 -640 512 -640 424 -640 480 -640 480 -640 480 -640 444 -425 640 -640 411 -427 640 -375 500 -640 404 -640 480 -640 480 -574 640 -500 375 -640 427 -640 480 -612 612 -500 375 -640 480 -640 457 -640 480 -640 428 -500 375 -640 480 -375 500 -640 427 -425 640 -640 368 -640 460 -640 480 -640 425 -486 640 -640 458 -426 640 -640 427 -600 400 -640 479 -500 375 -640 427 -640 480 -640 427 -640 480 -640 427 -500 375 -640 429 -612 612 -500 333 -640 480 -640 480 -400 500 -640 480 -480 640 -500 375 -180 240 -434 640 -427 640 -640 480 -640 429 -640 427 -256 640 -640 480 -640 428 -500 375 -640 395 -640 469 -500 375 -640 640 -640 428 -427 640 -640 480 -427 640 -640 427 -640 426 -426 640 -640 426 -640 480 -640 424 -640 443 -640 425 -375 500 -597 640 -640 427 -640 427 -480 640 -640 480 -480 640 -640 427 -640 480 -640 427 -640 325 -640 483 -640 480 -640 480 -640 440 -640 480 -433 500 -640 427 -640 480 -478 640 -640 426 -640 480 -640 480 -640 427 -640 424 -640 386 -640 427 -640 360 -480 640 -640 438 -500 332 -640 428 -640 480 -640 427 -640 394 -640 480 -640 237 -640 426 -612 612 -480 640 -640 427 -640 480 -410 640 -640 427 -640 480 -480 640 -500 333 -640 512 -640 480 -640 427 -480 640 -640 480 -427 640 -640 480 -480 640 -640 531 -334 500 -640 379 -480 640 -427 640 -480 640 -480 640 -640 480 -427 640 -640 384 -612 612 -640 426 -640 448 -500 337 -640 480 -640 480 -500 375 -640 480 -375 500 -640 384 -640 480 -480 640 -640 480 -640 480 -500 281 -640 519 -376 500 -640 480 -640 427 -480 640 -425 640 -640 480 -640 425 -640 426 -612 612 -640 480 -461 640 -640 425 -640 434 -640 424 -640 427 -480 640 -640 640 -640 494 -640 427 -447 640 -640 479 -640 480 -640 428 -640 426 -640 640 -480 360 -480 640 -640 360 -640 480 -426 640 -640 435 -640 480 -640 480 -640 383 -640 425 -640 480 -416 640 -640 424 -428 640 -640 481 -640 418 -500 364 -424 500 -640 360 -480 640 -640 426 -640 427 -640 422 -453 640 -428 640 -612 612 -640 480 -426 640 -600 600 -640 428 -640 480 -640 360 -640 425 -640 480 -428 640 -480 640 -360 640 -375 500 -427 640 -640 480 -640 480 -640 514 -640 480 -425 640 -640 376 -640 431 -640 427 -375 500 -640 480 -375 500 -640 480 -480 640 -427 640 -640 480 -332 500 -457 640 -640 544 -640 433 -640 513 -480 640 -640 480 -425 640 -640 480 -512 640 -500 332 -640 480 -640 425 -640 480 -640 426 -427 640 -596 446 -640 359 -640 427 -640 480 -640 480 -640 480 -480 640 -640 457 -640 480 -428 640 -640 640 -500 335 -333 500 -612 612 -640 427 -640 426 -640 480 -640 427 -500 333 -640 480 -480 640 -640 428 -480 640 -640 480 -426 640 -640 458 -375 500 -480 640 -640 427 -427 640 -425 640 -480 640 -500 376 -640 427 -500 370 -448 500 -458 640 -640 480 -640 426 -640 637 -640 480 -640 480 -512 640 -500 375 -640 427 -640 434 -500 332 -640 403 -640 480 -640 480 -640 427 -640 427 -640 426 -640 480 -427 640 -513 640 -640 424 -640 480 -640 426 -640 428 -640 480 -500 333 -640 480 -640 360 -640 480 -640 427 -640 343 -640 480 -500 377 -500 375 -425 640 -640 413 -454 640 -640 426 -375 500 -640 480 -480 640 -640 523 -640 428 -500 333 -640 427 -640 481 -640 420 -500 375 -480 640 -422 640 -640 427 -640 432 -640 265 -466 640 -608 640 -427 640 -480 640 -640 426 -640 427 -640 360 -640 427 -480 640 -640 480 -640 426 -640 427 -640 420 -640 427 -612 612 -375 500 -423 640 -414 500 -480 640 -480 640 -640 427 -640 427 -640 425 -640 429 -612 612 -457 640 -640 640 -600 640 -640 480 -426 640 -640 427 -500 332 -428 640 -640 463 -640 426 -640 480 -480 640 -640 480 -640 461 -640 441 -496 640 -640 508 -640 428 -427 640 -640 480 -640 480 -612 612 -640 480 -448 640 -500 333 -426 640 -640 480 -426 640 -480 640 -640 480 -500 335 -231 500 -432 640 -640 427 -480 640 -640 427 -480 640 -640 441 -640 480 -375 500 -640 427 -640 426 -640 480 -640 423 -427 640 -640 480 -640 425 -640 429 -559 640 -640 519 -478 640 -640 480 -480 640 -640 512 -640 480 -640 427 -640 404 -427 640 -640 480 -640 480 -640 427 -640 480 -500 375 -640 484 -480 640 -640 614 -480 640 -640 427 -425 640 -640 426 -640 426 -640 458 -640 480 -640 458 -640 426 -480 640 -640 480 -500 338 -640 480 -640 427 -640 428 -612 612 -480 640 -640 426 -375 500 -480 640 -640 427 -640 425 -516 640 -500 420 -640 424 -640 427 -640 633 -612 612 -479 640 -640 427 -640 424 -640 427 -480 640 -500 375 -480 640 -612 612 -640 482 -640 480 -543 640 -480 640 -640 427 -640 480 -640 480 -640 425 -640 501 -640 480 -640 454 -640 427 -640 425 -473 640 -640 425 -480 640 -612 612 -428 640 -640 506 -640 480 -640 579 -480 640 -640 425 -640 427 -640 458 -640 423 -640 478 -640 480 -640 426 -612 612 -640 517 -303 500 -427 640 -640 400 -426 640 -640 480 -500 375 -640 434 -640 428 -640 480 -640 427 -500 333 -640 480 -640 427 -480 640 -640 480 -478 640 -640 424 -612 612 -500 333 -640 480 -640 480 -640 483 -514 640 -426 640 -640 480 -640 480 -480 640 -640 360 -500 375 -640 480 -426 640 -640 428 -640 461 -640 483 -640 471 -640 428 -427 640 -640 480 -426 640 -480 640 -375 500 -401 640 -640 514 -500 333 -640 424 -640 480 -640 502 -640 480 -640 372 -640 477 -640 426 -640 426 -480 640 -640 427 -500 375 -480 640 -640 478 -640 480 -427 640 -640 427 -612 612 -640 426 -500 333 -480 640 -500 333 -425 640 -640 427 -480 640 -640 480 -437 640 -640 360 -640 416 -640 427 -500 308 -640 427 -640 480 -375 500 -640 480 -640 360 -426 640 -427 640 -640 426 -640 383 -425 640 -640 480 -640 427 -640 421 -640 480 -640 428 -640 478 -640 503 -640 458 -427 640 -500 375 -640 480 -640 480 -640 427 -640 495 -480 640 -467 607 -640 425 -428 640 -640 448 -480 640 -640 361 -640 480 -640 426 -500 375 -640 389 -640 480 -480 640 -640 451 -500 375 -480 640 -640 428 -640 480 -500 375 -640 478 -426 640 -640 480 -640 480 -640 526 -500 364 -640 427 -383 500 -640 480 -500 355 -500 375 -640 481 -500 400 -640 480 -612 612 -640 360 -640 480 -640 426 -479 640 -640 480 -612 612 -375 500 -640 486 -500 375 -640 498 -640 427 -500 375 -640 427 -480 640 -640 480 -640 428 -612 612 -640 427 -500 375 -640 475 -640 425 -640 523 -480 640 -427 640 -640 480 -640 480 -640 480 -640 427 -480 640 -640 506 -640 427 -640 480 -640 528 -640 480 -640 480 -426 640 -640 425 -640 426 -640 427 -640 278 -500 335 -500 281 -427 640 -375 500 -427 640 -640 438 -640 427 -480 640 -640 360 -640 480 -640 480 -640 389 -375 500 -640 427 -640 427 -423 640 -640 480 -612 612 -427 640 -388 640 -640 425 -480 640 -640 480 -425 640 -500 375 -427 640 -425 640 -640 480 -640 448 -640 480 -375 500 -640 480 -640 640 -427 640 -375 500 -478 640 -424 640 -480 640 -426 640 -478 640 -640 480 -334 500 -640 426 -640 426 -640 425 -480 640 -640 360 -640 480 -640 428 -640 480 -640 424 -640 424 -640 427 -640 439 -640 426 -500 375 -640 425 -640 480 -480 640 -640 426 -640 427 -500 333 -640 480 -640 300 -640 404 -510 340 -640 427 -640 478 -480 640 -640 426 -640 483 -640 424 -640 319 -640 321 -500 333 -640 408 -640 427 -640 434 -640 457 -640 427 -640 426 -375 500 -500 333 -640 427 -640 478 -640 480 -480 640 -640 426 -640 427 -640 413 -640 480 -640 433 -428 640 -640 476 -387 518 -640 364 -640 480 -640 474 -640 480 -500 293 -480 640 -640 426 -500 500 -640 457 -346 500 -640 480 -480 640 -480 640 -500 334 -480 640 -640 478 -640 480 -640 427 -640 480 -640 470 -640 441 -375 500 -418 500 -640 427 -480 640 -425 640 -432 432 -640 425 -500 361 -640 388 -375 500 -640 425 -640 426 -457 640 -499 500 -640 480 -427 640 -640 361 -640 428 -484 640 -640 425 -640 480 -640 476 -640 480 -640 480 -640 427 -375 500 -583 640 -640 480 -480 640 -375 500 -612 612 -480 640 -500 327 -480 640 -640 427 -612 612 -426 640 -514 640 -480 640 -640 427 -640 400 -640 427 -640 305 -640 480 -640 480 -640 427 -466 640 -640 480 -640 480 -640 427 -369 500 -640 480 -640 425 -640 481 -427 640 -640 479 -440 640 -478 640 -640 329 -428 640 -640 464 -640 427 -640 457 -640 508 -640 480 -640 391 -500 375 -640 478 -640 431 -375 500 -480 640 -640 594 -428 640 -640 446 -500 332 -480 640 -411 500 -640 427 -640 485 -640 480 -640 401 -640 425 -640 359 -640 640 -640 480 -640 427 -424 640 -640 480 -640 426 -640 480 -640 480 -500 375 -640 480 -640 428 -375 500 -425 640 -640 480 -640 485 -640 480 -425 640 -480 640 -640 428 -640 480 -640 434 -640 427 -640 480 -640 508 -640 480 -640 425 -640 427 -342 500 -640 426 -612 612 -428 640 -640 427 -500 375 -612 612 -640 427 -426 640 -375 500 -480 640 -640 463 -640 480 -281 500 -375 500 -500 375 -640 427 -375 500 -640 480 -640 427 -640 359 -640 425 -640 480 -480 640 -640 406 -640 426 -640 620 -640 480 -500 375 -640 427 -500 375 -480 640 -640 480 -640 362 -491 640 -480 640 -640 383 -640 480 -500 375 -640 426 -640 480 -640 480 -640 480 -640 426 -640 428 -640 480 -426 640 -427 640 -640 423 -640 427 -500 375 -640 476 -500 375 -640 480 -427 640 -640 480 -640 480 -612 612 -640 427 -640 426 -640 512 -333 500 -640 458 -640 478 -427 640 -640 427 -640 480 -640 480 -640 427 -640 382 -640 480 -500 313 -375 500 -640 480 -640 457 -640 428 -640 481 -427 640 -640 428 -640 363 -427 640 -640 425 -640 426 -425 640 -640 427 -640 425 -640 427 -640 480 -640 481 -423 640 -640 563 -640 427 -640 480 -612 612 -640 426 -640 480 -296 446 -500 333 -640 480 -640 425 -640 480 -640 480 -500 333 -618 640 -640 480 -640 427 -500 375 -500 333 -480 640 -423 640 -428 640 -426 640 -500 334 -640 480 -640 480 -640 424 -640 469 -640 439 -427 640 -640 427 -426 640 -640 480 -480 640 -640 480 -500 333 -640 426 -640 480 -500 281 -640 427 -640 481 -640 480 -640 427 -640 640 -640 427 -640 472 -640 480 -480 640 -640 480 -640 544 -640 489 -480 640 -500 429 -640 428 -500 333 -480 640 -640 326 -480 640 -500 375 -640 480 -640 413 -640 480 -640 480 -640 426 -640 426 -640 480 -640 480 -612 612 -640 426 -640 478 -640 480 -640 447 -426 640 -640 427 -480 342 -640 426 -500 335 -332 500 -435 640 -640 501 -640 427 -366 640 -640 328 -500 376 -500 333 -640 517 -640 360 -640 480 -640 427 -640 480 -640 426 -640 398 -640 426 -640 425 -640 640 -427 640 -640 427 -437 640 -640 431 -640 427 -640 490 -640 427 -640 428 -640 480 -640 480 -640 433 -500 375 -640 480 -640 480 -640 480 -640 427 -640 347 -640 480 -640 480 -640 379 -353 640 -640 360 -451 640 -640 400 -640 428 -375 500 -640 457 -612 612 -640 480 -427 640 -480 640 -640 480 -640 480 -640 428 -640 425 -480 640 -426 640 -640 427 -500 334 -640 281 -640 480 -400 500 -428 640 -640 427 -482 640 -640 428 -640 427 -640 480 -640 480 -640 434 -500 334 -500 333 -640 427 -427 640 -640 426 -640 385 -640 480 -480 640 -480 640 -640 604 -640 426 -640 454 -640 480 -640 480 -640 569 -640 427 -640 425 -640 480 -640 439 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -500 364 -640 426 -640 480 -425 640 -640 640 -480 640 -480 640 -640 480 -474 640 -640 427 -640 396 -498 500 -640 480 -500 375 -440 500 -427 640 -640 480 -500 349 -428 640 -640 427 -640 427 -640 427 -640 461 -640 486 -640 480 -480 640 -640 473 -640 427 -640 425 -640 360 -640 428 -640 426 -640 478 -640 326 -640 399 -640 480 -640 400 -640 427 -640 312 -640 640 -633 640 -580 580 -640 500 -640 427 -640 480 -640 427 -640 480 -500 333 -640 498 -468 640 -375 500 -430 640 -640 480 -480 640 -640 425 -480 640 -383 640 -500 333 -640 426 -468 640 -640 480 -640 480 -500 375 -640 480 -413 640 -640 383 -640 480 -500 375 -500 333 -426 640 -640 486 -500 375 -427 640 -640 480 -640 324 -640 480 -375 500 -480 640 -375 500 -612 612 -500 375 -612 612 -640 541 -640 481 -427 640 -640 480 -640 480 -480 640 -640 480 -612 612 -427 640 -640 480 -640 427 -640 426 -529 640 -500 375 -640 416 -640 480 -567 640 -640 554 -640 478 -640 427 -359 640 -640 383 -640 512 -640 427 -500 332 -508 640 -640 424 -640 278 -375 500 -480 640 -640 481 -640 480 -459 640 -450 600 -640 480 -548 640 -640 640 -640 480 -425 640 -640 425 -640 427 -640 480 -640 426 -640 480 -640 399 -640 480 -640 427 -640 456 -640 480 -640 480 -640 480 -458 640 -640 428 -640 480 -500 375 -640 478 -640 480 -640 418 -640 480 -640 427 -640 589 -640 400 -480 640 -375 500 -500 332 -640 480 -640 423 -640 427 -640 480 -640 426 -640 480 -640 480 -428 640 -640 480 -640 480 -640 427 -640 426 -640 480 -500 375 -480 640 -640 480 -640 515 -426 640 -640 427 -612 612 -640 480 -500 357 -480 640 -640 480 -640 359 -427 640 -426 640 -640 427 -640 427 -640 480 -640 427 -500 375 -640 422 -480 640 -640 427 -480 640 -640 480 -350 500 -640 425 -640 480 -480 640 -640 480 -640 427 -640 427 -640 461 -640 426 -640 502 -612 612 -640 480 -640 480 -640 424 -500 375 -640 433 -640 480 -640 480 -640 480 -640 425 -480 640 -427 640 -640 423 -640 480 -640 427 -640 480 -640 427 -640 480 -640 324 -640 478 -480 640 -640 480 -640 480 -640 640 -640 427 -640 480 -640 480 -320 500 -640 424 -500 375 -480 640 -480 640 -640 480 -480 640 -640 480 -640 359 -480 640 -640 427 -427 640 -180 240 -500 333 -640 516 -500 348 -253 130 -375 500 -640 279 -640 427 -640 427 -640 480 -500 375 -427 640 -640 424 -640 426 -500 375 -375 500 -640 427 -640 423 -640 427 -427 640 -640 478 -640 480 -640 427 -500 334 -640 480 -640 480 -500 333 -450 338 -640 584 -627 640 -640 480 -480 640 -640 480 -640 481 -640 480 -426 640 -640 425 -640 553 -640 480 -612 612 -500 334 -500 375 -640 480 -640 434 -640 480 -640 428 -640 480 -444 640 -640 480 -640 480 -612 612 -500 375 -640 427 -426 640 -640 427 -387 640 -423 640 -640 360 -640 480 -640 480 -500 375 -640 480 -640 427 -640 480 -640 528 -640 479 -640 480 -563 640 -640 478 -640 480 -500 286 -500 415 -640 533 -640 544 -640 427 -480 640 -640 427 -640 426 -640 426 -500 500 -640 480 -640 480 -480 640 -640 426 -426 640 -500 397 -551 640 -640 427 -640 502 -640 401 -500 333 -640 427 -640 480 -354 640 -640 449 -500 333 -640 418 -408 640 -431 640 -640 480 -640 480 -612 612 -448 336 -640 480 -640 444 -400 600 -640 427 -640 480 -427 640 -612 612 -640 425 -640 427 -640 359 -640 512 -375 500 -426 640 -640 425 -640 426 -640 426 -640 417 -640 427 -640 480 -612 612 -640 489 -640 425 -500 336 -427 640 -640 480 -430 318 -640 480 -640 426 -429 640 -640 426 -427 640 -640 360 -640 480 -640 427 -640 427 -640 480 -640 480 -640 368 -640 427 -640 426 -640 480 -640 411 -640 482 -640 480 -640 477 -480 640 -640 480 -640 480 -640 480 -500 500 -443 640 -640 426 -640 425 -640 480 -640 480 -427 640 -640 480 -403 640 -533 640 -640 425 -640 632 -612 612 -500 332 -335 500 -640 480 -550 550 -640 480 -640 480 -500 375 -640 480 -375 500 -427 640 -640 424 -640 427 -640 425 -640 427 -640 458 -426 640 -640 478 -640 426 -640 359 -500 401 -640 360 -640 438 -640 425 -480 640 -480 640 -640 480 -640 429 -480 640 -480 640 -500 333 -480 640 -640 459 -640 427 -640 426 -500 333 -413 640 -530 530 -640 428 -640 480 -480 640 -640 480 -640 480 -640 449 -640 426 -586 640 -640 480 -359 640 -428 640 -500 335 -640 426 -640 640 -640 426 -640 426 -640 426 -640 480 -640 634 -640 427 -640 480 -640 480 -500 375 -500 333 -640 480 -426 640 -640 441 -640 501 -500 474 -640 480 -640 427 -640 427 -478 640 -424 640 -500 375 -640 426 -640 427 -640 480 -480 640 -462 640 -640 480 -500 333 -240 320 -590 397 -640 480 -640 400 -640 428 -640 480 -500 375 -640 427 -640 480 -640 396 -640 480 -480 640 -500 375 -640 480 -640 427 -333 500 -640 458 -453 640 -640 427 -640 427 -640 427 -480 640 -640 427 -500 375 -640 367 -427 640 -640 512 -640 426 -640 478 -640 480 -640 352 -410 640 -500 375 -640 425 -500 375 -424 640 -640 425 -480 640 -462 557 -640 480 -640 480 -640 427 -500 375 -640 470 -500 375 -375 500 -500 375 -427 640 -480 640 -480 640 -480 640 -640 360 -640 420 -640 427 -430 640 -383 640 -640 431 -332 500 -640 485 -500 333 -500 331 -375 500 -640 480 -640 426 -640 480 -640 640 -640 427 -427 640 -640 480 -640 480 -640 428 -480 640 -640 480 -640 427 -640 427 -480 640 -640 427 -640 480 -480 640 -640 480 -640 480 -478 640 -640 427 -640 480 -640 427 -427 640 -640 480 -480 640 -500 332 -640 480 -426 640 -640 480 -640 441 -640 427 -640 480 -478 640 -640 480 -640 480 -640 418 -640 427 -500 332 -480 640 -640 248 -640 480 -425 640 -480 640 -640 383 -320 427 -640 480 -480 640 -640 639 -640 480 -427 640 -481 640 -640 533 -640 426 -640 427 -612 612 -500 333 -640 480 -640 465 -536 640 -500 375 -640 427 -640 426 -427 640 -640 426 -640 427 -375 500 -640 213 -640 512 -640 480 -427 640 -640 425 -640 480 -640 480 -406 640 -640 426 -640 640 -640 480 -640 480 -640 480 -393 640 -640 427 -640 427 -500 375 -640 428 -640 428 -640 359 -640 487 -640 478 -640 640 -500 332 -640 427 -640 480 -640 261 -375 500 -640 426 -640 428 -640 405 -500 375 -331 500 -480 640 -640 480 -640 427 -640 480 -640 480 -640 427 -640 402 -500 375 -640 427 -478 640 -640 640 -375 500 -640 427 -640 424 -640 480 -640 426 -640 425 -480 640 -640 426 -640 424 -640 427 -640 427 -375 500 -640 427 -640 427 -640 480 -488 640 -640 430 -480 640 -640 480 -640 480 -640 427 -640 480 -640 294 -640 480 -640 480 -640 427 -640 427 -640 427 -640 427 -500 375 -500 375 -640 480 -640 480 -640 427 -640 480 -640 480 -640 508 -500 499 -640 431 -640 424 -375 500 -338 480 -640 427 -640 427 -640 479 -612 612 -440 640 -640 425 -500 291 -426 640 -640 480 -480 640 -426 640 -640 426 -640 427 -640 424 -281 446 -500 319 -640 427 -640 381 -640 427 -640 360 -520 347 -640 427 -640 425 -640 428 -640 427 -640 318 -332 500 -640 480 -640 428 -640 360 -640 479 -401 500 -640 480 -640 427 -640 480 -640 418 -640 453 -480 640 -360 640 -500 375 -640 426 -640 480 -640 480 -640 457 -480 640 -640 427 -283 500 -640 480 -640 514 -640 480 -640 427 -426 640 -500 375 -640 427 -500 375 -500 331 -497 640 -637 640 -640 428 -640 480 -640 479 -640 478 -640 480 -640 480 -500 333 -640 426 -640 427 -640 353 -640 360 -640 427 -640 427 -640 427 -640 478 -640 480 -640 424 -640 480 -480 640 -640 502 -640 480 -478 640 -478 640 -640 426 -424 640 -640 428 -425 352 -640 480 -640 418 -640 418 -640 480 -425 640 -640 428 -612 612 -640 380 -640 427 -640 480 -640 480 -375 500 -640 480 -640 425 -640 519 -500 375 -500 333 -640 480 -640 480 -640 480 -640 598 -500 332 -640 427 -640 484 -640 470 -640 383 -500 375 -640 428 -640 479 -640 480 -374 500 -612 612 -640 428 -425 640 -640 391 -640 480 -640 503 -640 480 -427 640 -640 445 -640 480 -640 362 -640 424 -500 335 -480 640 -426 640 -640 473 -517 640 -427 640 -640 401 -640 480 -640 480 -640 386 -500 500 -612 612 -640 427 -640 549 -640 640 -640 480 -640 480 -640 465 -640 361 -500 375 -500 334 -640 428 -640 480 -480 640 -640 426 -460 640 -418 640 -640 427 -612 612 -640 491 -427 640 -640 480 -640 427 -640 480 -500 375 -640 480 -640 480 -640 480 -640 427 -427 640 -612 612 -640 538 -480 640 -640 424 -640 359 -426 640 -640 360 -450 287 -640 531 -500 375 -640 425 -640 480 -640 427 -612 612 -640 480 -375 500 -500 332 -640 480 -640 424 -360 640 -500 300 -640 640 -480 640 -640 360 -640 480 -640 480 -539 640 -427 640 -640 480 -640 393 -427 640 -640 314 -640 427 -500 375 -640 480 -640 480 -640 480 -640 480 -640 480 -640 427 -500 400 -640 480 -640 454 -640 425 -500 377 -500 375 -640 403 -640 469 -640 344 -640 480 -640 415 -320 480 -500 375 -426 640 -640 480 -640 440 -640 428 -640 480 -451 640 -425 640 -640 480 -640 480 -480 640 -640 360 -480 640 -640 480 -480 640 -640 427 -640 480 -640 640 -640 427 -428 640 -640 588 -640 427 -640 355 -500 277 -640 427 -612 612 -640 480 -500 375 -640 455 -640 428 -640 415 -500 375 -640 426 -640 427 -500 357 -426 640 -400 500 -640 480 -500 375 -424 640 -640 480 -640 480 -640 360 -640 480 -640 427 -239 640 -640 480 -640 480 -640 428 -640 426 -640 480 -500 333 -640 427 -640 436 -478 640 -640 478 -640 427 -640 466 -640 408 -640 428 -640 310 -583 640 -640 480 -640 447 -640 480 -640 429 -640 427 -640 426 -640 427 -500 375 -500 375 -640 478 -480 640 -640 640 -500 332 -458 640 -640 427 -500 324 -640 427 -640 427 -640 426 -640 428 -640 427 -640 640 -640 480 -640 476 -640 480 -640 435 -640 419 -640 428 -357 500 -640 360 -640 427 -640 427 -500 333 -640 480 -640 480 -640 480 -426 640 -640 480 -640 380 -640 478 -640 390 -640 480 -612 612 -480 640 -640 426 -640 533 -640 426 -640 424 -429 640 -512 640 -640 480 -480 640 -640 427 -480 640 -427 640 -640 426 -640 480 -427 640 -640 480 -640 480 -480 640 -640 425 -640 427 -640 427 -640 429 -640 427 -480 640 -640 429 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -640 480 -640 480 -500 333 -640 480 -640 427 -517 640 -640 480 -500 375 -640 427 -640 626 -640 427 -500 375 -500 333 -640 480 -640 427 -500 375 -640 480 -640 480 -640 429 -500 375 -480 640 -640 480 -640 640 -640 480 -640 360 -640 427 -640 427 -640 403 -640 480 -426 640 -640 426 -640 480 -640 428 -640 640 -543 640 -500 500 -640 427 -421 640 -640 428 -612 612 -640 427 -640 427 -640 438 -500 334 -500 375 -640 427 -426 640 -640 640 -423 640 -612 612 -640 280 -640 480 -640 426 -640 463 -640 480 -500 333 -478 640 -640 480 -640 424 -480 640 -640 480 -500 375 -640 480 -640 427 -640 427 -640 426 -640 427 -640 480 -640 480 -426 640 -640 424 -640 428 -500 375 -460 640 -500 333 -640 426 -640 425 -640 640 -640 480 -640 480 -640 426 -500 333 -427 640 -640 480 -612 612 -640 480 -640 484 -480 640 -480 640 -500 332 -640 509 -436 500 -640 427 -640 480 -500 336 -480 640 -360 640 -480 640 -640 480 -640 480 -500 333 -640 427 -640 426 -640 452 -640 427 -424 640 -427 640 -640 480 -640 427 -335 500 -375 500 -313 500 -500 309 -640 480 -640 613 -367 640 -640 494 -640 480 -640 489 -612 612 -640 425 -640 404 -480 640 -480 640 -640 601 -375 500 -640 441 -379 640 -640 426 -640 427 -640 480 -480 640 -640 427 -640 426 -640 427 -640 480 -375 500 -500 333 -500 375 -640 480 -480 640 -640 480 -72 51 -640 427 -480 640 -640 480 -640 480 -640 424 -640 360 -640 433 -481 640 -640 480 -640 640 -640 431 -640 426 -640 426 -640 480 -640 427 -640 480 -640 480 -479 640 -640 480 -640 496 -640 428 -640 427 -640 480 -640 480 -425 640 -640 427 -640 427 -640 422 -640 480 -500 375 -640 426 -640 480 -640 427 -640 480 -640 480 -640 529 -640 480 -640 428 -640 443 -480 640 -640 636 -640 378 -640 480 -383 500 -640 472 -640 427 -456 640 -640 427 -640 426 -640 427 -640 389 -378 500 -640 459 -640 427 -500 375 -331 500 -640 416 -640 640 -500 375 -640 480 -480 640 -455 640 -640 480 -500 375 -640 359 -433 640 -640 480 -640 480 -480 640 -427 640 -640 348 -640 479 -640 640 -640 478 -640 480 -320 240 -427 640 -640 427 -640 427 -640 426 -640 433 -640 480 -640 480 -360 480 -640 434 -480 640 -427 640 -640 465 -640 359 -480 640 -640 480 -640 480 -640 480 -640 480 -640 480 -640 389 -375 500 -640 451 -640 468 -640 474 -640 428 -600 450 -640 480 -612 612 -640 359 -500 333 -608 640 -424 640 -333 500 -640 481 -480 640 -428 500 -640 427 -640 458 -640 480 -640 426 -485 640 -500 375 -640 427 -640 427 -640 480 -640 480 -427 640 -640 480 -640 426 -640 424 -640 480 -640 480 -414 640 -500 500 -480 640 -457 640 -427 640 -500 498 -640 427 -387 500 -480 640 -640 428 -640 480 -480 640 -640 480 -640 482 -480 640 -640 427 -640 480 -640 426 -428 640 -500 332 -640 480 -576 494 -640 480 -640 480 -640 427 -640 426 -640 474 -640 482 -640 480 -427 640 -300 480 -640 360 -640 427 -612 612 -640 441 -640 480 -640 480 -640 478 -640 426 -640 480 -640 399 -403 640 -640 640 -500 375 -640 480 -640 427 -640 480 -640 427 -640 427 -640 394 -640 360 -640 428 -500 328 -612 612 -640 425 -277 500 -480 640 -640 508 -640 524 -427 640 -612 612 -640 427 -640 419 -372 500 -640 478 -640 427 -425 640 -640 480 -500 375 -480 640 -640 480 -480 640 -640 480 -640 426 -480 640 -640 427 -427 640 -500 375 -640 450 -640 480 -500 375 -612 612 -500 375 -480 640 -480 640 -480 640 -640 480 -480 640 -640 271 -480 640 -500 333 -640 480 -481 640 -427 640 -640 360 -640 427 -640 236 -640 480 -640 431 -480 640 -375 500 -640 426 -640 424 -640 480 -640 480 -441 640 -640 427 -427 640 -640 480 -500 375 -640 427 -480 640 -640 360 -640 480 -427 640 -640 427 -640 480 -640 427 -500 333 -480 640 -375 500 -433 500 -640 480 -640 480 -500 370 -640 360 -640 389 -436 640 -640 480 -640 480 -640 426 -427 640 -640 640 -576 384 -640 480 -500 415 -500 500 -640 480 -500 402 -640 480 -640 427 -333 500 -640 426 -500 375 -640 425 -440 500 -640 427 -640 480 -427 640 -640 426 -640 480 -333 500 -640 474 -640 480 -478 640 -480 640 -640 478 -640 427 -630 640 -500 375 -640 480 -640 458 -640 425 -640 480 -500 336 -332 500 -640 436 -640 480 -480 640 -640 512 -434 500 -640 426 -640 480 -478 640 -640 479 -640 483 -640 437 -640 436 -640 427 -640 425 -640 483 -480 640 -500 375 -640 428 -500 334 -359 473 -640 427 -640 288 -640 480 -640 480 -640 480 -480 640 -640 480 -500 375 -640 480 -640 480 -600 450 -500 335 -480 640 -640 480 -500 400 -640 480 -480 640 -500 333 -612 612 -640 480 -500 359 -375 500 -640 480 -640 413 -640 480 -640 480 -424 640 -640 494 -640 427 -640 480 -640 423 -640 426 -640 480 -640 480 -500 375 -480 640 -640 427 -640 480 -640 480 -640 427 -640 383 -425 640 -480 640 -640 427 -640 470 -640 427 -423 640 -480 640 -640 424 -500 336 -333 500 -640 480 -640 424 -640 427 -640 428 -500 375 -478 640 -640 512 -640 506 -640 480 -375 500 -640 396 -640 427 -640 428 -480 640 -333 500 -640 427 -500 333 -483 640 -640 480 -500 332 -640 426 -369 500 -640 396 -640 480 -640 427 -424 640 -640 424 -640 480 -427 640 -640 480 -458 640 -640 480 -480 640 -640 378 -640 601 -640 480 -640 480 -640 427 -640 480 -640 480 -320 240 -640 506 -640 426 -640 484 -427 640 -375 500 -640 426 -500 375 -640 480 -640 443 -640 428 -427 640 -504 337 -640 296 -375 500 -500 375 -480 640 -640 480 -296 442 -432 345 -375 500 -640 427 -478 640 -640 478 -640 494 -500 333 -640 480 -500 400 -427 640 -406 640 -425 640 -640 424 -640 427 -640 427 -640 458 -640 480 -612 612 -640 480 -500 375 -640 427 -640 480 -549 640 -500 281 -640 640 -500 333 -312 400 -500 375 -640 522 -500 375 -640 478 -640 427 -640 626 -640 480 -620 486 -640 422 -640 480 -506 640 -640 425 -640 480 -640 427 -640 425 -640 360 -640 512 -500 375 -640 480 -640 428 -640 370 -612 612 -640 480 -375 500 -640 605 -500 334 -640 480 -640 480 -640 481 -426 640 -500 375 -624 415 -640 400 -427 640 -481 500 -640 361 -425 640 -640 429 -640 360 -640 499 -640 480 -427 640 -640 424 -480 640 -640 427 -640 440 -500 375 -640 480 -640 480 -480 640 -640 521 -640 427 -471 500 -427 640 -640 479 -640 480 -500 375 -640 428 -640 480 -640 428 -500 333 -480 640 -640 480 -640 480 -640 480 -640 480 -640 480 -640 426 -500 334 -640 427 -427 640 -640 480 -640 480 -515 640 -480 640 -640 480 -572 640 -640 480 -640 480 -640 425 -640 480 -640 480 -640 360 -500 332 -640 360 -480 640 -480 640 -640 427 -640 480 -640 426 -640 480 -427 640 -427 640 -640 479 -640 640 -500 375 -640 457 -640 479 -640 376 -427 640 -640 426 -640 524 -392 640 -640 425 -640 429 -640 480 -640 426 -640 480 -640 512 -640 427 -500 375 -640 480 -640 480 -480 640 -480 640 -640 427 -640 480 -640 480 -426 640 -640 427 -640 494 -640 480 -375 500 -640 300 -640 480 -640 452 -640 480 -640 578 -640 427 -640 442 -640 480 -640 424 -480 640 -494 500 -233 350 -640 423 -640 640 -640 360 -427 640 -480 640 -640 427 -428 640 -640 427 -640 427 -640 480 -640 480 -500 444 -480 640 -640 480 -640 518 -427 640 -500 333 -640 480 -640 427 -480 640 -640 427 -640 480 -640 425 -640 427 -640 402 -640 427 -640 480 -640 425 -640 630 -429 640 -640 480 -640 640 -640 480 -480 640 -500 333 -640 346 -489 640 -640 427 -640 426 -640 144 -640 424 -640 480 -640 417 -640 480 -640 640 -640 426 -426 640 -640 480 -640 414 -300 357 -640 480 -640 427 -383 640 -480 640 -480 640 -375 500 -640 427 -500 375 -640 427 -429 640 -512 640 -640 473 -427 640 -640 426 -640 427 -640 241 -640 428 -640 478 -640 425 -456 640 -500 375 -640 480 -640 273 -500 375 -640 426 -500 375 -425 640 -500 375 -640 427 -612 612 -640 480 -422 640 -640 427 -427 640 -480 640 -500 375 -529 640 -640 501 -640 480 -640 424 -640 427 -640 530 -375 500 -640 427 -500 333 -640 428 -640 360 -640 480 -612 612 -500 500 -640 427 -640 480 -640 424 -480 640 -425 640 -640 480 -375 500 -500 375 -640 424 -600 464 -500 333 -500 500 -640 466 -640 427 -640 480 -640 348 -609 640 -640 480 -640 408 -640 480 -427 640 -640 480 -640 480 -640 416 -500 375 -640 569 -326 220 -419 640 -640 480 -375 500 -375 500 -640 427 -640 461 -480 640 -640 481 -427 640 -640 427 -640 480 -640 480 -640 427 -640 480 -480 640 -640 478 -640 427 -640 480 -375 500 -640 427 -500 375 -493 640 -500 375 -427 640 -640 480 -431 640 -640 480 -640 427 -640 428 -428 640 -640 360 -415 640 -640 480 -332 500 -640 427 -640 428 -640 444 -640 480 -428 640 -500 359 -640 427 -640 480 -640 480 -425 640 -375 500 -160 120 -500 481 -506 640 -640 427 -640 480 -640 448 -640 480 -612 612 -640 480 -640 427 -640 480 -640 428 -640 434 -640 480 -500 375 -640 480 -491 640 -640 425 -640 480 -640 474 -640 427 -640 283 -640 360 -640 427 -640 359 -640 360 -427 640 -640 480 -640 480 -480 640 -640 428 -640 426 -427 640 -640 427 -640 427 -640 463 -480 640 -640 433 -640 587 -640 425 -640 640 -640 427 -640 424 -640 427 -640 426 -640 480 -640 427 -500 339 -640 427 -640 427 -640 480 -480 640 -640 480 -640 480 -480 640 -640 480 -640 427 -640 426 -640 427 -640 427 -640 360 -640 480 -640 480 -480 640 -640 480 -375 500 -640 426 -640 439 -480 640 -500 375 -427 640 -640 427 -640 427 -512 640 -640 425 -640 494 -424 640 -480 640 -640 427 -640 480 -352 288 -640 360 -640 428 -427 640 -375 500 -640 427 -640 361 -297 500 -640 360 -480 640 -640 480 -612 612 -640 473 -640 519 -640 480 -640 425 -427 640 -640 480 -500 333 -480 640 -640 427 -640 484 -640 480 -640 483 -427 640 -427 640 -640 480 -640 480 -640 556 -500 331 -640 426 -480 640 -640 427 -480 640 -640 429 -500 375 -500 375 -640 425 -426 640 -640 480 -480 640 -484 640 -640 253 -640 431 -640 428 -640 427 -427 640 -398 640 -640 429 -640 360 -612 612 -480 640 -640 480 -640 640 -375 500 -640 472 -640 458 -640 640 -640 427 -640 428 -640 621 -500 334 -640 424 -640 480 -640 480 -640 426 -640 427 -427 640 -640 483 -640 428 -640 424 -516 640 -538 480 -427 640 -640 480 -640 480 -640 640 -406 640 -240 320 -500 375 -640 360 -612 612 -476 640 -640 427 -640 530 -640 426 -500 375 -640 396 -640 480 -480 640 -640 494 -640 508 -640 480 -640 640 -640 426 -432 640 -443 640 -640 427 -640 432 -640 480 -640 427 -427 640 -500 375 -612 612 -640 426 -640 480 -640 361 -331 500 -640 425 -640 480 -640 427 -480 640 -640 480 -640 427 -640 425 -640 428 -640 360 -500 374 -480 640 -427 640 -426 640 -640 427 -640 427 -640 463 -500 333 -640 426 -500 337 -373 640 -640 491 -427 640 -612 612 -640 423 -640 480 -640 480 -640 573 -640 464 -640 427 -640 480 -640 480 -350 375 -640 623 -612 612 -640 480 -640 479 -640 360 -315 315 -640 481 -640 427 -640 480 -480 640 -640 426 -640 425 -640 428 -640 427 -640 480 -640 478 -640 427 -375 500 -640 398 -640 427 -640 426 -427 640 -640 425 -640 362 -640 480 -500 375 -396 500 -500 375 -640 425 -376 500 -640 480 -426 640 -500 333 -383 640 -640 425 -640 425 -426 640 -640 480 -640 360 -640 489 -640 480 -612 612 -480 640 -640 479 -500 334 -640 480 -332 500 -332 500 -480 640 -375 500 -640 480 -640 480 -640 428 -500 166 -448 500 -640 480 -640 382 -640 360 -640 480 -452 640 -480 640 -640 480 -640 427 -640 427 -640 404 -640 480 -480 640 -640 480 -488 640 -640 480 -640 426 -640 427 -640 480 -434 640 -500 333 -480 640 -500 375 -640 480 -640 480 -640 426 -640 425 -334 500 -640 429 -640 361 -640 427 -320 640 -640 480 -480 640 -640 512 -640 472 -500 375 -640 480 -640 640 -640 425 -640 640 -427 640 -640 560 -494 640 -480 640 -640 427 -500 375 -427 640 -513 640 -640 427 -300 400 -427 640 -453 640 -428 640 -335 500 -640 480 -640 426 -640 480 -480 640 -478 640 -612 612 -640 480 -640 480 -640 481 -640 480 -640 427 -375 500 -640 631 -640 405 -480 640 -500 375 -640 480 -427 640 -640 480 -500 333 -640 425 -480 640 -640 427 -570 570 -640 480 -640 480 -640 480 -640 427 -612 612 -640 402 -398 600 -640 427 -448 312 -640 427 -640 427 -640 427 -640 427 -640 478 -640 481 -640 538 -500 333 -509 640 -640 480 -640 480 -640 640 -480 640 -640 427 -640 480 -640 480 -640 427 -375 500 -640 480 -640 425 -612 612 -636 640 -480 640 -640 427 -428 640 -428 640 -640 480 -640 426 -640 480 -640 480 -426 640 -492 500 -640 498 -640 480 -640 425 -640 425 -640 425 -640 427 -640 432 -500 333 -353 640 -500 375 -500 375 -480 640 -640 360 -438 640 -640 480 -640 426 -576 576 -638 640 -640 466 -361 500 -640 427 -640 456 -640 390 -640 585 -375 500 -640 480 -640 480 -640 401 -640 480 -500 401 -640 480 -640 480 -424 640 -640 480 -480 640 -640 414 -483 640 -480 640 -500 333 -640 480 -640 393 -427 640 -480 640 -640 414 -480 640 -500 332 -640 640 -640 395 -640 222 -640 427 -640 427 -427 640 -640 480 -640 427 -640 480 -640 429 -500 375 -500 333 -480 640 -500 470 -640 363 -335 500 -340 455 -639 640 -640 480 -458 640 -316 500 -640 480 -500 375 -640 480 -640 512 -640 480 -640 480 -480 640 -427 640 -389 500 -640 480 -375 500 -480 640 -640 480 -640 426 -640 359 -639 640 -640 480 -500 375 -612 612 -375 500 -640 480 -640 378 -640 428 -640 480 -640 478 -640 461 -480 640 -424 640 -640 480 -640 480 -500 333 -640 320 -612 612 -500 333 -640 480 -420 640 -500 375 -640 480 -640 480 -640 480 -640 425 -640 428 -640 427 -640 451 -640 424 -640 516 -640 500 -640 480 -620 413 -640 426 -640 480 -480 640 -333 500 -498 640 -500 334 -640 480 -640 480 -640 480 -640 480 -500 359 -480 640 -640 427 -425 640 -640 483 -640 428 -640 480 -480 640 -640 427 -640 426 -640 425 -640 427 -640 480 -640 427 -640 450 -640 480 -473 640 -640 400 -640 485 -480 640 -640 427 -640 426 -640 402 -640 480 -482 640 -480 640 -480 640 -427 640 -500 375 -480 640 -640 426 -640 640 -608 379 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -500 374 -427 640 -640 425 -640 427 -640 427 -500 333 -500 302 -427 640 -480 640 -640 458 -640 480 -480 640 -480 640 -427 640 -640 480 -640 480 -640 421 -640 427 -640 480 -640 480 -640 427 -427 640 -640 480 -427 640 -640 480 -332 500 -640 425 -640 428 -640 427 -640 448 -640 427 -427 640 -640 428 -640 480 -640 510 -640 426 -500 375 -640 502 -427 640 -640 439 -427 640 -640 480 -480 640 -640 427 -480 640 -640 480 -640 513 -640 426 -640 427 -640 425 -640 426 -640 427 -480 640 -640 425 -640 427 -640 486 -424 640 -640 480 -500 380 -640 427 -427 640 -640 171 -428 640 -374 500 -640 427 -426 640 -500 375 -640 427 -640 480 -640 427 -500 375 -640 640 -500 469 -640 480 -480 640 -480 640 -640 383 -640 480 -604 640 -640 477 -640 480 -640 480 -640 480 -500 364 -430 640 -640 424 -640 480 -640 426 -640 428 -640 425 -612 612 -640 480 -640 426 -588 640 -640 426 -500 375 -640 480 -640 427 -640 427 -640 480 -427 640 -200 150 -640 480 -640 429 -640 429 -471 500 -426 640 -350 467 -640 425 -428 640 -428 640 -500 375 -426 640 -640 480 -480 640 -640 426 -428 640 -640 429 -640 480 -500 375 -640 424 -640 457 -427 640 -480 640 -640 424 -612 612 -427 640 -640 480 -640 480 -640 424 -640 480 -360 640 -427 640 -480 640 -640 640 -640 427 -640 480 -640 427 -640 424 -640 479 -640 470 -640 390 -427 640 -610 407 -426 640 -640 359 -375 500 -640 426 -640 478 -638 640 -640 427 -640 480 -640 429 -640 339 -640 415 -640 480 -640 478 -480 640 -453 640 -429 640 -427 640 -640 427 -640 528 -640 498 -640 480 -640 360 -640 480 -480 640 -640 480 -640 474 -640 480 -640 427 -640 479 -640 480 -500 375 -640 480 -640 480 -640 426 -640 480 -480 640 -500 375 -640 406 -640 480 -640 428 -640 640 -640 480 -480 640 -640 480 -631 600 -640 480 -425 640 -426 640 -427 640 -640 480 -640 480 -480 640 -640 480 -640 427 -640 457 -500 333 -640 427 -640 480 -640 480 -640 416 -640 427 -426 640 -640 427 -640 409 -469 500 -480 640 -640 427 -640 427 -640 428 -640 480 -640 427 -500 375 -500 375 -640 480 -640 575 -640 512 -640 480 -428 640 -640 480 -640 480 -427 640 -640 426 -427 640 -640 480 -640 403 -640 480 -640 458 -500 333 -500 356 -640 302 -375 500 -640 242 -640 480 -640 426 -640 427 -640 415 -640 513 -640 427 -500 402 -640 480 -427 640 -640 424 -480 640 -375 500 -640 427 -500 281 -640 445 -640 425 -357 520 -160 120 -640 480 -640 504 -466 640 -640 428 -640 480 -622 622 -640 427 -640 480 -640 426 -640 480 -640 451 -640 480 -612 612 -640 480 -640 427 -640 427 -501 359 -612 612 -640 437 -640 480 -640 426 -640 425 -640 427 -640 480 -334 500 -500 335 -640 425 -640 480 -500 333 -640 428 -640 427 -640 480 -640 444 -480 640 -640 426 -640 480 -640 425 -512 384 -640 640 -526 640 -640 427 -640 438 -424 640 -640 424 -383 640 -640 331 -640 480 -640 428 -640 462 -640 476 -427 640 -640 480 -640 360 -500 349 -640 480 -640 480 -640 427 -172 227 -640 427 -500 500 -640 426 -640 480 -640 478 -640 485 -445 640 -483 640 -375 500 -640 480 -640 427 -640 480 -640 349 -640 480 -640 426 -500 334 -612 612 -640 427 -427 640 -640 480 -640 427 -480 640 -500 334 -480 640 -427 640 -640 361 -640 480 -640 426 -427 640 -640 480 -640 427 -640 426 -640 360 -640 480 -640 480 -379 640 -640 481 -640 427 -640 480 -640 480 -640 334 -640 416 -640 640 -640 640 -480 640 -427 640 -640 427 -640 427 -426 640 -640 359 -640 426 -640 427 -640 376 -500 332 -640 427 -640 424 -640 427 -640 480 -640 427 -640 480 -480 640 -500 375 -425 640 -480 640 -427 640 -640 441 -640 427 -640 427 -640 331 -640 411 -640 427 -500 375 -640 480 -640 426 -640 639 -640 480 -640 427 -640 461 -480 640 -640 480 -640 480 -454 640 -427 640 -640 427 -640 413 -480 640 -612 612 -500 375 -640 480 -640 337 -640 480 -640 480 -480 640 -640 544 -640 425 -426 640 -480 640 -640 415 -235 314 -640 481 -640 408 -426 640 -640 424 -640 427 -500 493 -640 427 -640 383 -500 346 -640 370 -640 480 -500 331 -640 359 -640 480 -502 640 -480 640 -640 336 -640 480 -640 480 -478 640 -480 640 -640 480 -640 383 -640 480 -640 480 -425 640 -480 640 -640 427 -640 426 -640 480 -640 480 -640 426 -612 612 -640 426 -640 426 -333 500 -640 427 -500 375 -640 494 -640 426 -333 500 -640 443 -640 483 -426 640 -640 480 -640 480 -640 480 -640 480 -640 427 -640 325 -500 375 -640 427 -500 375 -500 375 -640 428 -640 396 -640 460 -500 335 -640 480 -640 482 -640 480 -426 640 -640 416 -640 480 -640 480 -500 375 -480 640 -426 640 -640 480 -640 512 -478 640 -640 428 -480 640 -640 480 -480 640 -640 361 -480 640 -640 360 -457 640 -640 429 -640 480 -480 640 -614 640 -640 447 -640 480 -480 640 -480 640 -640 429 -640 480 -640 480 -376 500 -189 500 -500 333 -640 425 -426 640 -640 407 -640 426 -640 427 -426 640 -640 427 -500 331 -640 426 -428 640 -500 332 -640 480 -640 425 -640 425 -640 480 -427 640 -640 425 -640 512 -640 628 -500 332 -640 427 -640 480 -536 640 -640 427 -640 427 -640 426 -640 640 -640 360 -612 612 -640 480 -640 640 -640 426 -640 427 -480 640 -640 426 -640 427 -640 480 -640 438 -640 590 -640 480 -640 480 -331 500 -640 427 -640 640 -640 427 -500 375 -500 375 -640 480 -480 640 -640 480 -550 640 -500 500 -640 480 -640 427 -359 640 -640 480 -375 500 -640 427 -500 336 -640 512 -640 418 -640 427 -500 281 -640 360 -375 500 -640 428 -427 640 -419 640 -640 360 -640 480 -640 427 -640 426 -640 426 -640 480 -640 640 -640 426 -640 480 -640 480 -640 480 -640 530 -480 640 -367 640 -640 480 -640 236 -500 375 -480 640 -640 427 -640 427 -640 414 -640 289 -500 376 -640 480 -640 480 -640 428 -640 427 -640 480 -640 428 -500 334 -640 360 -427 640 -640 480 -500 333 -640 480 -375 500 -375 500 -640 480 -640 360 -500 375 -640 386 -640 480 -640 480 -640 480 -640 512 -640 480 -426 640 -600 453 -640 427 -640 480 -640 480 -500 375 -478 640 -640 480 -640 480 -612 612 -500 500 -640 429 -500 482 -640 480 -480 640 -500 333 -335 500 -640 356 -640 480 -640 508 -640 360 -640 427 -640 427 -512 640 -640 427 -480 640 -429 640 -427 640 -640 427 -425 640 -640 480 -640 426 -640 640 -478 640 -640 428 -428 640 -640 480 -640 427 -640 480 -612 612 -640 480 -640 480 -500 375 -427 640 -480 640 -427 640 -640 424 -500 283 -640 433 -640 329 -640 288 -612 612 -640 489 -640 427 -425 640 -640 278 -500 377 -480 640 -640 480 -640 578 -640 479 -640 425 -640 626 -640 455 -640 427 -640 448 -640 443 -640 640 -621 640 -480 640 -640 428 -375 500 -482 640 -427 640 -480 640 -500 375 -612 612 -640 427 -480 640 -640 427 -480 640 -640 427 -640 480 -640 501 -473 640 -375 500 -480 640 -480 640 -640 427 -428 640 -640 480 -500 309 -640 424 -640 426 -640 425 -480 640 -640 446 -480 640 -640 427 -640 480 -640 480 -427 640 -480 640 -445 500 -640 480 -640 329 -375 500 -640 480 -500 333 -640 427 -500 375 -640 480 -640 480 -427 640 -400 500 -640 480 -640 480 -427 640 -612 612 -640 480 -427 640 -640 480 -400 300 -640 480 -640 480 -640 426 -426 640 -640 496 -500 333 -640 428 -640 426 -383 640 -500 478 -640 480 -640 480 -586 640 -480 640 -640 427 -480 640 -427 640 -640 360 -375 500 -640 480 -640 426 -640 480 -320 240 -640 427 -640 428 -640 427 -640 510 -333 500 -612 612 -640 359 -640 424 -427 640 -640 427 -500 375 -427 640 -640 480 -640 480 -340 500 -640 413 -640 425 -500 375 -478 640 -640 443 -640 480 -500 188 -640 427 -640 361 -640 419 -640 427 -427 640 -640 480 -500 375 -480 640 -640 480 -427 640 -640 478 -640 480 -612 612 -500 375 -640 427 -640 426 -640 427 -513 640 -291 449 -640 480 -640 480 -640 527 -640 426 -640 426 -500 333 -427 640 -640 427 -640 640 -640 480 -640 640 -640 427 -640 400 -427 640 -640 428 -640 480 -480 640 -640 427 -640 426 -640 418 -640 480 -361 640 -640 427 -640 429 -640 424 -480 640 -640 426 -480 640 -630 450 -640 569 -640 480 -427 640 -640 427 -480 640 -612 612 -640 425 -640 426 -500 375 -500 333 -359 640 -444 640 -500 375 -640 480 -640 512 -640 480 -640 382 -332 500 -640 429 -640 480 -640 480 -640 480 -640 480 -640 480 -375 500 -640 586 -640 427 -332 500 -358 500 -500 374 -640 411 -375 500 -640 428 -640 427 -640 427 -480 640 -640 480 -427 640 -427 640 -500 333 -640 480 -640 426 -360 640 -640 427 -640 296 -480 640 -640 450 -425 640 -333 500 -427 640 -427 640 -640 426 -640 428 -480 640 -546 366 -480 640 -640 428 -640 425 -640 480 -640 401 -480 382 -640 480 -640 480 -500 375 -640 480 -612 612 -640 427 -500 500 -640 426 -480 640 -480 640 -640 488 -480 640 -640 389 -612 612 -640 427 -640 425 -375 500 -427 640 -640 430 -640 480 -334 500 -640 480 -640 479 -640 427 -640 427 -640 480 -640 480 -640 412 -640 418 -427 640 -640 478 -640 425 -640 324 -500 335 -640 480 -640 428 -640 480 -500 333 -480 640 -640 453 -640 364 -426 640 -640 480 -640 427 -640 480 -429 640 -500 334 -640 480 -640 466 -480 640 -480 640 -383 640 -640 425 -640 480 -640 429 -612 612 -640 454 -640 487 -480 640 -640 427 -640 480 -375 500 -478 640 -480 640 -640 480 -640 480 -640 480 -640 480 -480 640 -640 471 -454 640 -640 427 -640 427 -640 640 -640 524 -640 480 -640 480 -640 480 -640 513 -640 427 -640 417 -284 640 -500 375 -640 383 -640 427 -640 480 -640 480 -612 612 -640 427 -478 640 -640 480 -640 633 -640 469 -640 480 -640 427 -640 426 -640 480 -426 640 -640 480 -375 500 -640 288 -640 458 -640 508 -480 640 -640 428 -427 640 -640 480 -640 480 -640 480 -480 640 -640 480 -424 640 -640 428 -640 426 -640 360 -640 426 -500 375 -384 640 -640 427 -480 640 -640 478 -640 427 -500 353 -500 334 -640 480 -640 480 -508 640 -427 640 -640 427 -500 333 -640 480 -586 640 -640 481 -500 375 -640 451 -640 480 -640 640 -640 509 -425 640 -640 211 -640 480 -640 480 -375 500 -500 333 -640 476 -640 405 -500 375 -640 480 -600 450 -640 426 -640 424 -500 333 -640 480 -640 640 -640 480 -640 483 -640 427 -640 480 -640 238 -640 360 -640 425 -500 330 -640 480 -640 400 -454 500 -640 480 -480 640 -640 539 -640 457 -441 600 -500 333 -500 375 -640 458 -640 480 -640 426 -640 498 -640 480 -612 612 -508 640 -640 428 -480 640 -480 640 -640 433 -426 640 -640 425 -640 459 -438 640 -640 427 -480 640 -640 426 -640 425 -640 426 -613 640 -640 480 -640 427 -640 426 -640 427 -640 427 -640 425 -640 427 -500 375 -480 640 -470 352 -640 480 -480 640 -480 640 -640 480 -640 428 -640 480 -640 425 -640 478 -480 640 -640 391 -640 426 -640 426 -618 640 -640 427 -640 512 -640 427 -480 640 -640 480 -427 640 -640 480 -640 480 -640 427 -640 470 -500 382 -640 424 -456 640 -640 480 -640 480 -640 427 -640 426 -480 640 -640 427 -640 480 -500 375 -640 480 -640 427 -640 427 -640 480 -426 640 -640 480 -384 640 -612 612 -640 340 -424 640 -500 430 -640 286 -480 640 -427 640 -500 334 -640 480 -480 640 -640 494 -640 480 -640 480 -640 424 -375 500 -370 500 -640 480 -640 427 -462 640 -484 640 -640 427 -640 480 -424 640 -640 480 -550 413 -480 640 -480 640 -640 499 -424 640 -640 400 -640 449 -640 640 -375 500 -640 427 -640 427 -640 427 -640 443 -500 375 -640 426 -640 427 -640 446 -483 640 -448 640 -640 529 -500 333 -612 612 -640 427 -640 426 -640 429 -500 332 -640 515 -480 640 -640 427 -640 418 -640 423 -640 480 -640 427 -640 428 -640 427 -640 428 -640 401 -640 427 -480 640 -480 640 -640 482 -480 640 -640 480 -640 427 -427 640 -640 550 -640 427 -426 640 -640 425 -640 426 -640 480 -640 253 -640 426 -640 427 -480 640 -445 640 -640 404 -640 491 -480 640 -640 424 -640 425 -640 437 -426 640 -612 612 -494 640 -500 375 -640 425 -640 480 -426 640 -612 612 -640 480 -640 480 -640 453 -546 366 -640 426 -640 480 -640 427 -640 359 -640 480 -640 480 -640 427 -500 500 -640 426 -640 624 -500 375 -428 640 -640 427 -640 418 -640 540 -640 480 -500 333 -640 480 -640 427 -500 334 -640 426 -640 480 -500 332 -640 426 -640 426 -640 432 -640 411 -640 480 -640 459 -640 521 -640 427 -640 427 -427 640 -353 640 -500 333 -640 427 -612 612 -640 505 -640 480 -640 549 -478 640 -640 480 -640 427 -640 427 -640 480 -640 428 -640 427 -479 640 -640 427 -640 427 -300 255 -500 375 -640 427 -367 500 -640 430 -393 640 -640 480 -640 458 -640 480 -640 363 -640 423 -640 428 -640 288 -640 427 -399 500 -640 479 -640 543 -612 612 -512 640 -640 429 -480 640 -360 239 -640 428 -500 375 -500 375 -640 425 -513 640 -640 409 -640 480 -480 640 -640 104 -640 428 -640 427 -427 640 -640 466 -640 427 -640 430 -640 480 -640 426 -640 427 -640 427 -426 640 -640 427 -640 480 -640 480 -500 375 -640 480 -455 640 -640 480 -640 480 -640 427 -640 480 -500 333 -500 375 -612 612 -640 480 -333 500 -500 333 -500 375 -640 427 -428 640 -640 376 -640 480 -640 480 -640 480 -500 377 -640 506 -479 640 -500 333 -600 296 -500 375 -640 428 -576 640 -640 480 -640 425 -640 425 -480 640 -425 640 -640 480 -500 375 -640 360 -500 375 -640 583 -500 375 -500 375 -480 640 -480 640 -480 640 -640 480 -640 428 -640 480 -640 403 -640 480 -640 480 -640 451 -640 480 -640 480 -640 429 -640 451 -640 480 -640 427 -500 375 -427 640 -640 425 -500 333 -640 480 -427 640 -640 427 -640 425 -640 480 -640 456 -408 391 -640 480 -477 640 -640 427 -512 640 -480 640 -640 429 -640 425 -640 480 -640 480 -640 407 -640 545 -640 480 -640 480 -640 480 -500 375 -333 500 -640 428 -500 333 -640 378 -427 640 -640 428 -375 500 -640 486 -640 640 -640 480 -640 424 -480 640 -640 427 -426 640 -640 480 -640 362 -426 640 -640 426 -640 480 -612 612 -640 426 -640 480 -640 426 -640 480 -425 640 -640 426 -421 640 -427 640 -480 640 -640 480 -427 640 -334 500 -480 640 -640 427 -640 429 -500 333 -640 480 -500 334 -326 500 -640 480 -640 480 -478 640 -480 640 -500 375 -640 512 -640 423 -640 427 -640 640 -640 480 -640 425 -640 480 -640 480 -640 480 -640 427 -640 252 -640 427 -640 480 -428 640 -500 374 -640 480 -500 375 -375 500 -640 480 -500 375 -640 360 -640 426 -640 640 -480 640 -427 640 -480 640 -640 479 -640 431 -640 373 -428 640 -640 433 -640 480 -640 480 -640 480 -640 427 -640 480 -484 640 -640 429 -480 640 -375 500 -427 640 -640 480 -640 480 -500 375 -288 352 -371 640 -640 480 -425 640 -640 625 -640 359 -640 478 -640 480 -640 480 -640 480 -640 405 -640 427 -640 478 -640 480 -640 480 -640 480 -500 331 -640 425 -640 479 -640 427 -427 640 -640 427 -640 480 -640 564 -500 375 -640 480 -480 384 -576 413 -427 640 -640 428 -612 612 -425 640 -500 333 -640 426 -427 640 -640 480 -640 480 -480 640 -640 426 -500 407 -640 394 -600 450 -500 375 -500 375 -500 332 -469 640 -500 375 -640 427 -640 427 -640 427 -640 480 -640 425 -640 603 -640 480 -640 463 -612 612 -640 427 -426 640 -427 640 -640 480 -640 426 -640 480 -640 480 -640 480 -640 427 -640 427 -600 450 -640 480 -640 425 -500 375 -640 318 -436 640 -640 640 -640 427 -480 640 -640 461 -427 640 -427 640 -375 500 -426 640 -640 480 -640 480 -480 640 -480 640 -640 480 -308 462 -480 640 -640 427 -640 480 -640 427 -640 404 -360 500 -640 427 -640 426 -640 490 -480 640 -400 300 -640 444 -578 640 -640 435 -640 640 -427 640 -356 500 -640 426 -640 431 -500 375 -640 480 -640 480 -640 480 -640 506 -375 500 -640 480 -416 640 -461 640 -640 426 -640 476 -480 640 -640 425 -640 427 -500 375 -640 427 -640 427 -640 429 -640 425 -640 480 -640 480 -640 502 -640 427 -480 640 -640 480 -480 361 -640 480 -640 423 -640 560 -640 429 -500 146 -640 478 -365 640 -640 480 -427 640 -640 480 -640 482 -500 375 -640 480 -640 427 -427 640 -480 640 -640 404 -640 427 -500 375 -420 640 -325 500 -640 428 -640 263 -360 270 -640 427 -428 640 -640 427 -640 480 -426 640 -640 469 -640 428 -640 640 -500 375 -640 425 -427 640 -640 386 -640 445 -640 480 -640 480 -479 500 -640 480 -640 427 -640 640 -640 480 -640 478 -640 424 -480 640 -346 500 -500 280 -640 426 -480 640 -640 480 -640 427 -640 480 -640 480 -500 377 -399 640 -500 375 -640 480 -640 429 -478 640 -500 375 -480 640 -640 484 -480 640 -640 480 -640 400 -640 516 -612 612 -640 485 -426 640 -480 640 -640 416 -410 640 -640 428 -598 393 -640 407 -425 640 -640 428 -439 640 -640 411 -640 368 -640 429 -427 640 -640 433 -640 480 -500 375 -500 474 -640 426 -640 426 -640 424 -640 601 -640 427 -640 320 -640 426 -640 427 -500 333 -640 426 -640 350 -640 480 -640 428 -640 427 -640 480 -640 483 -375 500 -426 640 -640 480 -640 480 -640 398 -640 427 -640 481 -640 480 -480 640 -640 494 -640 371 -640 481 -640 480 -640 480 -640 326 -640 427 -324 182 -595 608 -640 427 -640 480 -500 334 -640 512 -480 640 -640 480 -612 612 -640 426 -640 428 -612 612 -640 480 -500 375 -500 443 -640 388 -640 480 -640 427 -640 480 -640 496 -640 457 -480 566 -480 640 -640 442 -480 640 -640 463 -640 426 -640 391 -486 640 -427 640 -640 427 -640 409 -640 427 -640 426 -640 480 -500 327 -640 427 -640 427 -528 640 -640 480 -640 423 -640 427 -640 480 -640 480 -640 536 -640 427 -640 480 -640 427 -480 640 -640 425 -640 481 -640 480 -640 427 -640 640 -640 427 -640 426 -480 640 -640 480 -640 450 -500 375 -640 427 -640 480 -640 479 -431 640 -480 640 -640 480 -640 540 -427 640 -400 205 -640 480 -640 432 -640 480 -640 427 -640 409 -640 427 -427 640 -500 375 -640 424 -640 480 -500 375 -428 640 -640 480 -640 427 -640 383 -640 419 -640 480 -640 426 -500 375 -640 427 -640 426 -640 467 -640 361 -640 480 -480 640 -640 427 -640 480 -640 480 -480 640 -500 375 -500 500 -640 480 -640 400 -425 640 -640 427 -640 425 -640 360 -640 427 -640 490 -640 480 -432 640 -500 375 -640 479 -640 414 -424 640 -640 500 -612 612 -640 480 -640 623 -327 640 -375 500 -640 429 -640 426 -640 221 -480 640 -640 480 -640 428 -640 480 -500 281 -640 360 -640 426 -640 439 -640 427 -640 360 -480 640 -400 300 -640 596 -640 427 -640 428 -360 640 -640 457 -640 438 -500 427 -640 640 -500 375 -375 500 -640 426 -426 640 -640 480 -640 388 -640 426 -640 480 -640 480 -640 427 -640 428 -640 423 -640 436 -500 372 -640 480 -640 480 -640 366 -500 333 -640 480 -640 428 -500 484 -425 640 -640 480 -427 640 -500 332 -480 640 -640 427 -441 640 -523 640 -480 640 -500 381 -427 640 -640 405 -640 360 -500 375 -427 640 -640 427 -640 427 -408 500 -640 479 -333 500 -640 480 -640 427 -640 444 -640 480 -640 640 -640 425 -375 500 -500 375 -640 431 -640 427 -640 430 -426 640 -432 288 -640 359 -640 429 -480 640 -640 427 -512 640 -500 375 -427 640 -640 425 -612 612 -500 471 -612 612 -427 640 -480 640 -640 427 -640 480 -640 427 -640 480 -640 480 -640 480 -500 375 -640 282 -358 500 -375 500 -640 427 -640 427 -640 480 -640 480 -640 427 -427 640 -640 422 -640 428 -640 427 -500 375 -640 426 -640 400 -640 427 -433 640 -375 500 -375 500 -640 427 -640 480 -427 640 -519 640 -640 361 -640 480 -640 427 -426 640 -461 640 -640 480 -640 427 -640 425 -425 640 -500 375 -640 400 -640 480 -640 400 -640 480 -500 375 -640 479 -480 640 -640 480 -640 427 -640 414 -334 500 -640 480 -640 480 -640 427 -479 319 -640 480 -640 480 -427 640 -640 427 -640 639 -640 527 -459 640 -640 437 -640 394 -640 419 -640 427 -640 427 -640 427 -640 477 -640 427 -640 479 -500 333 -640 426 -640 333 -640 425 -500 400 -640 480 -640 480 -640 480 -640 424 -640 380 -640 465 -372 480 -640 427 -640 480 -480 640 -640 427 -640 480 -640 427 -640 360 -640 361 -640 479 -500 199 -426 640 -640 427 -640 426 -500 375 -640 480 -640 427 -500 347 -640 480 -640 480 -640 480 -480 360 -427 640 -480 640 -640 427 -640 427 -640 482 -640 480 -640 426 -480 640 -640 427 -640 480 -640 480 -612 612 -640 446 -640 425 -640 480 -640 480 -640 426 -426 640 -640 427 -640 427 -426 640 -640 427 -458 640 -640 480 -500 428 -640 384 -640 425 -500 375 -480 640 -600 450 -512 640 -640 427 -640 512 -365 640 -640 429 -640 557 -640 499 -500 375 -500 375 -640 451 -333 500 -640 480 -640 468 -427 640 -484 640 -640 480 -640 480 -640 408 -640 427 -640 424 -640 480 -500 339 -427 640 -640 480 -640 426 -640 480 -640 396 -640 480 -640 427 -640 427 -640 481 -427 640 -612 612 -640 480 -640 427 -640 480 -640 427 -640 425 -427 640 -612 612 -640 427 -500 375 -480 640 -640 428 -640 480 -640 480 -640 426 -480 640 -640 427 -500 375 -330 500 -640 480 -640 480 -612 612 -640 427 -640 425 -164 500 -480 640 -640 428 -500 375 -640 480 -640 480 -640 425 -640 480 -457 640 -640 631 -640 480 -640 462 -640 480 -640 480 -612 612 -459 640 -640 480 -640 480 -640 551 -640 480 -640 386 -640 618 -640 428 -640 480 -640 428 -540 540 -640 480 -640 493 -640 482 -640 360 -500 333 -500 500 -640 480 -478 640 -640 427 -640 541 -500 375 -640 480 -640 480 -640 427 -640 480 -640 480 -640 510 -416 500 -640 480 -640 640 -640 427 -478 640 -640 480 -640 480 -640 429 -640 480 -522 640 -640 477 -500 377 -375 500 -640 427 -640 433 -427 640 -640 303 -500 285 -480 640 -640 480 -640 480 -640 427 -180 500 -500 375 -640 480 -640 268 -480 640 -640 427 -640 426 -640 426 -640 480 -640 426 -480 640 -640 480 -640 480 -640 480 -480 640 -640 424 -478 640 -480 640 -640 428 -640 426 -640 425 -500 313 -640 398 -640 480 -480 640 -500 333 -640 457 -429 640 -640 427 -640 480 -426 640 -480 640 -640 480 -640 480 -640 424 -486 640 -640 428 -640 512 -640 427 -640 366 -427 640 -640 427 -640 444 -500 375 -421 640 -427 640 -640 426 -428 640 -480 640 -426 640 -500 375 -375 500 -640 480 -640 479 -640 425 -640 480 -375 500 -500 375 -640 480 -640 425 -640 428 -640 427 -494 640 -640 480 -640 480 -640 426 -640 451 -640 457 -426 640 -640 480 -612 612 -640 478 -640 480 -640 427 -286 640 -640 457 -640 432 -480 640 -500 333 -640 358 -640 428 -640 427 -640 427 -640 474 -640 426 -640 426 -480 640 -640 427 -640 432 -640 426 -480 640 -640 480 -640 426 -640 494 -480 640 -640 429 -640 427 -375 500 -640 419 -342 640 -640 421 -640 426 -612 612 -640 480 -375 500 -500 500 -640 360 -640 469 -640 480 -425 640 -640 427 -612 612 -640 392 -640 427 -640 480 -640 480 -640 428 -640 480 -640 426 -640 464 -640 427 -500 400 -640 369 -480 640 -640 427 -640 480 -640 480 -640 438 -640 428 -640 426 -600 600 -640 427 -640 512 -640 480 -333 500 -640 454 -640 480 -480 640 -640 423 -640 427 -640 431 -640 480 -500 375 -640 463 -640 426 -612 612 -640 360 -640 424 -640 480 -640 480 -640 426 -571 640 -377 640 -480 640 -640 480 -640 498 -480 640 -640 427 -640 426 -500 376 -640 478 -640 480 -500 375 -640 480 -640 426 -500 334 -480 640 -640 480 -640 480 -640 427 -640 425 -640 480 -480 640 -426 640 -640 563 -640 480 -480 640 -500 335 -640 480 -427 640 -480 640 -640 480 -427 640 -640 426 -640 426 -640 424 -480 640 -427 640 -500 333 -640 480 -500 375 -640 480 -640 480 -500 373 -640 417 -480 640 -640 453 -640 429 -640 360 -640 427 -640 427 -640 480 -480 640 -640 427 -640 480 -480 640 -640 404 -640 480 -640 427 -375 500 -640 427 -640 425 -640 426 -640 427 -640 329 -640 426 -333 500 -640 427 -640 426 -640 454 -640 480 -427 640 -640 374 -640 369 -640 427 -640 433 -640 427 -612 612 -640 480 -640 424 -640 480 -426 640 -640 480 -640 480 -640 434 -428 640 -480 640 -640 523 -500 400 -640 640 -640 427 -640 361 -640 432 -336 500 -500 375 -640 427 -640 480 -640 424 -640 425 -427 640 -640 480 -480 360 -482 640 -640 480 -480 640 -640 426 -640 427 -500 375 -640 480 -640 427 -612 612 -640 480 -640 425 -640 480 -363 500 -640 480 -640 480 -640 480 -640 480 -500 375 -640 490 -640 480 -640 426 -640 424 -640 427 -640 427 -640 480 -640 480 -375 500 -640 413 -640 462 -480 640 -427 640 -427 640 -572 640 -640 480 -640 289 -640 427 -640 427 -640 478 -427 640 -427 640 -640 427 -375 500 -375 500 -500 332 -640 402 -640 429 -500 337 -640 480 -640 480 -640 480 -640 480 -640 425 -640 480 -640 427 -640 457 -640 427 -500 400 -640 480 -640 480 -427 640 -640 581 -640 480 -640 480 -640 427 -640 427 -500 375 -640 480 -612 612 -640 428 -463 640 -640 436 -640 480 -500 375 -500 375 -512 640 -640 462 -640 636 -640 480 -640 474 -480 640 -640 428 -640 480 -480 640 -333 500 -640 512 -612 612 -500 333 -640 427 -640 494 -640 426 -640 427 -640 480 -640 429 -640 480 -500 334 -500 488 -378 500 -430 628 -640 429 -640 639 -640 455 -640 480 -640 427 -480 640 -640 426 -640 480 -567 378 -612 612 -640 480 -427 640 -640 427 -640 427 -640 480 -640 427 -640 480 -367 500 -640 480 -612 612 -360 240 -500 375 -589 640 -640 480 -640 425 -640 427 -425 640 -640 360 -640 427 -640 491 -640 424 -640 480 -427 640 -640 480 -640 480 -640 480 -333 500 -640 480 -426 640 -480 640 -640 427 -640 409 -640 369 -640 471 -500 407 -425 640 -375 500 -338 450 -640 429 -640 423 -640 480 -640 480 -640 480 -200 150 -640 428 -427 640 -640 480 -500 377 -640 480 -640 433 -640 478 -640 426 -640 238 -478 640 -640 480 -640 480 -640 427 -640 421 -640 480 -640 427 -640 379 -640 427 -640 426 -640 480 -500 375 -428 640 -640 480 -640 427 -640 384 -480 640 -537 640 -612 612 -427 640 -640 437 -640 480 -640 480 -480 640 -640 427 -500 379 -640 480 -640 426 -640 478 -640 427 -640 480 -435 640 -428 640 -375 500 -640 427 -500 375 -457 640 -640 427 -640 426 -640 480 -640 428 -640 426 -480 640 -640 427 -640 427 -640 480 -640 427 -640 480 -640 640 -640 480 -640 480 -427 640 -640 480 -640 427 -640 480 -640 480 -640 429 -500 375 -640 480 -436 640 -640 401 -640 306 -640 480 -640 426 -640 461 -640 429 -640 480 -500 375 -427 640 -640 384 -640 480 -500 375 -640 425 -640 427 -640 640 -640 480 -640 640 -480 640 -640 640 -480 640 -640 443 -516 640 -640 426 -480 640 -427 640 -640 480 -640 298 -425 640 -640 480 -640 480 -424 640 -640 480 -640 427 -480 640 -640 569 -375 500 -344 640 -383 640 -640 415 -640 480 -640 480 -640 480 -500 333 -640 426 -426 640 -480 640 -375 500 -640 480 -640 256 -640 427 -640 480 -500 375 -640 480 -640 480 -640 427 -640 480 -640 427 -500 375 -640 361 -640 360 -480 640 -640 424 -500 375 -640 480 -640 480 -640 424 -640 427 -640 483 -640 510 -640 480 -640 410 -640 427 -480 640 -640 350 -427 640 -640 427 -640 360 -640 480 -640 484 -640 480 -640 427 -333 500 -640 427 -640 508 -640 428 -640 480 -426 640 -640 427 -640 640 -640 480 -640 480 -640 480 -640 478 -426 640 -640 428 -640 427 -640 480 -640 640 -640 428 -463 640 -640 425 -640 480 -640 272 -640 429 -640 425 -427 640 -640 481 -640 480 -640 427 -612 612 -640 427 -448 640 -640 427 -631 640 -640 480 -640 427 -640 405 -640 524 -500 334 -640 425 -640 445 -640 427 -479 640 -480 640 -498 640 -640 514 -640 478 -640 480 -640 480 -640 480 -640 640 -640 428 -640 480 -640 480 -640 444 -640 428 -640 424 -640 428 -640 427 -640 426 -640 435 -640 426 -640 488 -480 640 -427 640 -640 458 -640 427 -490 500 -640 480 -360 640 -500 375 -512 640 -640 480 -333 500 -640 427 -640 427 -640 480 -500 335 -640 424 -640 427 -640 427 -478 640 -500 375 -640 425 -640 425 -640 459 -640 428 -640 480 -500 325 -612 612 -640 480 -375 500 -640 480 -640 480 -640 427 -640 480 -334 500 -640 480 -640 426 -628 640 -640 640 -480 640 -427 640 -640 431 -640 433 -640 480 -505 640 -480 640 -500 375 -500 333 -640 480 -640 480 -640 480 -500 412 -640 418 -640 427 -500 349 -640 427 -375 500 -640 480 -640 480 -427 640 -640 348 -359 640 -640 427 -640 429 -500 400 -500 333 -427 640 -500 281 -612 612 -612 612 -640 480 -500 333 -427 640 -640 425 -427 640 -500 374 -425 640 -640 459 -640 424 -640 424 -640 439 -500 325 -427 640 -588 640 -428 640 -500 279 -640 480 -426 640 -500 375 -640 429 -480 360 -500 333 -612 612 -640 350 -333 500 -612 612 -640 478 -640 512 -499 640 -612 612 -640 480 -612 612 -480 640 -640 480 -640 426 -640 480 -640 426 -490 640 -480 640 -426 640 -640 426 -640 427 -500 344 -376 500 -640 436 -640 480 -640 480 -427 640 -640 640 -612 612 -640 479 -640 361 -480 640 -640 478 -361 500 -640 607 -640 480 -640 427 -640 480 -500 468 -640 480 -480 640 -640 478 -640 427 -612 612 -640 480 -640 479 -640 480 -640 458 -640 425 -427 640 -640 479 -612 612 -640 427 -500 375 -640 480 -640 426 -640 480 -500 333 -640 480 -640 360 -640 640 -480 640 -427 640 -480 640 -640 425 -640 359 -640 480 -640 426 -425 640 -480 640 -640 427 -500 375 -640 480 -500 375 -338 500 -640 449 -640 427 -500 375 -427 640 -640 427 -640 480 -426 640 -640 419 -640 640 -640 428 -640 480 -640 424 -640 480 -612 612 -512 640 -640 480 -500 334 -375 500 -640 392 -640 434 -480 640 -640 426 -640 441 -640 427 -640 426 -640 509 -640 320 -640 427 -332 500 -612 612 -612 612 -640 427 -640 465 -376 500 -640 427 -480 640 -640 505 -640 427 -331 500 -426 640 -640 593 -640 426 -576 640 -640 480 -640 401 -640 428 -640 480 -500 327 -480 640 -612 612 -480 640 -640 461 -425 640 -480 640 -640 452 -480 640 -640 427 -640 480 -640 426 -375 500 -375 500 -640 427 -500 330 -640 480 -640 480 -640 480 -640 425 -375 500 -640 480 -500 333 -640 359 -640 427 -480 640 -500 390 -640 479 -500 376 -628 640 -426 640 -640 480 -640 480 -640 453 -640 480 -500 317 -640 480 -500 282 -640 426 -640 516 -640 425 -640 426 -640 461 -640 480 -640 424 -640 480 -640 427 -640 480 -480 640 -640 480 -640 434 -640 427 -640 427 -640 494 -500 281 -480 640 -640 399 -640 480 -400 640 -640 427 -426 640 -612 612 -640 480 -640 480 -640 427 -640 446 -480 640 -640 427 -640 640 -210 139 -612 612 -640 427 -640 425 -640 427 -640 480 -500 333 -640 480 -640 426 -426 640 -500 333 -480 640 -640 480 -640 425 -640 426 -640 480 -640 480 -640 424 -640 360 -640 478 -640 480 -640 426 -640 480 -640 426 -426 640 -640 480 -427 640 -480 640 -612 612 -640 512 -500 375 -640 480 -640 426 -640 480 -427 640 -427 640 -422 562 -500 334 -640 413 -525 640 -640 480 -640 427 -640 480 -640 480 -640 480 -375 500 -640 427 -640 480 -640 480 -640 640 -640 364 -640 426 -473 640 -480 640 -640 480 -480 640 -640 425 -640 480 -640 428 -640 480 -375 500 -640 427 -640 427 -640 527 -640 480 -314 470 -500 399 -640 496 -480 640 -480 640 -500 500 -640 480 -426 640 -640 427 -480 640 -640 480 -640 426 -640 425 -284 423 -640 640 -640 427 -640 414 -480 640 -612 612 -640 468 -333 500 -500 392 -640 480 -480 640 -640 480 -640 480 -640 480 -640 463 -640 413 -427 640 -640 427 -640 480 -640 640 -480 640 -500 333 -640 428 -640 480 -640 480 -640 480 -640 480 -640 431 -500 302 -640 428 -480 640 -500 332 -640 494 -500 333 -480 640 -640 426 -427 640 -640 463 -640 425 -500 392 -640 480 -500 332 -640 480 -640 426 -375 500 -640 480 -640 480 -640 480 -427 640 -640 480 -500 375 -500 375 -500 379 -640 576 -640 370 -640 481 -640 408 -640 458 -629 640 -640 480 -500 375 -640 434 -425 640 -429 640 -480 640 -640 427 -640 512 -640 480 -640 480 -640 428 -500 265 -375 500 -427 640 -640 481 -500 500 -500 334 -640 480 -640 577 -424 640 -640 427 -500 332 -640 427 -639 640 -428 640 -505 640 -569 640 -640 426 -640 427 -480 640 -500 375 -640 426 -640 485 -480 640 -500 400 -640 480 -640 480 -640 427 -640 426 -471 640 -427 640 -640 530 -333 500 -640 426 -500 351 -640 425 -640 427 -500 375 -640 427 -640 427 -427 640 -640 426 -640 426 -426 640 -640 480 -465 640 -333 500 -640 480 -640 480 -500 375 -640 480 -394 640 -640 427 -640 360 -480 640 -500 333 -640 640 -640 427 -626 640 -640 425 -640 480 -640 480 -640 385 -427 640 -640 426 -640 516 -640 480 -640 443 -640 427 -640 480 -640 425 -640 428 -640 480 -484 640 -375 500 -427 640 -640 427 -640 400 -574 640 -640 478 -487 200 -640 426 -640 512 -640 480 -640 299 -640 389 -640 320 -640 427 -480 640 -640 426 -612 612 -480 640 -640 400 -640 412 -425 640 -640 424 -640 476 -640 480 -478 640 -640 478 -640 425 -640 426 -612 612 -640 424 -640 480 -640 411 -640 512 -426 640 -640 480 -640 427 -640 428 -500 377 -427 640 -640 480 -640 449 -612 612 -640 514 -640 539 -500 281 -640 427 -640 480 -640 425 -640 480 -640 480 -640 480 -640 480 -500 375 -640 426 -640 480 -640 426 -640 480 -500 333 -640 400 -640 433 -640 480 -640 478 -640 425 -640 429 -640 480 -640 329 -640 480 -640 428 -640 427 -640 427 -500 375 -480 640 -640 480 -640 640 -480 640 -520 640 -640 514 -640 480 -640 427 -640 480 -500 375 -640 383 -500 375 -640 495 -465 640 -640 427 -480 640 -640 480 -612 612 -333 500 -480 640 -500 375 -640 480 -400 300 -500 375 -640 427 -640 427 -640 359 -612 612 -640 373 -612 612 -424 640 -640 425 -640 444 -640 480 -640 478 -640 427 -500 332 -640 480 -640 427 -640 427 -640 639 -640 480 -480 640 -640 427 -500 375 -471 640 -640 427 -500 375 -640 426 -640 426 -500 371 -640 480 -500 375 -640 428 -358 243 -640 498 -640 424 -640 480 -500 375 -640 480 -640 424 -500 341 -640 480 -640 480 -640 480 -640 432 -500 375 -640 426 -640 458 -640 480 -640 427 -640 480 -640 414 -640 480 -416 640 -640 458 -480 640 -612 612 -427 640 -640 403 -640 480 -640 512 -640 481 -640 427 -640 480 -375 500 -640 427 -640 480 -640 427 -612 612 -500 375 -500 375 -469 640 -640 480 -640 500 -640 428 -640 486 -426 640 -402 600 -640 449 -640 427 -500 375 -427 640 -640 427 -640 500 -640 427 -640 480 -500 437 -504 438 -640 479 -480 640 -500 375 -640 480 -640 640 -480 640 -640 400 -640 480 -640 426 -640 480 -640 427 -500 337 -640 427 -640 426 -635 640 -640 337 -640 416 -640 480 -555 640 -640 480 -640 480 -640 400 -640 439 -640 428 -480 640 -640 427 -640 640 -419 500 -640 426 -500 332 -500 375 -640 426 -640 426 -640 427 -640 512 -500 375 -640 427 -462 640 -427 640 -500 334 -409 640 -500 375 -640 406 -640 425 -500 375 -640 480 -612 612 -640 426 -428 640 -640 480 -640 426 -640 480 -640 427 -640 427 -424 640 -640 426 -640 480 -533 640 -640 529 -640 480 -480 640 -640 428 -640 480 -500 333 -640 426 -500 395 -640 528 -426 640 -480 640 -500 400 -640 427 -500 357 -640 480 -640 427 -612 612 -640 478 -480 640 -640 424 -640 427 -640 480 -480 640 -640 480 -424 640 -640 427 -640 152 -640 427 -480 640 -640 445 -640 427 -640 427 -640 524 -640 480 -478 640 -640 480 -640 480 -375 500 -640 427 -640 427 -640 481 -640 427 -525 350 -640 427 -640 497 -640 480 -640 426 -640 457 -428 640 -640 427 -640 427 -640 426 -640 360 -640 426 -640 480 -640 358 -640 479 -480 640 -344 640 -476 640 -640 383 -574 361 -640 480 -388 640 -640 355 -427 640 -640 480 -640 480 -568 320 -640 480 -640 426 -640 489 -481 640 -640 427 -640 497 -640 388 -640 424 -640 480 -333 500 -640 480 -640 378 -480 640 -640 427 -612 612 -375 500 -640 367 -500 386 -640 473 -640 427 -640 480 -640 344 -427 640 -480 640 -640 480 -500 500 -500 375 -640 425 -640 480 -640 428 -640 427 -468 640 -640 361 -480 640 -640 480 -640 480 -640 425 -500 374 -480 640 -640 427 -640 481 -500 500 -640 426 -480 360 -640 480 -640 514 -612 612 -427 640 -640 426 -640 480 -427 640 -640 480 -640 480 -640 480 -640 428 -480 640 -500 333 -640 426 -640 426 -640 480 -640 480 -640 480 -640 440 -640 426 -640 480 -640 480 -640 480 -640 409 -640 425 -640 427 -640 422 -640 331 -426 640 -640 427 -640 480 -640 479 -640 427 -640 480 -640 512 -640 512 -640 427 -640 478 -480 640 -640 480 -479 640 -640 424 -640 432 -428 640 -640 427 -426 640 -640 426 -480 640 -640 480 -640 480 -640 480 -640 491 -640 480 -640 427 -500 481 -640 480 -480 640 -640 426 -640 385 -640 427 -427 640 -500 375 -480 640 -640 427 -480 640 -640 480 -640 480 -640 480 -640 427 -640 425 -640 480 -500 375 -431 640 -532 640 -640 428 -500 375 -640 620 -640 445 -424 640 -640 480 -640 428 -500 375 -640 425 -640 480 -640 427 -640 426 -640 427 -640 514 -640 480 -640 477 -640 426 -640 469 -640 427 -640 480 -640 427 -640 480 -640 480 -640 480 -640 423 -640 326 -500 333 -531 640 -612 612 -640 480 -640 427 -640 480 -640 426 -640 458 -480 640 -640 480 -480 640 -640 427 -640 498 -640 480 -640 366 -480 640 -640 429 -640 424 -640 481 -446 640 -427 640 -640 427 -640 396 -640 427 -640 480 -640 480 -640 426 -489 640 -343 500 -480 640 -400 267 -500 333 -427 640 -375 500 -640 428 -640 480 -427 640 -640 640 -335 500 -640 480 -640 480 -640 360 -640 567 -427 640 -500 469 -515 640 -425 640 -640 496 -640 480 -640 360 -640 480 -480 640 -640 457 -640 480 -500 333 -640 428 -500 362 -640 448 -640 457 -319 500 -427 640 -640 480 -640 427 -375 500 -640 360 -500 333 -426 640 -480 640 -640 480 -640 480 -640 478 -427 640 -500 334 -612 612 -640 427 -612 612 -424 640 -500 332 -640 480 -427 640 -424 640 -640 425 -640 427 -640 494 -500 335 -480 640 -640 480 -427 640 -512 640 -469 640 -640 427 -640 426 -480 640 -640 428 -640 426 -640 480 -367 500 -640 480 -404 640 -640 480 -640 480 -640 496 -640 480 -480 640 -640 480 -640 480 -640 541 -480 640 -640 512 -640 640 -480 640 -640 428 -500 333 -382 640 -333 500 -480 640 -640 426 -400 289 -640 480 -640 427 -480 640 -640 480 -640 423 -640 425 -640 427 -640 424 -640 480 -640 427 -640 569 -640 448 -500 375 -640 427 -640 425 -640 404 -500 331 -480 640 -640 480 -480 640 -640 480 -640 427 -630 640 -480 640 -500 384 -640 427 -640 485 -640 616 -640 480 -640 426 -427 640 -640 480 -640 639 -640 480 -640 480 -375 500 -640 427 -640 427 -375 500 -640 480 -640 427 -640 480 -640 510 -480 640 -480 640 -471 640 -640 480 -640 427 -612 612 -480 640 -640 502 -640 425 -480 640 -640 480 -640 480 -640 471 -480 640 -640 451 -500 640 -640 480 -640 421 -640 426 -640 496 -640 480 -500 335 -429 640 -500 363 -640 433 -640 426 -640 425 -480 640 -640 480 -426 640 -640 329 -640 480 -640 424 -640 429 -480 640 -640 428 -612 612 -640 385 -480 640 -640 424 -640 360 -640 426 -640 427 -640 480 -640 427 -546 640 -640 438 -500 298 -500 375 -500 400 -480 640 -640 427 -640 426 -640 408 -473 640 -427 640 -640 428 -640 480 -640 427 -640 425 -640 449 -480 640 -427 640 -612 612 -333 500 -500 295 -640 640 -640 480 -480 640 -500 333 -640 482 -335 500 -640 427 -640 480 -640 432 -425 640 -640 428 -640 427 -640 424 -640 429 -640 479 -480 640 -640 480 -640 480 -279 500 -640 430 -640 429 -640 400 -640 426 -640 552 -640 423 -640 427 -640 427 -640 480 -640 480 -640 426 -640 428 -640 480 -640 480 -600 450 -480 640 -427 640 -480 640 -427 640 -427 640 -640 480 -640 427 -640 480 -480 640 -567 377 -427 640 -480 640 -640 509 -640 428 -640 360 -640 480 -500 375 -640 425 -640 400 -640 640 -640 427 -640 359 -412 640 -449 640 -375 500 -640 427 -640 426 -640 427 -500 335 -640 427 -640 640 -640 480 -640 428 -480 640 -640 424 -640 426 -640 480 -480 640 -640 360 -500 375 -564 640 -640 426 -640 426 -640 443 -612 612 -360 640 -437 640 -640 428 -640 480 -640 480 -640 429 -640 512 -640 480 -640 427 -550 640 -427 640 -640 429 -479 640 -640 480 -640 426 -640 426 -640 427 -640 480 -612 612 -640 427 -500 335 -640 480 -640 427 -500 333 -480 640 -640 425 -640 480 -640 433 -346 500 -640 480 -612 612 -640 480 -640 480 -640 426 -640 512 -640 427 -640 441 -487 640 -640 480 -480 640 -640 480 -426 640 -612 612 -640 486 -375 500 -428 640 -640 640 -640 480 -640 427 -640 482 -640 501 -640 480 -640 427 -427 640 -640 428 -640 480 -640 360 -640 427 -427 640 -640 427 -640 480 -640 480 -640 457 -640 428 -640 428 -612 612 -640 425 -640 498 -640 427 -640 474 -428 640 -640 503 -640 427 -640 479 -379 640 -640 427 -612 612 -640 480 -480 640 -640 427 -640 427 -443 640 -612 612 -426 640 -640 640 -640 343 -512 640 -500 375 -480 640 -640 480 -640 457 -640 427 -640 480 -427 640 -640 354 -500 375 -404 265 -425 640 -640 480 -546 640 -427 640 -640 480 -640 400 -448 336 -375 500 -427 640 -640 422 -500 333 -640 480 -640 480 -640 427 -640 425 -396 640 -500 375 -640 426 -640 450 -640 427 -640 480 -640 480 -480 640 -640 425 -500 375 -640 511 -640 427 -639 640 -640 480 -640 427 -360 640 -640 425 -640 427 -640 480 -375 500 -640 426 -640 540 -640 340 -640 480 -375 500 -640 427 -640 480 -640 480 -480 640 -640 427 -480 640 -640 548 -640 578 -500 281 -500 333 -500 400 -640 354 -640 480 -640 640 -640 425 -480 640 -640 480 -640 387 -640 480 -640 498 -333 500 -375 500 -640 426 -411 640 -640 383 -480 640 -640 480 -640 360 -640 483 -640 426 -640 426 -612 612 -640 480 -480 640 -640 463 -640 480 -640 512 -640 480 -427 640 -640 480 -480 640 -500 375 -480 640 -640 427 -640 480 -500 375 -640 427 -640 427 -426 640 -400 300 -640 480 -333 500 -466 640 -640 427 -480 640 -640 433 -640 427 -500 375 -480 640 -640 480 -640 427 -640 489 -640 427 -500 375 -640 480 -640 480 -478 640 -500 375 -640 426 -480 640 -640 550 -640 480 -640 427 -640 426 -612 612 -640 480 -640 427 -480 640 -640 486 -640 450 -640 480 -332 500 -427 640 -640 428 -640 539 -640 427 -640 480 -640 459 -640 425 -640 480 -612 612 -640 480 -640 427 -428 640 -640 480 -640 464 -426 640 -640 480 -640 359 -333 467 -640 398 -640 427 -640 429 -500 334 -640 480 -443 640 -427 640 -640 369 -640 426 -640 423 -640 427 -640 479 -640 480 -427 640 -640 427 -640 472 -640 480 -450 640 -640 453 -640 425 -640 360 -500 375 -640 425 -428 640 -400 300 -640 480 -375 500 -640 424 -640 427 -640 428 -640 479 -640 427 -640 480 -500 375 -640 425 -640 480 -640 486 -640 480 -640 480 -640 505 -480 640 -640 480 -640 442 -640 480 -428 640 -640 428 -640 505 -500 500 -428 640 -640 423 -640 425 -640 480 -640 427 -640 425 -640 480 -640 480 -500 375 -500 375 -640 480 -338 500 -640 400 -640 434 -640 425 -500 333 -612 612 -640 426 -500 375 -500 375 -640 425 -640 424 -427 640 -500 286 -640 460 -500 375 -640 454 -640 480 -500 375 -640 480 -640 426 -640 374 -479 640 -640 480 -640 480 -640 512 -640 480 -640 427 -640 360 -640 427 -376 500 -640 427 -640 424 -483 640 -640 480 -500 400 -480 640 -640 478 -500 375 -429 640 -425 640 -427 640 -640 480 -640 479 -332 500 -503 640 -640 427 -640 427 -640 480 -500 333 -640 480 -427 640 -500 333 -480 640 -640 479 -407 640 -640 427 -500 375 -640 427 -375 500 -480 640 -456 640 -612 612 -500 341 -552 640 -500 375 -640 427 -640 513 -640 581 -480 640 -640 427 -640 481 -333 500 -640 480 -640 481 -427 640 -640 426 -350 263 -500 375 -640 480 -500 375 -640 424 -553 640 -640 427 -640 426 -427 640 -640 423 -640 427 -640 433 -426 640 -640 427 -428 640 -640 513 -640 480 -640 427 -424 640 -640 425 -640 426 -640 480 -640 426 -640 394 -640 426 -640 480 -640 427 -640 426 -426 640 -634 640 -640 517 -427 640 -640 466 -375 500 -500 354 -500 375 -427 640 -640 425 -240 320 -427 640 -640 429 -640 426 -640 428 -640 394 -640 498 -640 480 -640 480 -427 640 -640 480 -640 425 -640 427 -427 640 -640 480 -640 427 -640 428 -640 480 -375 500 -640 428 -640 480 -640 448 -612 612 -640 562 -338 640 -500 371 -500 333 -640 426 -640 480 -500 333 -640 480 -640 480 -640 480 -480 640 -640 429 -640 428 -640 413 -640 483 -427 640 -333 500 -500 337 -640 427 -640 427 -640 451 -640 480 -500 341 -640 428 -640 428 -640 480 -640 480 -640 480 -640 428 -375 500 -640 427 -375 500 -640 640 -640 480 -640 426 -640 480 -360 270 -480 640 -640 480 -640 480 -640 478 -640 480 -500 333 -480 640 -640 408 -640 480 -457 640 -427 640 -624 640 -500 333 -640 409 -640 480 -640 429 -478 640 -375 500 -375 500 -640 429 -640 640 -640 429 -640 424 -640 427 -640 480 -640 426 -640 451 -640 426 -640 427 -640 424 -640 480 -640 480 -469 640 -640 480 -640 480 -640 425 -432 640 -427 640 -434 500 -640 427 -640 427 -427 640 -480 640 -427 640 -500 375 -640 427 -426 640 -640 426 -640 427 -640 473 -427 640 -640 480 -427 640 -640 480 -480 640 -500 325 -640 384 -640 480 -640 427 -500 324 -427 640 -640 424 -640 480 -640 480 -480 640 -427 640 -426 640 -640 480 -500 375 -640 427 -428 640 -640 295 -640 478 -640 480 -427 640 -640 428 -482 640 -418 640 -640 480 -480 640 -480 640 -640 427 -640 480 -612 612 -639 640 -640 480 -375 500 -640 480 -640 427 -640 480 -524 640 -640 427 -425 640 -640 427 -427 640 -640 426 -640 427 -640 361 -640 480 -640 480 -640 424 -640 480 -640 480 -640 426 -640 480 -640 428 -500 377 -423 640 -480 640 -640 464 -640 426 -640 496 -500 375 -640 508 -640 426 -427 640 -500 326 -424 640 -640 480 -640 426 -640 383 -580 329 -334 500 -500 333 -640 424 -640 346 -640 472 -640 537 -640 640 -375 500 -427 640 -640 480 -640 424 -640 480 -427 640 -640 480 -480 640 -612 612 -500 375 -480 640 -640 427 -640 426 -640 480 -500 375 -375 500 -640 427 -640 360 -640 384 -640 480 -480 640 -640 614 -612 612 -500 375 -438 500 -640 480 -640 427 -640 480 -375 500 -640 271 -428 640 -640 521 -640 426 -640 480 -640 426 -640 480 -640 481 -612 612 -640 427 -640 426 -500 281 -429 640 -640 486 -375 500 -640 480 -640 480 -427 640 -640 480 -640 428 -375 500 -640 478 -612 612 -640 480 -640 480 -500 330 -375 500 -427 640 -640 428 -480 640 -640 428 -640 398 -480 640 -446 640 -640 480 -375 500 -640 481 -640 427 -640 398 -478 640 -476 640 -640 427 -640 480 -640 428 -640 427 -640 480 -640 479 -640 480 -427 640 -640 426 -500 375 -500 375 -640 428 -480 640 -640 425 -640 543 -412 640 -500 375 -640 404 -480 640 -500 375 -640 524 -640 426 -640 480 -500 375 -640 427 -480 640 -428 640 -500 333 -640 480 -612 612 -640 427 -427 640 -514 640 -640 434 -640 424 -640 359 -480 640 -640 480 -640 483 -500 375 -640 480 -640 425 -612 612 -640 480 -640 429 -480 640 -640 427 -640 512 -640 401 -612 612 -500 375 -640 512 -640 480 -500 375 -552 640 -640 480 -640 480 -640 519 -521 640 -640 480 -640 427 -500 375 -640 480 -640 426 -640 426 -640 427 -500 375 -427 640 -640 429 -640 546 -427 640 -500 335 -640 480 -640 480 -640 428 -640 481 -640 407 -427 640 -640 480 -500 353 -427 640 -640 426 -480 640 -640 480 -640 378 -640 480 -640 311 -640 359 -640 426 -329 500 -640 480 -640 480 -640 427 -640 425 -500 332 -600 600 -400 542 -640 425 -640 512 -640 480 -427 640 -640 427 -500 375 -640 480 -480 640 -427 640 -500 375 -640 631 -640 480 -640 361 -500 375 -640 427 -640 428 -640 424 -480 640 -640 428 -640 480 -640 480 -480 640 -640 427 -640 480 -500 375 -513 640 -478 640 -500 382 -640 425 -640 609 -474 640 -500 373 -640 427 -640 377 -425 640 -640 480 -475 640 -640 479 -640 427 -613 640 -480 640 -640 480 -480 640 -640 378 -640 360 -449 640 -360 640 -640 479 -640 480 -480 640 -640 440 -640 640 -640 360 -500 375 -640 427 -640 427 -640 480 -640 360 -612 612 -500 375 -480 640 -640 427 -640 427 -640 575 -640 480 -640 480 -480 640 -640 426 -640 480 -282 500 -640 480 -640 429 -640 315 -640 480 -640 479 -640 480 -500 500 -640 418 -640 425 -640 640 -640 428 -640 480 -640 427 -640 426 -640 427 -411 640 -480 640 -640 480 -500 375 -640 480 -640 528 -640 426 -500 358 -612 612 -640 478 -640 425 -640 522 -640 428 -640 426 -640 428 -640 484 -427 640 -640 426 -457 640 -320 213 -640 427 -480 640 -640 425 -640 480 -640 480 -640 459 -428 640 -612 612 -640 480 -640 480 -640 427 -640 427 -516 640 -640 383 -640 640 -640 425 -500 333 -480 640 -640 427 -427 640 -640 584 -375 500 -426 640 -640 504 -640 480 -640 414 -640 427 -640 502 -500 364 -640 480 -461 640 -640 440 -375 500 -640 480 -640 476 -512 640 -640 439 -640 359 -640 480 -640 425 -640 427 -640 640 -500 334 -375 500 -333 500 -500 332 -640 428 -640 426 -640 428 -427 640 -640 480 -640 427 -428 640 -612 612 -640 426 -640 480 -640 427 -640 391 -640 512 -640 427 -640 480 -500 333 -640 427 -463 640 -500 331 -640 480 -640 592 -640 462 -640 480 -640 428 -640 480 -640 361 -333 500 -480 640 -640 427 -480 640 -640 427 -640 480 -549 640 -399 640 -640 426 -640 333 -640 463 -298 500 -480 640 -640 426 -640 427 -640 413 -640 442 -640 428 -640 427 -426 640 -640 424 -640 522 -483 640 -640 428 -640 480 -480 640 -640 428 -640 480 -640 428 -427 640 -427 640 -640 491 -640 480 -640 428 -640 480 -480 640 -480 640 -640 428 -640 427 -500 375 -640 480 -500 375 -640 463 -640 386 -640 480 -500 375 -640 427 -640 480 -309 640 -640 480 -640 426 -419 640 -480 640 -612 612 -500 375 -640 480 -480 640 -500 375 -373 640 -640 480 -640 426 -128 160 -640 427 -500 375 -480 640 -500 400 -427 640 -640 400 -539 445 -640 427 -640 424 -428 640 -480 640 -640 425 -500 375 -479 640 -640 427 -640 427 -480 640 -640 478 -640 429 -640 374 -640 480 -500 500 -640 427 -640 440 -640 480 -612 612 -439 640 -640 457 -612 612 -640 481 -427 640 -640 480 -640 427 -640 480 -640 426 -477 640 -640 458 -640 426 -500 375 -640 428 -640 480 -375 500 -500 334 -640 480 -640 480 -640 489 -428 640 -640 480 -500 375 -640 427 -640 480 -640 426 -640 512 -640 480 -640 293 -401 640 -640 480 -359 500 -323 500 -427 640 -480 640 -640 424 -640 427 -500 375 -640 409 -480 640 -640 424 -640 480 -500 281 -640 427 -640 480 -640 426 -375 500 -640 480 -640 480 -612 612 -640 533 -416 350 -640 480 -640 427 -375 500 -640 427 -640 640 -640 480 -640 428 -640 412 -640 480 -640 480 -640 480 -640 427 -640 359 -612 612 -640 427 -491 500 -640 427 -427 640 -287 432 -426 640 -334 500 -320 240 -359 500 -500 375 -640 427 -640 339 -640 480 -432 288 -496 640 -500 335 -640 426 -427 640 -517 640 -640 529 -640 425 -640 383 -640 480 -390 640 -640 427 -333 500 -640 480 -640 462 -640 427 -640 480 -640 433 -480 640 -640 436 -425 640 -500 400 -640 479 -640 427 -640 428 -640 427 -640 480 -576 401 -640 480 -640 480 -640 426 -640 480 -375 500 -640 426 -478 640 -640 480 -640 426 -640 427 -640 480 -425 640 -640 480 -269 640 -480 640 -500 375 -640 480 -480 640 -640 421 -640 452 -426 640 -459 500 -640 427 -640 428 -640 427 -640 426 -640 480 -480 640 -640 427 -640 433 -640 480 -427 640 -640 472 -640 427 -640 480 -640 331 -480 640 -640 427 -640 416 -509 640 -500 375 -640 480 -640 480 -640 426 -640 428 -640 480 -640 425 -640 448 -640 480 -640 428 -480 640 -640 474 -640 428 -400 500 -640 480 -500 281 -480 640 -480 640 -640 443 -640 533 -640 427 -640 424 -480 640 -640 640 -500 375 -640 351 -640 428 -500 376 -640 427 -421 640 -640 480 -640 480 -640 360 -640 427 -640 427 -640 451 -640 428 -640 480 -640 369 -640 640 -640 480 -433 640 -640 433 -640 427 -640 424 -480 640 -427 640 -640 428 -640 427 -480 640 -640 480 -640 360 -640 480 -640 480 -500 375 -640 480 -640 480 -612 612 -640 426 -640 427 -640 480 -456 640 -640 427 -640 420 -480 640 -640 427 -640 457 -640 508 -640 457 -640 427 -640 427 -640 427 -640 429 -640 539 -640 488 -640 480 -427 640 -640 424 -640 543 -521 640 -640 480 -500 375 -640 364 -444 640 -640 427 -640 461 -480 640 -640 427 -479 640 -420 640 -640 505 -375 500 -640 450 -640 427 -640 333 -640 480 -640 427 -640 425 -640 426 -640 428 -640 427 -640 427 -471 640 -480 640 -640 640 -424 640 -500 334 -640 544 -640 386 -640 427 -427 640 -640 391 -640 480 -640 536 -425 640 -640 480 -377 500 -358 500 -480 640 -640 427 -640 480 -427 640 -500 303 -640 480 -640 426 -640 640 -640 398 -640 433 -640 428 -640 480 -450 350 -640 457 -451 640 -640 576 -640 427 -427 640 -640 523 -640 429 -428 640 -640 425 -480 640 -640 410 -479 640 -640 480 -640 427 -500 333 -459 640 -640 427 -640 360 -513 640 -427 640 -640 406 -640 603 -500 331 -640 427 -409 500 -640 427 -640 480 -640 427 -480 640 -478 640 -640 480 -612 612 -480 640 -640 427 -640 480 -500 332 -375 500 -600 600 -640 427 -480 640 -612 612 -500 331 -480 640 -640 480 -640 480 -640 427 -640 458 -640 429 -640 428 -640 427 -640 543 -640 480 -500 325 -500 318 -640 426 -640 480 -640 640 -480 640 -332 500 -640 427 -480 640 -640 427 -375 640 -640 480 -375 500 -427 640 -480 640 -640 480 -640 427 -427 640 -640 428 -640 424 -640 480 -640 468 -640 427 -640 480 -640 480 -640 463 -640 513 -640 427 -640 480 -640 425 -640 400 -640 427 -640 425 -640 480 -640 476 -640 480 -640 428 -640 428 -500 375 -500 334 -640 480 -640 480 -500 357 -426 640 -640 480 -640 480 -427 640 -427 640 -480 640 -480 640 -497 500 -480 640 -479 640 -640 428 -640 426 -640 640 -640 426 -640 427 -500 375 -640 452 -640 427 -500 347 -640 426 -612 612 -640 480 -421 640 -640 427 -640 432 -640 480 -640 427 -500 375 -612 612 -640 427 -364 500 -402 600 -640 439 -478 640 -640 478 -375 500 -640 480 -640 427 -640 480 -640 480 -640 427 -640 426 -640 480 -640 427 -640 427 -640 393 -480 640 -612 612 -332 500 -426 640 -640 427 -395 640 -640 480 -640 480 -480 640 -640 480 -640 426 -480 640 -640 214 -640 496 -640 426 -419 640 -500 333 -500 400 -640 478 -640 318 -500 500 -640 426 -612 612 -640 480 -640 428 -640 427 -640 360 -640 424 -640 456 -567 640 -640 480 -466 640 -500 345 -640 480 -427 640 -640 480 -500 333 -343 500 -640 480 -640 480 -640 480 -640 640 -478 640 -375 500 -640 480 -640 421 -640 426 -640 480 -640 480 -640 480 -640 320 -640 428 -640 480 -640 449 -640 360 -640 480 -640 426 -640 456 -640 427 -640 426 -640 480 -640 360 -500 375 -640 427 -360 640 -640 427 -640 426 -640 478 -640 398 -640 425 -640 430 -462 640 -619 640 -640 379 -640 425 -480 640 -640 428 -640 427 -426 640 -427 640 -333 500 -427 640 -640 394 -640 426 -640 480 -640 383 -640 267 -500 417 -604 403 -427 640 -478 640 -640 400 -640 480 -500 334 -640 533 -640 427 -640 480 -640 427 -640 480 -640 408 -640 426 -640 480 -640 425 -640 428 -640 427 -480 640 -640 495 -188 285 -640 429 -640 480 -427 640 -640 431 -612 612 -640 424 -640 427 -640 426 -500 333 -640 459 -341 500 -640 426 -500 375 -480 273 -640 480 -640 425 -425 640 -640 480 -640 426 -640 480 -425 640 -427 640 -640 427 -480 640 -640 480 -480 640 -480 640 -244 183 -480 640 -640 428 -500 375 -500 375 -640 427 -480 640 -640 384 -640 344 -640 523 -640 427 -427 640 -640 480 -500 356 -480 640 -332 500 -640 640 -612 612 -500 375 -640 426 -574 640 -479 640 -640 491 -427 640 -640 480 -500 333 -640 622 -640 427 -512 640 -640 480 -640 425 -480 640 -640 425 -640 466 -500 375 -640 427 -640 437 -640 480 -375 500 -425 640 -640 480 -640 594 -478 640 -375 500 -640 480 -640 425 -640 424 -427 640 -640 400 -640 480 -480 640 -500 452 -640 480 -427 640 -612 612 -427 640 -333 500 -640 427 -425 640 -640 480 -640 425 -640 427 -500 407 -640 429 -640 480 -500 375 -640 480 -640 427 -500 375 -381 640 -640 483 -427 640 -427 640 -640 419 -640 519 -640 427 -640 401 -612 612 -640 279 -640 480 -640 399 -500 375 -640 458 -640 481 -640 427 -349 614 -640 480 -481 640 -428 640 -640 480 -480 640 -480 640 -459 640 -640 427 -640 478 -640 427 -640 426 -640 425 -640 360 -640 480 -428 640 -480 640 -640 480 -640 426 -640 478 -640 427 -640 480 -640 453 -427 640 -640 640 -640 426 -428 640 -640 444 -640 480 -640 427 -640 480 -640 321 -640 360 -640 480 -640 359 -480 640 -640 480 -404 640 -640 429 -640 480 -500 375 -640 430 -640 480 -640 417 -640 480 -640 448 -469 640 -640 480 -425 640 -333 500 -640 481 -640 480 -640 427 -640 423 -428 640 -640 430 -640 464 -640 427 -640 480 -640 535 -424 640 -640 512 -640 480 -640 427 -500 375 -640 480 -500 375 -640 480 -640 449 -640 480 -500 375 -640 427 -640 427 -427 640 -640 480 -640 426 -640 436 -640 413 -465 640 -640 480 -640 426 -425 640 -640 428 -428 640 -640 359 -640 398 -640 480 -640 480 -640 497 -640 426 -640 328 -500 375 -482 640 -480 640 -339 500 -501 640 -640 427 -640 433 -640 428 -640 480 -500 335 -640 428 -640 344 -640 480 -500 375 -640 427 -640 426 -480 640 -640 425 -640 427 -640 427 -640 359 -640 480 -473 640 -481 640 -576 640 -640 640 -600 464 -640 424 -640 427 -640 426 -640 480 -481 640 -500 461 -640 278 -480 640 -500 345 -640 427 -640 480 -612 612 -640 345 -480 640 -427 640 -640 480 -640 480 -640 480 -640 427 -640 426 -640 383 -410 500 -500 375 -640 480 -640 640 -333 500 -640 480 -640 427 -640 480 -640 640 -640 425 -640 427 -480 640 -640 427 -500 374 -612 612 -333 500 -640 569 -640 427 -640 430 -640 428 -500 375 -640 480 -375 500 -640 427 -640 480 -480 640 -640 427 -640 480 -640 490 -278 500 -640 480 -542 640 -640 480 -640 480 -333 500 -640 427 -640 427 -640 470 -640 400 -640 419 -480 640 -640 426 -500 375 -640 480 -640 480 -427 640 -640 426 -640 480 -512 640 -640 480 -424 640 -640 341 -640 480 -640 360 -480 640 -640 480 -640 427 -375 500 -640 427 -426 640 -640 427 -480 640 -640 427 -500 357 -427 640 -640 426 -640 444 -480 640 -640 426 -640 478 -640 480 -640 365 -640 517 -480 640 -640 480 -640 426 -333 500 -640 427 -640 480 -463 640 -640 480 -640 427 -640 429 -640 378 -424 640 -640 480 -427 640 -640 453 -640 480 -426 640 -640 427 -640 428 -640 424 -640 480 -427 640 -640 480 -640 480 -500 375 -640 427 -640 480 -640 468 -442 640 -640 480 -480 640 -600 400 -640 427 -640 480 -640 480 -640 427 -640 427 -640 451 -640 426 -640 426 -640 449 -427 640 -640 511 -391 640 -640 496 -500 375 -640 480 -640 480 -640 427 -640 640 -500 381 -640 425 -640 427 -640 480 -640 480 -640 480 -480 640 -500 142 -640 480 -426 640 -457 640 -618 640 -640 480 -424 640 -640 348 -640 360 -640 480 -429 640 -640 480 -429 640 -480 640 -640 424 -640 428 -640 480 -512 640 -640 428 -640 480 -640 427 -478 640 -640 471 -640 429 -640 640 -640 427 -500 375 -640 359 -640 425 -640 480 -640 444 -640 425 -640 480 -640 398 -640 640 -640 426 -640 480 -640 427 -500 333 -640 425 -640 424 -500 375 -640 506 -500 333 -640 425 -480 640 -640 428 -480 640 -640 425 -640 427 -375 500 -640 620 -640 480 -640 446 -640 427 -640 456 -422 640 -461 640 -425 640 -640 480 -427 640 -640 214 -612 612 -640 360 -480 640 -500 333 -640 480 -640 470 -640 427 -640 427 -612 612 -640 480 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 425 -640 480 -612 612 -426 640 -640 480 -375 500 -497 640 -397 640 -640 480 -357 500 -640 480 -480 640 -640 427 -640 480 -640 433 -500 375 -640 480 -640 427 -640 482 -640 427 -640 427 -640 480 -500 333 -640 419 -640 558 -640 478 -640 426 -640 449 -640 480 -500 375 -333 500 -640 384 -500 332 -480 640 -640 425 -640 426 -640 398 -640 430 -640 369 -640 427 -432 640 -640 480 -640 360 -500 375 -640 426 -640 427 -500 291 -640 640 -640 426 -500 375 -640 426 -500 375 -640 424 -640 640 -640 480 -640 427 -640 480 -640 427 -456 640 -640 480 -480 640 -640 387 -640 491 -640 478 -640 426 -640 427 -640 508 -640 564 -428 640 -640 480 -640 480 -500 401 -425 640 -640 360 -640 427 -640 573 -480 640 -640 480 -640 427 -640 360 -480 640 -640 427 -500 375 -640 480 -640 480 -640 426 -640 480 -612 612 -640 480 -343 640 -640 427 -640 423 -640 358 -640 423 -546 640 -640 480 -640 428 -640 427 -640 373 -640 427 -425 640 -640 562 -612 612 -500 333 -432 640 -640 408 -640 426 -640 480 -500 333 -611 425 -427 640 -640 640 -500 332 -500 375 -640 425 -640 478 -640 427 -640 480 -640 480 -360 640 -640 303 -640 480 -640 427 -640 361 -447 400 -428 500 -640 427 -500 252 -640 480 -640 427 -640 640 -500 375 -640 440 -427 640 -452 640 -640 480 -640 480 -480 640 -640 614 -640 427 -500 375 -640 480 -640 480 -640 400 -640 480 -500 330 -640 480 -427 640 -640 600 -640 426 -640 479 -640 553 -500 375 -512 640 -640 427 -427 640 -500 400 -640 426 -500 333 -424 640 -393 500 -640 427 -640 400 -640 480 -640 480 -353 500 -640 425 -640 294 -500 334 -640 490 -640 424 -500 375 -512 640 -500 383 -375 500 -412 640 -640 424 -500 378 -640 480 -640 427 -500 333 -640 440 -500 347 -480 640 -640 480 -640 426 -426 640 -640 480 -640 426 -640 360 -640 427 -640 480 -640 480 -640 457 -480 640 -640 427 -640 428 -640 426 -640 425 -640 427 -375 500 -640 348 -640 427 -640 427 -427 640 -428 640 -640 363 -640 427 -640 360 -428 640 -640 504 -426 640 -640 427 -333 500 -640 426 -640 427 -640 426 -640 480 -500 437 -220 186 -640 480 -640 640 -640 480 -640 406 -480 640 -500 357 -640 480 -640 424 -373 640 -464 640 -640 478 -427 640 -640 480 -612 612 -640 429 -640 480 -640 426 -640 480 -500 400 -500 335 -640 427 -360 640 -426 640 -480 640 -480 640 -429 640 -640 427 -380 324 -462 640 -480 640 -480 640 -640 426 -640 427 -640 480 -640 426 -640 424 -640 490 -640 499 -640 480 -640 427 -457 640 -500 329 -640 480 -480 640 -640 385 -640 480 -640 241 -640 480 -480 640 -640 426 -640 479 -333 500 -640 640 -500 323 -500 340 -640 412 -640 426 -640 426 -640 481 -640 424 -640 480 -640 437 -640 425 -512 640 -640 480 -640 426 -640 408 -640 376 -640 480 -640 480 -640 427 -425 640 -640 478 -640 426 -427 640 -375 500 -500 375 -640 480 -480 640 -640 427 -375 500 -500 334 -640 427 -640 382 -640 425 -640 480 -640 480 -640 480 -640 458 -640 427 -640 480 -427 640 -640 640 -640 480 -640 480 -426 640 -640 427 -505 640 -640 480 -640 360 -428 640 -640 426 -640 427 -480 640 -640 425 -640 479 -640 480 -640 513 -426 640 -427 640 -239 360 -480 640 -640 363 -500 428 -640 427 -640 491 -640 512 -640 426 -500 286 -640 427 -612 612 -640 384 -513 640 -500 375 -427 640 -640 426 -428 640 -640 480 -640 424 -640 428 -640 429 -640 360 -640 426 -457 640 -640 480 -333 500 -343 500 -480 640 -640 307 -640 480 -640 371 -375 500 -640 427 -640 427 -640 427 -640 428 -500 307 -303 640 -640 426 -500 333 -640 426 -640 427 -640 593 -480 640 -640 360 -640 480 -640 427 -426 640 -640 480 -500 375 -500 375 -480 640 -640 480 -640 364 -640 480 -375 500 -640 480 -640 427 -640 427 -640 427 -374 500 -457 640 -500 333 -375 500 -640 426 -640 480 -640 425 -640 428 -640 428 -427 640 -640 460 -373 640 -428 640 -427 640 -640 480 -427 640 -640 360 -640 433 -640 480 -640 426 -640 427 -640 480 -640 428 -640 426 -640 480 -557 640 -640 424 -568 640 -640 480 -640 480 -375 500 -640 425 -480 640 -640 480 -640 480 -440 470 -640 360 -500 375 -428 640 -640 427 -640 480 -640 427 -480 640 -390 640 -640 480 -640 427 -640 478 -426 640 -640 480 -458 640 -427 640 -427 640 -479 640 -375 500 -640 427 -425 640 -640 428 -427 640 -640 480 -640 483 -640 480 -640 383 -640 480 -480 640 -640 425 -426 640 -443 640 -640 429 -426 640 -640 480 -640 480 -640 480 -640 427 -480 640 -640 480 -640 640 -640 480 -436 640 -640 480 -500 333 -640 480 -640 426 -640 429 -500 375 -640 426 -429 640 -640 434 -640 491 -640 426 -480 640 -500 375 -640 480 -375 500 -640 428 -640 480 -480 640 -640 476 -640 427 -640 425 -500 375 -612 612 -500 167 -640 480 -640 426 -640 584 -640 480 -480 640 -464 640 -640 480 -480 640 -395 640 -640 582 -500 375 -640 480 -427 640 -640 480 -640 480 -640 480 -500 342 -640 427 -640 480 -500 282 -417 500 -500 375 -443 640 -480 640 -640 475 -640 640 -640 427 -427 640 -480 640 -640 427 -500 375 -429 640 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 424 -640 480 -640 427 -640 427 -640 480 -640 512 -425 640 -640 401 -640 428 -640 428 -640 480 -640 427 -640 423 -612 612 -500 333 -640 421 -640 427 -640 480 -640 480 -500 375 -640 478 -640 480 -427 640 -640 427 -640 478 -478 640 -640 427 -640 427 -428 640 -612 612 -640 426 -640 433 -480 640 -640 480 -360 640 -375 500 -612 612 -640 414 -640 360 -426 640 -521 640 -640 479 -640 427 -427 640 -640 408 -640 480 -640 480 -640 427 -640 428 -640 360 -640 446 -640 480 -640 400 -640 427 -640 480 -640 458 -640 424 -640 427 -426 640 -500 358 -640 426 -640 425 -500 375 -640 427 -640 414 -640 426 -427 640 -640 502 -640 480 -500 500 -640 231 -640 427 -640 480 -640 523 -427 640 -426 640 -640 480 -640 427 -640 427 -480 640 -640 413 -640 480 -640 427 -640 428 -500 333 -480 640 -640 426 -640 480 -480 640 -361 640 -375 500 -640 426 -640 480 -427 640 -480 640 -425 640 -480 640 -375 500 -640 480 -500 197 -500 375 -640 457 -640 424 -640 480 -640 425 -640 361 -640 480 -640 421 -497 640 -612 612 -640 429 -480 640 -640 480 -640 480 -640 480 -640 480 -640 247 -640 480 -427 640 -640 421 -640 427 -427 640 -612 612 -640 427 -400 500 -500 333 -640 480 -640 427 -640 480 -640 427 -500 375 -480 640 -640 427 -640 427 -360 640 -500 375 -640 480 -640 480 -640 427 -640 480 -640 512 -640 426 -640 425 -640 359 -640 425 -640 425 -640 480 -480 640 -640 480 -426 640 -640 426 -640 432 -640 455 -640 425 -640 640 -640 426 -640 440 -480 640 -640 425 -509 640 -640 480 -640 480 -640 480 -640 426 -640 427 -640 480 -640 424 -500 331 -427 640 -480 640 -426 640 -640 360 -640 153 -612 612 -640 361 -604 640 -640 452 -640 411 -478 640 -640 480 -612 612 -500 400 -640 480 -640 480 -640 427 -640 480 -640 427 -480 640 -426 640 -640 427 -640 427 -612 612 -500 469 -640 428 -640 480 -640 426 -640 480 -640 480 -640 448 -640 425 -640 480 -375 500 -640 426 -612 612 -438 640 -383 640 -480 640 -640 478 -599 363 -612 612 -480 640 -640 424 -640 427 -640 480 -640 360 -500 400 -640 401 -640 480 -640 473 -640 427 -640 480 -640 427 -640 480 -640 428 -640 480 -640 480 -640 480 -640 480 -640 427 -480 640 -640 427 -640 480 -640 427 -640 320 -640 434 -500 375 -500 375 -640 427 -480 640 -500 375 -640 427 -640 425 -640 426 -640 480 -640 427 -640 480 -640 424 -425 640 -640 480 -640 427 -640 539 -640 480 -640 429 -640 480 -640 483 -640 426 -640 480 -640 428 -383 640 -500 374 -640 480 -640 281 -640 425 -640 427 -640 480 -640 428 -640 427 -500 375 -640 426 -640 413 -427 640 -500 448 -640 426 -499 640 -640 426 -480 640 -640 426 -640 428 -640 361 -427 640 -500 333 -480 640 -640 160 -640 503 -640 480 -640 427 -640 361 -640 480 -500 475 -481 640 -640 480 -431 640 -640 427 -500 375 -640 427 -427 640 -640 480 -640 427 -640 480 -427 640 -480 640 -500 375 -640 396 -640 480 -428 640 -640 427 -452 640 -612 612 -500 332 -427 640 -640 427 -640 480 -488 640 -640 427 -640 426 -535 640 -640 480 -480 640 -640 426 -640 576 -640 360 -626 640 -500 375 -427 640 -427 640 -640 480 -640 480 -640 426 -640 480 -480 640 -640 480 -426 640 -480 640 -640 322 -640 427 -375 500 -640 425 -480 640 -500 242 -427 640 -428 640 -334 500 -640 461 -640 480 -640 480 -640 428 -640 480 -640 586 -468 640 -640 427 -640 480 -640 480 -640 549 -480 640 -640 427 -480 640 -612 612 -640 480 -640 427 -640 427 -640 551 -480 640 -640 480 -640 480 -640 427 -375 500 -640 427 -640 360 -480 640 -478 640 -500 332 -640 480 -427 640 -428 640 -481 640 -612 612 -375 500 -640 480 -500 375 -640 480 -512 640 -640 427 -640 425 -422 640 -500 375 -480 640 -640 424 -640 427 -480 640 -640 480 -640 480 -427 640 -640 480 -480 640 -612 612 -640 480 -640 427 -427 640 -500 375 -640 468 -640 426 -427 640 -427 640 -640 427 -427 640 -480 640 -640 480 -640 480 -480 640 -640 480 -640 497 -640 426 -640 640 -640 480 -640 480 -640 425 -375 500 -640 427 -500 375 -500 333 -640 508 -640 480 -500 400 -640 427 -640 480 -480 640 -640 427 -480 640 -640 480 -383 640 -640 439 -640 480 -640 427 -640 480 -500 338 -375 500 -640 640 -640 480 -640 426 -480 640 -367 640 -626 640 -480 640 -640 426 -336 640 -640 376 -480 640 -640 559 -500 400 -640 427 -640 427 -640 426 -640 425 -640 480 -640 480 -640 429 -477 640 -640 480 -640 438 -375 500 -640 480 -500 333 -612 612 -640 360 -480 640 -640 480 -493 640 -640 427 -640 363 -640 481 -480 640 -375 500 -640 429 -478 640 -640 480 -640 427 -640 372 -640 427 -640 427 -480 640 -640 427 -459 640 -500 335 -640 428 -640 480 -640 639 -640 432 -500 375 -500 333 -500 333 -500 400 -640 426 -640 480 -640 640 -640 478 -640 480 -640 426 -640 360 -640 480 -640 426 -640 428 -640 480 -640 536 -500 604 -640 480 -480 640 -500 375 -500 375 -500 332 -640 339 -612 612 -640 480 -640 480 -640 458 -427 640 -480 640 -640 424 -640 426 -480 640 -435 500 -428 640 -640 480 -500 345 -425 640 -640 480 -427 640 -429 640 -612 612 -640 427 -480 640 -612 612 -610 411 -640 427 -640 381 -333 500 -480 640 -640 393 -640 427 -640 522 -640 562 -640 480 -500 375 -640 427 -612 612 -375 500 -640 426 -425 640 -480 640 -612 612 -424 640 -640 512 -500 375 -427 640 -426 640 -612 612 -640 480 -640 480 -280 500 -500 333 -640 480 -640 427 -640 427 -640 548 -640 480 -640 428 -640 442 -640 628 -640 431 -640 427 -483 640 -640 480 -500 280 -640 480 -480 640 -457 640 -640 480 -640 480 -640 400 -500 375 -420 640 -640 428 -640 424 -500 332 -500 289 -428 640 -432 640 -640 480 -640 404 -640 480 -380 500 -500 375 -640 427 -640 520 -640 480 -640 480 -640 423 -500 333 -640 480 -640 427 -640 476 -640 426 -500 333 -640 424 -640 480 -500 375 -480 640 -640 426 -375 500 -457 640 -640 432 -640 480 -640 488 -640 508 -640 312 -640 368 -640 426 -640 379 -640 426 -640 426 -500 333 -640 480 -640 478 -640 639 -640 425 -640 478 -427 640 -640 480 -640 506 -640 480 -500 335 -640 425 -500 379 -640 427 -500 375 -476 640 -640 426 -500 375 -640 427 -500 335 -426 640 -640 627 -640 480 -640 480 -640 480 -640 425 -640 480 -428 640 -360 640 -640 480 -640 428 -500 375 -640 427 -640 480 -640 493 -640 480 -427 640 -640 426 -500 254 -590 443 -640 480 -360 640 -640 480 -640 408 -640 480 -480 640 -640 480 -425 640 -640 449 -425 640 -640 640 -640 480 -635 640 -640 427 -640 360 -640 480 -640 383 -640 480 -375 500 -640 427 -640 427 -640 427 -640 426 -640 360 -640 424 -640 427 -640 640 -480 640 -640 480 -640 428 -640 427 -640 480 -640 480 -640 480 -640 427 -480 640 -640 512 -640 294 -640 428 -480 640 -640 640 -640 424 -640 426 -640 426 -640 480 -640 480 -640 480 -640 480 -640 451 -551 640 -612 612 -427 640 -500 375 -640 426 -640 426 -640 426 -493 500 -428 640 -640 480 -640 427 -480 640 -640 480 -480 640 -640 480 -480 640 -640 427 -640 480 -640 426 -640 428 -640 480 -640 480 -640 360 -640 480 -640 428 -640 427 -640 480 -640 428 -640 424 -480 640 -640 425 -640 425 -640 480 -640 478 -640 480 -640 480 -640 480 -612 612 -480 640 -640 398 -500 375 -427 640 -480 640 -640 548 -640 426 -640 504 -480 640 -640 427 -640 478 -427 640 -640 427 -640 429 -500 333 -286 427 -612 612 -500 375 -563 640 -454 289 -429 640 -640 427 -427 640 -640 640 -500 375 -426 640 -500 281 -640 387 -640 428 -640 427 -640 426 -480 640 -480 640 -640 480 -640 425 -640 425 -640 480 -429 640 -640 426 -528 640 -640 428 -640 426 -500 335 -640 512 -500 375 -640 480 -640 428 -640 230 -640 428 -640 457 -333 500 -500 321 -640 480 -640 427 -640 480 -612 612 -480 640 -640 481 -640 427 -480 640 -640 427 -640 481 -488 500 -640 427 -640 403 -640 433 -640 480 -640 427 -480 640 -640 427 -426 640 -640 480 -640 480 -210 126 -640 480 -640 410 -428 640 -375 500 -500 335 -375 500 -640 480 -500 375 -640 427 -640 480 -500 333 -640 427 -480 640 -429 640 -640 480 -480 640 -480 329 -500 333 -500 375 -640 480 -360 480 -640 416 -640 480 -480 640 -640 400 -461 640 -500 333 -640 396 -424 640 -500 375 -640 425 -612 612 -640 427 -640 448 -640 241 -640 426 -500 350 -640 427 -427 640 -640 424 -500 375 -640 492 -640 425 -640 434 -640 425 -216 301 -640 428 -640 480 -500 371 -500 333 -640 428 -481 640 -480 640 -640 480 -640 322 -640 427 -640 478 -427 640 -640 427 -640 480 -439 640 -640 427 -640 480 -480 640 -640 426 -500 333 -640 427 -640 429 -640 427 -640 480 -500 375 -640 427 -640 497 -480 640 -640 463 -480 640 -356 500 -500 375 -640 428 -480 640 -500 289 -640 427 -640 480 -640 436 -427 640 -640 480 -640 640 -640 418 -480 640 -640 426 -375 500 -640 480 -640 427 -640 427 -480 640 -640 480 -640 320 -480 640 -640 426 -640 428 -640 480 -640 426 -640 426 -640 457 -640 427 -640 427 -640 457 -480 640 -448 298 -640 480 -640 426 -640 483 -640 480 -458 640 -640 480 -333 500 -640 403 -640 480 -640 427 -640 360 -640 569 -360 640 -612 612 -640 480 -640 478 -640 424 -640 427 -640 427 -640 359 -640 480 -640 548 -612 612 -375 500 -333 500 -640 429 -640 480 -640 480 -480 640 -428 640 -640 426 -640 399 -640 480 -640 427 -517 388 -640 429 -640 427 -640 480 -640 424 -640 426 -640 425 -480 640 -640 480 -640 360 -640 427 -640 425 -425 640 -640 480 -640 414 -480 640 -640 480 -640 480 -640 427 -640 480 -612 612 -612 612 -500 375 -426 640 -640 426 -640 480 -640 394 -640 427 -612 612 -426 640 -640 428 -640 480 -375 500 -640 480 -640 352 -500 332 -640 480 -443 640 -640 427 -640 424 -446 640 -640 368 -640 640 -480 640 -531 640 -640 480 -478 640 -640 426 -640 427 -640 480 -333 500 -500 391 -612 612 -640 428 -457 640 -640 427 -500 375 -640 428 -500 500 -640 480 -640 427 -640 457 -426 640 -640 480 -640 427 -640 480 -480 640 -480 640 -640 588 -640 480 -612 612 -427 640 -640 425 -640 480 -500 375 -640 514 -640 480 -480 640 -640 427 -640 427 -640 360 -640 479 -500 329 -640 516 -640 424 -640 480 -640 604 -480 640 -640 480 -480 640 -640 427 -500 375 -500 333 -323 500 -640 480 -640 480 -640 427 -640 428 -640 258 -640 480 -640 480 -640 480 -640 472 -640 426 -640 426 -500 375 -640 425 -480 640 -494 640 -640 426 -640 480 -500 375 -388 640 -640 480 -640 480 -640 427 -640 427 -427 640 -512 640 -640 427 -365 500 -494 640 -640 259 -640 427 -640 400 -640 480 -425 640 -612 612 -640 480 -640 427 -640 480 -640 427 -480 640 -640 427 -640 480 -640 400 -640 640 -640 428 -640 480 -640 428 -640 480 -640 491 -426 640 -640 427 -640 480 -480 640 -640 427 -640 480 -640 427 -480 640 -427 640 -427 640 -640 427 -500 375 -640 480 -480 640 -481 640 -640 359 -640 480 -612 612 -640 427 -640 480 -500 333 -640 427 -428 640 -640 361 -640 402 -640 427 -500 375 -427 640 -640 427 -640 428 -640 480 -640 396 -500 375 -640 417 -640 411 -640 426 -640 427 -640 480 -500 375 -640 427 -640 427 -427 640 -640 427 -640 480 -427 640 -427 640 -640 480 -640 424 -640 338 -640 480 -480 640 -640 428 -640 480 -640 426 -640 426 -500 475 -640 427 -640 468 -640 427 -480 640 -640 480 -640 424 -640 427 -516 387 -426 640 -628 406 -640 427 -478 640 -640 364 -500 333 -480 640 -640 427 -640 358 -640 359 -519 640 -429 640 -640 457 -640 457 -640 427 -375 500 -640 418 -640 427 -640 394 -427 640 -500 375 -640 425 -561 640 -480 640 -640 348 -640 428 -500 363 -640 427 -513 640 -640 424 -500 281 -640 360 -427 640 -640 360 -640 480 -640 426 -500 500 -640 428 -640 498 -640 342 -640 483 -480 640 -640 480 -640 427 -612 612 -612 612 -612 612 -640 480 -640 640 -640 480 -640 425 -480 640 -640 424 -640 480 -480 640 -640 480 -640 425 -500 333 -640 425 -500 380 -640 480 -426 640 -640 426 -640 413 -640 427 -480 640 -449 640 -640 427 -588 640 -640 480 -640 431 -640 426 -640 480 -427 640 -500 362 -640 480 -500 375 -500 345 -427 640 -640 462 -640 428 -640 427 -640 514 -640 480 -640 426 -640 480 -495 500 -427 640 -640 480 -640 427 -314 640 -640 426 -376 500 -480 640 -640 426 -428 640 -480 640 -640 419 -325 500 -640 427 -640 427 -640 480 -352 640 -500 375 -375 500 -500 332 -640 480 -640 533 -500 335 -640 604 -500 375 -480 640 -640 477 -640 426 -500 375 -640 427 -426 640 -640 481 -640 427 -640 425 -640 480 -612 612 -640 427 -640 480 -512 640 -458 640 -429 640 -640 429 -640 427 -640 478 -640 427 -500 246 -640 480 -640 327 -640 427 -640 425 -640 427 -612 612 -640 252 -640 480 -640 480 -640 427 -640 198 -640 491 -640 480 -640 480 -640 480 -640 480 -640 428 -480 640 -640 434 -640 427 -427 640 -640 427 -500 373 -640 457 -640 360 -640 426 -427 640 -635 640 -612 612 -640 480 -640 426 -640 427 -500 333 -500 375 -450 337 -640 427 -640 368 -640 427 -640 480 -640 424 -640 480 -640 567 -500 375 -600 604 -613 640 -640 427 -640 427 -640 471 -640 480 -478 640 -587 640 -640 427 -538 640 -612 612 -640 480 -375 500 -458 640 -427 640 -640 398 -500 375 -640 256 -640 425 -480 640 -640 311 -640 427 -500 279 -640 480 -612 612 -364 500 -375 500 -500 375 -640 480 -640 480 -640 428 -640 640 -456 640 -399 640 -612 612 -640 480 -500 330 -480 640 -640 396 -640 480 -427 640 -640 456 -640 426 -612 612 -500 375 -500 357 -640 480 -450 298 -500 397 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -640 621 -500 375 -640 480 -500 331 -640 414 -640 480 -640 359 -640 480 -633 640 -640 480 -640 480 -640 428 -640 396 -480 640 -500 375 -494 500 -640 480 -640 510 -640 520 -640 480 -640 425 -640 427 -426 640 -387 500 -640 480 -640 424 -640 480 -500 332 -640 480 -640 421 -640 425 -640 424 -640 427 -640 480 -640 428 -640 427 -640 480 -640 424 -640 426 -640 360 -640 480 -640 480 -640 427 -640 425 -640 479 -500 334 -491 640 -480 640 -640 480 -640 473 -500 465 -375 500 -640 427 -640 427 -640 426 -640 480 -640 480 -500 329 -640 424 -500 487 -480 640 -640 480 -500 375 -640 480 -559 640 -640 463 -640 425 -428 640 -640 427 -500 382 -640 480 -640 523 -640 541 -640 480 -371 640 -640 426 -640 418 -640 401 -480 640 -425 640 -640 559 -500 490 -640 480 -428 640 -640 427 -640 427 -640 640 -640 427 -640 360 -480 640 -640 427 -341 500 -640 480 -426 640 -333 500 -640 480 -640 427 -480 640 -640 441 -640 426 -640 427 -640 480 -334 500 -640 424 -640 449 -640 419 -640 425 -640 427 -366 500 -322 500 -480 640 -448 640 -500 429 -640 425 -640 480 -640 480 -427 640 -478 640 -640 331 -480 640 -375 500 -640 480 -640 529 -640 426 -640 480 -640 480 -375 500 -425 640 -640 427 -640 480 -461 640 -640 428 -640 479 -640 427 -424 640 -640 427 -640 480 -500 359 -480 640 -640 427 -640 427 -480 640 -640 480 -640 458 -640 394 -640 425 -612 612 -500 375 -640 640 -480 640 -427 640 -640 408 -612 612 -640 427 -480 640 -640 426 -640 480 -640 593 -558 640 -640 481 -640 480 -640 426 -640 424 -640 480 -640 480 -500 375 -640 480 -500 424 -176 144 -640 427 -640 480 -640 480 -640 480 -640 426 -640 480 -480 640 -333 240 -427 640 -640 426 -640 480 -640 476 -640 480 -640 426 -640 427 -621 640 -640 480 -640 480 -640 426 -640 427 -640 480 -500 333 -375 500 -480 640 -640 480 -640 427 -640 427 -500 500 -640 423 -640 425 -640 480 -640 480 -640 427 -640 427 -640 425 -612 612 -640 426 -640 480 -640 425 -640 427 -640 640 -640 480 -500 375 -640 426 -500 271 -480 640 -500 375 -640 482 -640 427 -480 640 -640 427 -640 427 -640 480 -640 414 -640 427 -640 398 -640 480 -640 433 -640 426 -640 427 -480 360 -640 427 -640 480 -640 480 -480 640 -640 464 -612 612 -480 640 -640 480 -640 426 -640 480 -640 480 -640 480 -640 482 -500 386 -640 480 -500 377 -640 480 -640 427 -640 480 -640 480 -480 640 -424 640 -640 480 -640 427 -500 333 -640 424 -480 640 -500 333 -640 480 -640 400 -427 640 -640 427 -500 335 -640 416 -428 640 -640 427 -640 427 -500 333 -640 228 -640 426 -500 337 -480 640 -640 480 -640 424 -480 640 -500 409 -640 640 -640 640 -478 640 -411 500 -640 426 -640 427 -640 471 -640 480 -640 426 -640 403 -640 427 -640 428 -640 480 -640 480 -443 640 -640 548 -640 480 -640 480 -640 480 -480 640 -640 427 -480 640 -480 640 -640 298 -640 480 -480 640 -640 429 -640 458 -640 480 -640 427 -480 640 -640 480 -640 488 -499 640 -375 500 -640 480 -640 476 -640 427 -640 480 -640 456 -640 480 -500 375 -640 640 -500 375 -640 480 -357 500 -640 522 -480 640 -332 500 -480 640 -640 480 -640 427 -500 375 -426 640 -640 426 -640 427 -640 480 -500 375 -480 640 -640 428 -640 480 -480 640 -480 640 -640 428 -640 480 -500 379 -640 480 -427 640 -500 344 -640 424 -640 640 -427 640 -640 427 -500 375 -640 354 -426 640 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -480 640 -375 500 -599 640 -640 440 -640 640 -427 640 -640 441 -448 336 -500 375 -500 375 -640 480 -500 332 -640 480 -640 457 -336 448 -500 281 -480 640 -640 480 -427 640 -640 433 -396 640 -500 500 -480 640 -640 480 -640 480 -640 425 -480 640 -640 425 -640 427 -500 375 -640 480 -640 360 -480 640 -500 375 -512 640 -640 418 -500 431 -500 332 -640 400 -640 458 -640 425 -500 333 -640 360 -480 640 -640 394 -640 360 -500 375 -640 480 -640 359 -640 426 -640 425 -500 333 -640 512 -640 428 -427 640 -640 480 -480 640 -640 480 -494 640 -427 640 -480 640 -640 479 -640 427 -640 640 -640 427 -640 480 -480 640 -640 427 -640 480 -640 428 -426 640 -640 424 -640 480 -640 427 -640 426 -640 425 -640 360 -640 427 -640 480 -640 478 -640 425 -480 640 -426 640 -640 434 -500 375 -640 427 -427 640 -640 387 -640 424 -480 640 -494 640 -640 399 -640 465 -501 640 -640 480 -640 427 -594 640 -500 375 -640 414 -640 480 -640 479 -640 360 -640 480 -480 640 -480 640 -375 500 -480 640 -640 361 -424 640 -640 425 -640 424 -640 427 -640 427 -640 480 -380 500 -640 428 -640 480 -640 480 -640 479 -640 361 -640 480 -640 480 -640 415 -429 640 -640 427 -640 480 -500 375 -640 424 -500 373 -500 375 -431 640 -480 640 -428 640 -640 416 -640 424 -640 420 -640 424 -457 640 -480 640 -640 476 -500 319 -640 427 -640 480 -640 480 -640 480 -424 640 -640 427 -640 586 -640 480 -640 413 -375 500 -640 427 -640 424 -500 375 -640 480 -640 480 -428 640 -375 500 -288 432 -640 479 -640 427 -640 479 -640 464 -640 401 -480 640 -640 480 -427 640 -640 424 -640 451 -628 640 -640 425 -640 426 -500 375 -500 333 -482 640 -479 640 -427 640 -640 480 -640 427 -640 428 -640 427 -500 375 -640 480 -640 427 -500 375 -640 480 -640 480 -640 419 -428 640 -500 375 -640 640 -640 499 -640 427 -640 426 -640 408 -640 427 -640 425 -640 640 -640 427 -640 425 -404 500 -640 425 -640 425 -480 640 -640 480 -640 427 -640 480 -640 640 -640 480 -500 375 -640 618 -519 640 -480 640 -480 640 -640 480 -500 332 -426 640 -333 500 -640 480 -640 427 -640 480 -640 480 -500 311 -640 480 -640 480 -640 427 -640 480 -640 426 -640 480 -484 640 -480 640 -640 384 -424 640 -427 640 -640 480 -640 433 -640 575 -640 640 -640 419 -500 376 -640 427 -640 480 -333 500 -640 480 -640 427 -480 640 -480 640 -500 326 -640 480 -640 480 -640 453 -462 640 -640 353 -640 424 -640 424 -640 480 -640 427 -640 360 -640 368 -640 480 -640 427 -640 480 -640 427 -640 427 -640 434 -640 428 -640 427 -427 640 -500 400 -427 640 -640 431 -400 239 -640 426 -640 427 -480 640 -640 557 -480 640 -640 480 -640 424 -427 640 -640 427 -425 640 -640 360 -640 358 -640 480 -640 480 -640 425 -500 333 -524 640 -375 500 -640 427 -500 333 -640 440 -640 533 -640 427 -640 480 -640 426 -633 640 -640 502 -640 480 -640 428 -640 359 -640 425 -640 480 -640 480 -480 640 -640 480 -640 480 -640 520 -640 480 -480 640 -640 426 -640 480 -478 640 -640 414 -640 480 -478 640 -640 480 -640 488 -480 640 -375 500 -640 424 -640 427 -640 480 -640 480 -427 640 -427 640 -640 480 -427 640 -512 640 -640 480 -424 640 -500 252 -640 427 -640 425 -428 640 -640 427 -427 640 -425 640 -375 500 -640 480 -640 428 -640 640 -640 480 -480 640 -500 337 -640 427 -640 480 -640 383 -640 427 -500 375 -500 333 -640 480 -500 375 -494 640 -640 480 -640 512 -640 425 -500 375 -500 332 -640 427 -640 480 -612 612 -640 640 -640 480 -640 427 -640 427 -480 640 -640 480 -640 427 -500 375 -640 480 -640 480 -640 480 -640 427 -480 640 -333 500 -640 480 -640 480 -428 640 -640 427 -640 427 -480 640 -640 461 -500 375 -640 480 -640 363 -640 427 -640 574 -640 426 -640 480 -375 500 -640 480 -640 360 -640 395 -600 402 -640 480 -640 360 -500 500 -640 428 -640 425 -640 480 -640 480 -640 480 -480 640 -640 426 -640 480 -640 482 -640 361 -640 480 -480 640 -640 434 -640 425 -480 640 -640 427 -640 425 -640 428 -500 375 -640 425 -500 332 -640 480 -500 375 -640 431 -640 425 -640 427 -640 480 -640 485 -640 480 -512 640 -480 640 -500 375 -640 427 -640 425 -462 640 -640 425 -500 334 -640 480 -375 500 -549 640 -640 351 -500 375 -640 480 -480 319 -640 360 -640 427 -480 640 -640 480 -640 427 -640 426 -640 427 -640 439 -640 329 -640 480 -640 426 -500 500 -427 640 -640 480 -640 480 -640 480 -640 428 -640 424 -640 480 -480 640 -640 426 -640 480 -640 427 -368 640 -640 456 -640 480 -427 640 -640 480 -640 458 -640 427 -480 640 -429 640 -640 435 -640 480 -640 428 -640 425 -640 403 -640 514 -640 424 -640 512 -500 375 -640 512 -640 462 -640 427 -480 640 -640 480 -640 426 -640 504 -429 640 -426 640 -612 612 -500 333 -640 426 -640 422 -640 269 -640 427 -640 480 -640 425 -640 400 -427 640 -640 426 -640 480 -640 478 -480 640 -640 480 -640 486 -640 427 -458 640 -640 425 -640 503 -332 500 -426 640 -432 305 -480 640 -640 480 -640 480 -640 428 -375 500 -500 333 -426 640 -500 376 -640 428 -500 213 -640 479 -640 429 -598 640 -640 373 -473 640 -640 480 -640 640 -612 612 -640 480 -640 480 -640 480 -640 427 -640 427 -402 640 -640 480 -640 425 -640 427 -640 378 -640 428 -640 427 -640 361 -500 333 -640 427 -640 427 -480 640 -427 640 -640 426 -480 640 -640 450 -612 612 -640 553 -640 480 -640 425 -640 439 -640 428 -640 428 -640 430 -500 352 -640 418 -479 640 -640 427 -640 639 -640 480 -640 427 -640 427 -640 480 -612 612 -640 480 -427 640 -427 640 -640 316 -640 428 -500 375 -640 480 -640 424 -640 427 -500 333 -428 640 -500 334 -640 480 -500 375 -640 426 -500 331 -640 480 -640 458 -640 478 -612 612 -640 480 -427 640 -427 640 -640 426 -427 640 -612 612 -477 640 -640 428 -640 427 -640 427 -640 427 -640 448 -640 427 -640 427 -512 640 -640 426 -640 480 -640 493 -640 427 -640 427 -500 333 -640 283 -640 360 -640 457 -303 500 -500 333 -640 513 -500 375 -640 425 -640 304 -612 612 -640 480 -640 424 -500 375 -333 500 -640 480 -640 426 -480 640 -500 375 -500 381 -640 480 -640 480 -640 570 -500 375 -640 427 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -500 375 -640 427 -640 426 -640 480 -480 640 -480 640 -640 411 -640 426 -640 427 -640 480 -480 640 -640 427 -500 291 -350 500 -640 360 -467 640 -429 640 -640 441 -427 640 -500 216 -640 480 -480 640 -640 480 -640 467 -640 480 -480 640 -311 640 -640 480 -640 427 -640 480 -640 480 -500 334 -640 427 -640 426 -640 458 -480 640 -640 479 -640 424 -513 640 -640 480 -640 360 -640 480 -318 480 -640 427 -612 612 -640 425 -640 400 -640 427 -640 480 -480 640 -500 331 -357 500 -640 480 -480 640 -640 480 -640 443 -640 480 -640 426 -640 480 -500 367 -640 433 -480 640 -640 480 -640 427 -640 427 -500 333 -640 479 -640 480 -640 428 -425 640 -640 367 -375 500 -500 366 -480 640 -640 480 -640 481 -480 640 -640 427 -427 640 -427 640 -640 510 -640 481 -375 500 -640 480 -359 640 -640 264 -640 426 -480 640 -640 480 -640 458 -500 416 -640 429 -640 426 -640 480 -640 425 -640 480 -640 480 -640 480 -640 383 -160 144 -640 427 -640 425 -640 428 -427 640 -640 480 -640 426 -640 427 -500 333 -333 500 -640 427 -425 640 -640 461 -640 428 -640 427 -640 321 -640 405 -427 640 -375 500 -640 480 -640 427 -640 426 -640 480 -640 427 -480 640 -640 432 -640 427 -640 361 -640 428 -640 480 -640 528 -480 640 -640 424 -640 426 -640 320 -640 336 -640 429 -427 640 -640 425 -500 375 -500 332 -640 427 -500 375 -640 427 -640 426 -640 305 -640 427 -500 375 -640 480 -301 500 -640 480 -640 416 -500 334 -640 480 -640 480 -640 425 -640 480 -425 640 -640 426 -378 500 -640 434 -375 500 -640 480 -640 480 -640 427 -640 478 -640 573 -481 640 -640 480 -427 640 -640 427 -460 500 -640 480 -640 480 -428 640 -640 478 -640 480 -640 480 -640 401 -500 500 -500 375 -640 424 -500 333 -640 426 -500 500 -640 379 -457 640 -640 466 -640 480 -500 333 -640 427 -427 640 -640 478 -640 426 -640 640 -640 426 -640 425 -640 427 -426 640 -525 640 -640 271 -612 612 -480 640 -640 480 -640 480 -640 360 -640 427 -640 480 -640 480 -375 500 -640 480 -640 480 -640 480 -640 434 -480 640 -640 427 -640 359 -500 375 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -640 480 -427 640 -480 640 -640 396 -383 640 -220 222 -640 427 -480 640 -640 480 -640 326 -640 521 -640 427 -640 480 -640 426 -640 478 -640 480 -640 427 -640 427 -640 533 -360 640 -640 480 -640 480 -640 443 -500 375 -640 306 -480 640 -500 332 -640 426 -640 479 -640 488 -640 427 -480 640 -640 400 -640 400 -640 480 -640 640 -427 640 -640 427 -640 480 -425 640 -640 480 -640 425 -640 427 -440 640 -640 427 -640 425 -640 640 -640 425 -640 480 -640 426 -513 640 -640 427 -640 581 -640 360 -640 480 -640 427 -425 640 -500 332 -640 480 -640 480 -640 428 -640 426 -640 480 -640 556 -640 428 -640 480 -640 427 -640 480 -427 640 -426 640 -640 463 -640 433 -424 640 -640 427 -640 480 -500 333 -640 426 -500 344 -640 480 -640 427 -640 427 -640 427 -333 500 -640 480 -640 427 -640 480 -640 414 -375 500 -444 640 -500 333 -640 253 -640 462 -427 640 -640 480 -640 480 -427 640 -640 480 -500 350 -640 427 -640 427 -640 510 -478 640 -640 503 -640 480 -640 360 -640 424 -612 612 -376 640 -480 640 -640 427 -500 375 -425 640 -500 333 -333 500 -640 480 -640 480 -500 375 -640 480 -640 427 -640 480 -500 324 -427 640 -624 640 -640 480 -640 428 -640 480 -500 358 -640 418 -640 427 -640 427 -640 427 -612 612 -640 427 -640 427 -490 640 -428 640 -600 600 -640 424 -640 506 -480 640 -480 640 -640 478 -640 478 -640 386 -640 425 -478 640 -640 427 -640 480 -640 480 -375 500 -640 480 -427 640 -640 427 -640 427 -640 426 -640 427 -640 480 -500 375 -427 640 -640 426 -640 480 -427 640 -640 427 -640 437 -427 640 -640 480 -374 500 -500 375 -640 428 -640 480 -480 640 -640 640 -424 640 -500 238 -640 426 -500 375 -640 427 -640 480 -640 425 -500 500 -542 640 -640 480 -500 333 -433 640 -480 640 -500 280 -640 427 -500 330 -427 640 -640 426 -640 427 -481 640 -640 426 -640 409 -640 480 -640 428 -640 425 -427 640 -425 640 -640 480 -480 640 -640 383 -640 480 -427 640 -640 480 -480 640 -640 426 -575 434 -640 424 -640 427 -480 640 -478 640 -640 480 -640 360 -604 640 -640 361 -426 640 -640 427 -427 640 -640 480 -480 640 -375 500 -640 361 -446 640 -427 640 -640 426 -473 640 -426 640 -480 640 -640 451 -640 418 -640 427 -500 322 -640 480 -417 640 -640 427 -640 425 -500 374 -640 466 -640 480 -640 372 -640 471 -640 480 -480 640 -640 453 -640 344 -640 427 -640 603 -500 375 -640 480 -640 640 -480 640 -640 427 -640 480 -640 383 -640 480 -500 333 -640 480 -480 640 -438 640 -640 480 -640 480 -612 612 -375 500 -640 484 -500 314 -640 468 -428 640 -640 482 -640 429 -500 500 -480 640 -640 480 -640 424 -640 480 -640 426 -640 480 -640 424 -640 424 -640 427 -640 427 -429 640 -640 425 -427 640 -640 427 -640 478 -640 640 -500 375 -640 427 -480 640 -640 338 -640 427 -640 427 -640 480 -640 480 -640 427 -640 428 -640 493 -421 640 -640 427 -426 640 -640 513 -640 360 -640 480 -640 480 -640 480 -426 640 -512 640 -640 512 -640 426 -640 480 -426 640 -640 428 -640 427 -480 640 -640 464 -640 480 -640 478 -640 480 -640 480 -612 612 -640 640 -500 375 -500 375 -640 480 -640 461 -640 501 -338 450 -640 427 -640 425 -640 379 -640 427 -640 428 -640 384 -640 480 -640 427 -639 640 -640 427 -428 640 -640 482 -500 333 -640 427 -640 361 -629 640 -500 333 -640 427 -500 375 -480 640 -427 640 -640 521 -413 640 -640 428 -480 640 -640 480 -475 640 -640 426 -500 331 -640 373 -640 438 -427 640 -640 429 -640 480 -640 480 -500 493 -640 427 -640 478 -341 595 -480 640 -500 375 -640 480 -500 500 -480 640 -640 480 -640 480 -428 640 -640 426 -640 480 -640 478 -640 427 -480 640 -375 500 -480 640 -640 480 -640 480 -640 480 -481 640 -640 373 -640 480 -640 480 -612 612 -640 480 -500 426 -640 424 -500 407 -480 640 -640 426 -640 480 -640 475 -640 439 -640 480 -640 418 -640 481 -640 426 -640 480 -334 500 -640 384 -500 375 -423 640 -512 640 -500 334 -640 417 -612 612 -640 480 -640 432 -640 427 -640 386 -428 640 -640 480 -640 480 -640 480 -640 478 -640 480 -640 480 -640 426 -640 426 -480 640 -500 332 -640 427 -640 480 -427 640 -640 429 -612 612 -423 640 -640 360 -640 480 -640 480 -480 640 -640 425 -640 428 -480 640 -640 426 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -334 500 -395 640 -640 480 -640 480 -500 375 -640 480 -500 375 -640 480 -640 480 -640 480 -640 483 -640 480 -640 480 -428 640 -450 391 -424 640 -478 640 -640 480 -500 375 -426 640 -640 464 -640 429 -640 427 -640 433 -640 427 -500 375 -640 480 -480 640 -427 640 -640 604 -640 474 -640 640 -640 427 -640 480 -640 427 -640 427 -480 640 -640 427 -427 640 -640 480 -640 480 -480 640 -640 360 -640 640 -640 480 -640 427 -640 428 -640 427 -640 424 -640 361 -640 480 -640 480 -640 434 -612 612 -500 375 -640 426 -640 427 -640 480 -640 427 -640 360 -640 640 -500 375 -640 427 -640 480 -640 480 -640 481 -640 427 -640 474 -640 427 -640 471 -480 640 -612 612 -640 427 -500 333 -640 426 -640 428 -480 640 -640 480 -565 640 -640 427 -480 640 -640 424 -640 481 -428 640 -640 480 -640 427 -640 480 -640 400 -640 480 -425 640 -640 480 -640 480 -333 500 -640 427 -640 480 -612 612 -640 427 -480 640 -640 480 -640 480 -434 640 -640 480 -640 414 -640 480 -640 480 -480 640 -500 359 -396 640 -480 640 -579 640 -640 480 -423 640 -640 640 -640 361 -640 428 -640 478 -640 480 -397 640 -640 341 -480 640 -640 427 -640 480 -640 480 -480 640 -640 480 -500 375 -640 426 -640 480 -500 332 -640 480 -640 480 -640 431 -640 427 -640 480 -640 427 -640 428 -516 640 -640 426 -640 484 -640 360 -480 640 -640 426 -640 457 -361 640 -640 461 -601 640 -640 509 -640 427 -640 426 -425 640 -640 480 -612 612 -640 427 -640 426 -640 480 -640 526 -427 640 -640 426 -600 600 -640 427 -640 480 -640 425 -423 640 -640 480 -500 375 -529 640 -459 640 -333 500 -640 480 -640 320 -640 429 -640 351 -433 640 -500 375 -640 480 -640 480 -640 480 -640 427 -500 375 -640 480 -640 480 -640 427 -640 480 -640 480 -640 640 -426 640 -427 640 -640 480 -640 480 -640 347 -640 428 -640 360 -427 640 -640 427 -640 480 -424 640 -640 480 -640 640 -612 612 -480 640 -640 480 -428 640 -640 480 -426 640 -640 430 -640 427 -439 640 -500 375 -640 425 -489 640 -640 427 -500 333 -640 480 -640 428 -640 427 -640 512 -640 351 -640 424 -500 328 -640 427 -640 427 -500 334 -640 480 -640 480 -640 405 -500 397 -640 427 -640 403 -640 428 -640 422 -640 480 -640 396 -426 640 -640 499 -640 476 -640 427 -640 439 -599 348 -640 638 -640 386 -640 480 -640 427 -428 640 -426 640 -640 480 -640 449 -640 427 -640 480 -612 612 -640 425 -640 427 -640 480 -640 503 -427 640 -640 426 -612 612 -640 426 -497 640 -612 612 -640 359 -640 428 -426 640 -640 427 -640 480 -500 316 -500 375 -640 425 -640 480 -333 500 -640 480 -640 480 -640 480 -640 426 -427 640 -640 474 -640 480 -542 640 -640 480 -640 427 -640 426 -457 640 -640 488 -480 640 -427 640 -640 433 -640 512 -640 481 -640 427 -480 640 -640 427 -640 478 -480 640 -500 334 -640 464 -612 612 -640 480 -640 480 -427 640 -640 469 -640 478 -640 427 -640 480 -640 480 -480 640 -480 640 -640 336 -640 426 -640 424 -640 475 -640 480 -427 640 -640 423 -428 640 -640 428 -640 427 -640 427 -640 480 -640 480 -640 396 -640 427 -500 333 -640 427 -640 480 -640 427 -640 360 -612 612 -480 640 -640 448 -423 640 -640 564 -640 480 -640 348 -480 640 -493 640 -426 640 -612 612 -500 375 -640 408 -640 539 -640 427 -640 360 -500 375 -640 480 -333 500 -640 480 -400 500 -640 480 -640 480 -640 438 -640 428 -640 434 -640 427 -640 400 -640 480 -375 500 -640 359 -640 640 -640 427 -640 425 -640 359 -640 480 -640 512 -640 483 -640 427 -640 480 -640 480 -640 480 -640 635 -427 640 -640 424 -640 640 -480 640 -426 640 -640 480 -640 427 -640 426 -471 640 -640 480 -480 640 -640 427 -640 433 -640 360 -500 375 -640 574 -612 612 -640 480 -640 522 -640 523 -480 640 -640 427 -640 480 -640 426 -480 640 -640 426 -425 640 -640 480 -640 424 -480 640 -640 640 -640 480 -640 480 -640 429 -507 640 -640 480 -640 480 -426 640 -500 415 -640 480 -640 480 -480 640 -640 449 -640 480 -640 427 -427 640 -480 640 -640 417 -612 612 -500 375 -375 500 -640 396 -500 343 -640 388 -428 640 -480 640 -480 640 -640 287 -480 640 -426 640 -640 427 -640 395 -480 640 -480 640 -481 640 -640 480 -640 480 -640 448 -640 427 -640 480 -500 354 -640 331 -384 512 -640 458 -640 408 -640 480 -640 429 -640 480 -640 526 -640 424 -640 480 -640 499 -640 640 -640 454 -640 427 -640 480 -500 334 -640 271 -640 424 -640 424 -368 640 -478 640 -640 630 -427 640 -640 427 -333 500 -640 424 -640 480 -640 426 -512 640 -640 480 -640 339 -640 395 -640 387 -640 428 -424 640 -640 480 -640 568 -640 425 -500 375 -640 480 -500 375 -640 480 -500 375 -640 480 -640 370 -480 640 -425 640 -640 427 -640 508 -640 278 -640 480 -375 500 -500 375 -640 480 -426 640 -640 480 -640 425 -480 640 -640 426 -640 358 -640 480 -510 640 -361 640 -640 427 -640 480 -640 427 -500 375 -426 640 -640 480 -640 421 -640 473 -640 480 -640 453 -640 431 -640 427 -640 427 -426 640 -576 285 -640 480 -427 640 -640 425 -640 427 -640 640 -640 427 -640 427 -640 359 -640 421 -640 425 -476 640 -640 480 -500 288 -356 500 -640 415 -640 480 -640 426 -640 480 -640 421 -640 522 -640 413 -612 612 -612 612 -640 480 -480 640 -427 640 -640 480 -427 640 -640 478 -640 400 -640 480 -640 480 -640 436 -640 480 -640 587 -500 333 -640 350 -640 480 -640 424 -640 426 -640 438 -428 640 -640 480 -640 425 -640 474 -640 480 -403 640 -500 325 -500 375 -500 375 -640 480 -427 640 -464 640 -640 480 -640 423 -480 640 -640 428 -339 500 -640 480 -500 375 -640 360 -500 333 -640 480 -640 427 -424 640 -640 480 -640 363 -640 459 -640 428 -640 427 -480 640 -640 361 -640 480 -640 418 -640 480 -640 427 -640 427 -375 500 -640 427 -640 480 -640 427 -500 306 -640 427 -640 480 -640 400 -640 427 -640 426 -640 425 -381 500 -500 375 -640 480 -640 480 -640 360 -500 332 -612 612 -640 424 -640 426 -640 480 -448 640 -640 362 -640 415 -500 375 -640 427 -484 640 -640 480 -500 375 -640 427 -493 640 -640 426 -640 429 -640 480 -402 640 -640 480 -640 480 -375 500 -640 426 -640 480 -640 442 -480 640 -640 480 -640 427 -480 640 -640 480 -500 378 -640 424 -640 480 -640 480 -640 480 -640 480 -640 426 -640 480 -640 361 -640 426 -640 359 -640 510 -640 427 -640 461 -640 427 -640 427 -480 640 -332 500 -288 432 -500 375 -640 478 -500 375 -500 375 -612 612 -640 427 -640 427 -426 640 -640 480 -480 640 -640 480 -333 500 -640 424 -480 640 -640 538 -640 420 -500 375 -640 427 -408 306 -480 640 -640 451 -640 480 -640 480 -640 426 -640 383 -640 429 -480 640 -640 480 -640 427 -640 429 -640 341 -383 640 -640 478 -640 480 -500 375 -640 314 -640 480 -640 430 -612 612 -640 427 -640 480 -333 500 -640 429 -640 640 -616 640 -640 480 -478 640 -375 500 -480 640 -500 375 -480 640 -427 640 -640 424 -427 640 -640 425 -640 427 -640 360 -427 640 -480 640 -640 404 -500 352 -640 360 -640 427 -500 399 -640 400 -640 480 -640 426 -640 426 -640 428 -640 480 -480 640 -640 429 -640 480 -640 480 -640 427 -640 480 -640 425 -640 480 -640 428 -523 640 -640 480 -500 375 -640 480 -640 640 -640 420 -640 423 -640 590 -640 427 -640 425 -640 327 -480 640 -640 428 -500 335 -640 425 -480 640 -400 640 -640 427 -640 480 -427 640 -640 426 -640 481 -640 426 -640 427 -500 375 -640 480 -640 427 -428 640 -615 615 -426 640 -480 640 -640 495 -640 480 -480 640 -640 439 -640 480 -640 480 -640 478 -480 388 -640 427 -640 359 -500 375 -640 480 -457 640 -480 640 -377 500 -600 314 -640 478 -640 480 -427 640 -480 640 -640 427 -640 454 -480 640 -640 480 -640 427 -640 414 -500 320 -640 480 -478 640 -640 480 -640 480 -640 640 -389 640 -640 480 -640 480 -640 501 -640 424 -640 480 -640 480 -640 323 -640 408 -640 480 -640 480 -640 425 -640 309 -640 427 -640 480 -640 480 -333 500 -359 640 -640 427 -640 427 -640 427 -640 424 -640 427 -640 480 -640 427 -640 427 -640 426 -640 480 -640 427 -640 427 -640 427 -640 480 -640 426 -431 640 -335 500 -427 640 -640 640 -640 391 -640 480 -640 480 -640 427 -640 427 -640 480 -640 427 -500 333 -640 502 -640 426 -640 427 -426 640 -640 480 -640 480 -640 480 -640 427 -394 640 -478 640 -623 640 -640 480 -640 427 -375 500 -427 640 -375 500 -640 512 -427 640 -480 640 -425 640 -480 640 -640 596 -640 545 -640 480 -640 480 -427 640 -480 640 -640 480 -640 522 -640 480 -375 500 -316 640 -500 396 -415 640 -640 503 -640 480 -640 360 -640 428 -640 426 -300 225 -427 640 -640 400 -500 334 -480 640 -640 480 -640 432 -500 375 -640 480 -500 332 -397 640 -612 612 -428 640 -454 640 -500 399 -640 480 -640 480 -640 279 -640 425 -500 375 -427 640 -640 425 -480 640 -383 640 -640 427 -500 375 -640 426 -640 480 -640 480 -640 480 -640 370 -500 333 -640 512 -640 480 -375 500 -640 480 -640 425 -640 427 -640 480 -500 335 -640 427 -640 480 -640 480 -500 375 -539 640 -640 480 -424 500 -640 427 -640 359 -640 427 -640 424 -640 426 -640 205 -640 424 -480 640 -640 480 -500 332 -640 480 -500 375 -640 427 -640 425 -640 445 -370 500 -640 480 -500 402 -640 427 -640 429 -612 612 -426 640 -500 373 -640 464 -640 480 -427 640 -640 480 -640 426 -640 479 -500 375 -640 426 -640 428 -640 480 -640 428 -640 427 -497 640 -640 480 -480 640 -640 426 -640 480 -425 640 -640 427 -426 640 -640 480 -640 480 -640 480 -640 480 -640 484 -427 640 -640 427 -640 427 -640 584 -612 612 -640 458 -640 427 -428 640 -500 375 -640 480 -427 640 -640 401 -619 640 -640 480 -640 512 -640 480 -424 640 -426 640 -640 478 -640 425 -640 347 -640 480 -640 359 -480 640 -640 428 -640 425 -375 500 -640 480 -640 424 -640 502 -375 500 -640 335 -415 500 -500 375 -640 424 -640 427 -640 480 -500 500 -500 375 -640 427 -640 427 -427 640 -640 480 -640 364 -640 640 -500 322 -480 640 -480 640 -427 640 -500 375 -375 500 -640 480 -640 490 -640 360 -640 480 -640 427 -500 376 -640 480 -373 500 -640 426 -640 480 -640 480 -500 375 -640 398 -640 480 -640 424 -640 480 -640 480 -427 640 -360 640 -640 480 -640 427 -640 480 -640 480 -612 612 -640 449 -426 640 -640 480 -480 640 -640 408 -480 640 -500 375 -640 383 -375 500 -640 425 -480 640 -428 640 -640 427 -500 330 -640 421 -640 427 -581 640 -640 426 -426 640 -640 427 -640 427 -640 388 -640 425 -640 428 -640 640 -640 427 -640 480 -640 480 -427 640 -640 428 -640 427 -640 480 -480 640 -414 640 -640 480 -480 640 -640 480 -640 427 -480 640 -428 640 -427 640 -640 449 -640 426 -640 480 -640 429 -640 467 -640 480 -640 480 -427 640 -640 427 -500 375 -640 478 -640 480 -640 385 -640 359 -360 640 -640 572 -640 480 -640 480 -427 640 -640 425 -640 466 -640 427 -640 640 -640 379 -500 315 -640 422 -640 480 -427 640 -640 424 -640 477 -640 480 -640 446 -375 500 -640 448 -640 360 -480 640 -640 478 -480 640 -640 480 -640 503 -500 375 -640 430 -613 635 -640 424 -640 427 -640 640 -640 427 -640 427 -427 640 -478 640 -409 640 -480 640 -640 480 -640 478 -458 640 -640 478 -640 480 -480 640 -640 423 -640 480 -480 640 -640 480 -640 360 -640 425 -640 360 -640 427 -427 640 -640 512 -640 480 -640 270 -640 360 -359 640 -500 375 -640 427 -500 375 -427 640 -480 640 -640 344 -640 480 -640 480 -640 640 -640 480 -640 640 -640 480 -640 360 -640 428 -640 427 -640 480 -640 427 -360 640 -640 426 -640 468 -640 402 -640 426 -640 425 -640 480 -640 480 -640 424 -640 425 -640 480 -640 579 -640 427 -640 480 -640 480 -640 427 -640 427 -640 480 -640 427 -640 480 -375 500 -640 426 -640 480 -640 480 -640 427 -291 500 -640 426 -640 480 -428 640 -640 426 -640 480 -427 640 -640 480 -480 640 -640 480 -480 640 -640 531 -640 480 -526 640 -640 427 -640 458 -480 640 -640 251 -480 640 -426 640 -640 427 -640 571 -640 427 -640 482 -640 480 -640 480 -427 640 -640 427 -640 571 -640 480 -640 427 -427 640 -640 417 -640 480 -640 480 -448 640 -640 427 -640 480 -631 640 -500 375 -640 425 -539 640 -609 640 -500 375 -478 640 -640 478 -500 375 -640 427 -427 640 -640 478 -640 438 -500 330 -640 426 -375 500 -375 500 -640 154 -480 640 -450 350 -640 480 -640 480 -640 426 -640 391 -640 425 -640 482 -640 480 -500 260 -434 500 -612 612 -500 334 -640 429 -480 640 -640 427 -500 375 -640 480 -640 480 -640 427 -640 480 -640 434 -500 335 -427 640 -640 410 -435 640 -500 375 -640 526 -640 400 -640 480 -640 480 -640 427 -640 411 -640 480 -480 640 -640 502 -640 480 -640 480 -500 375 -500 375 -357 500 -337 500 -640 480 -480 272 -640 478 -640 480 -640 480 -640 480 -428 640 -512 640 -640 428 -427 640 -640 427 -427 640 -640 427 -425 640 -640 428 -640 480 -544 640 -426 640 -640 427 -640 360 -500 375 -640 480 -480 249 -640 432 -640 424 -640 427 -640 480 -640 480 -640 426 -640 360 -640 480 -640 427 -640 427 -640 489 -366 500 -640 426 -640 427 -427 640 -640 426 -640 427 -640 425 -640 427 -500 332 -640 427 -640 480 -640 427 -240 360 -425 640 -640 480 -640 426 -640 427 -640 502 -640 480 -640 457 -640 480 -500 316 -480 640 -640 429 -640 480 -640 480 -640 480 -480 640 -640 461 -640 427 -640 512 -375 500 -429 640 -480 640 -640 414 -640 428 -427 640 -480 640 -518 640 -640 427 -640 480 -425 640 -640 427 -640 359 -640 480 -640 595 -640 480 -640 427 -640 480 -640 501 -500 375 -640 427 -640 415 -450 300 -640 480 -399 640 -640 269 -593 640 -640 480 -640 431 -640 428 -480 640 -480 640 -640 428 -640 426 -480 640 -636 640 -640 428 -426 640 -640 427 -640 427 -640 426 -640 360 -640 480 -500 332 -640 426 -640 427 -640 480 -500 375 -575 344 -640 426 -640 425 -612 612 -500 375 -640 480 -640 425 -640 480 -640 430 -425 640 -427 640 -429 640 -428 640 -640 480 -640 433 -426 640 -640 427 -640 640 -640 427 -640 480 -427 640 -500 375 -640 640 -640 427 -640 427 -640 480 -640 426 -640 479 -640 454 -480 640 -640 427 -640 480 -480 640 -640 480 -640 558 -640 478 -640 480 -480 640 -428 640 -375 500 -640 480 -500 375 -427 640 -424 640 -640 226 -640 480 -640 480 -640 427 -500 375 -480 640 -500 333 -640 427 -500 375 -612 612 -640 426 -426 640 -640 426 -640 360 -640 480 -640 427 -640 365 -500 375 -640 427 -640 427 -426 640 -640 480 -375 500 -640 480 -640 431 -640 480 -451 640 -640 480 -640 480 -640 480 -640 589 -640 425 -640 427 -575 640 -427 640 -640 427 -640 480 -480 640 -640 427 -640 478 -640 480 -640 426 -640 480 -640 429 -500 333 -427 640 -640 480 -426 640 -393 500 -640 426 -640 480 -640 428 -640 427 -500 374 -640 480 -640 393 -500 375 -640 480 -640 396 -640 480 -350 500 -640 497 -640 457 -640 360 -640 480 -640 480 -500 375 -640 480 -588 640 -640 480 -612 612 -640 480 -500 390 -640 503 -640 427 -640 425 -640 321 -640 427 -640 480 -640 360 -640 425 -640 435 -640 450 -640 428 -640 427 -375 500 -640 480 -640 427 -640 480 -500 443 -516 640 -640 427 -640 640 -640 480 -341 640 -640 499 -500 375 -640 640 -640 427 -640 402 -500 375 -428 640 -640 427 -426 640 -426 640 -500 333 -640 480 -640 409 -500 280 -640 427 -480 640 -640 427 -640 427 -640 412 -640 480 -640 480 -640 427 -640 428 -640 427 -427 640 -500 333 -500 338 -640 427 -640 480 -640 480 -640 478 -640 480 -640 480 -333 500 -427 640 -640 425 -640 439 -640 427 -640 480 -640 377 -640 480 -640 480 -640 480 -640 426 -640 429 -640 425 -640 480 -474 640 -640 426 -640 480 -640 425 -640 484 -640 480 -424 640 -500 375 -425 640 -480 640 -640 431 -640 427 -640 426 -640 480 -500 333 -610 390 -480 640 -640 428 -640 427 -640 428 -480 640 -640 480 -640 490 -511 640 -640 426 -500 375 -480 640 -640 640 -640 420 -427 640 -427 640 -640 480 -640 421 -640 480 -640 468 -500 333 -640 480 -640 424 -427 640 -640 424 -640 426 -640 428 -640 287 -480 640 -612 612 -640 480 -500 334 -449 640 -640 480 -640 428 -640 426 -640 433 -640 329 -604 453 -480 640 -640 427 -500 375 -640 360 -633 640 -500 332 -640 480 -640 478 -640 426 -640 425 -640 420 -640 634 -500 333 -375 500 -640 426 -640 507 -640 427 -640 480 -640 480 -640 427 -500 333 -640 526 -640 426 -480 640 -640 480 -640 426 -463 640 -640 427 -640 480 -640 491 -640 397 -640 493 -640 431 -480 640 -640 453 -414 640 -480 640 -640 480 -640 428 -375 500 -640 480 -640 428 -640 480 -640 457 -640 425 -640 426 -640 427 -640 441 -640 427 -640 426 -500 432 -640 427 -640 480 -500 375 -640 427 -411 640 -640 427 -640 480 -427 640 -544 640 -612 612 -426 640 -640 427 -640 434 -640 427 -640 444 -640 424 -640 481 -640 427 -500 375 -480 640 -500 376 -519 640 -640 425 -640 427 -464 640 -640 480 -612 612 -427 640 -480 640 -640 478 -640 480 -500 333 -640 480 -640 425 -640 480 -600 409 -640 480 -640 426 -640 480 -640 479 -640 500 -640 425 -640 426 -427 640 -640 480 -640 480 -424 640 -640 396 -640 427 -640 428 -640 480 -640 421 -426 640 -640 429 -480 640 -640 480 -640 480 -640 411 -427 640 -640 480 -640 478 -640 480 -640 424 -640 479 -426 640 -640 519 -640 480 -375 500 -640 480 -640 480 -640 426 -640 484 -500 374 -500 333 -463 500 -640 429 -640 427 -640 427 -640 427 -500 333 -640 427 -640 480 -480 640 -640 480 -612 612 -447 640 -640 480 -640 480 -427 640 -470 640 -640 478 -640 478 -640 480 -640 480 -640 480 -640 427 -640 554 -427 640 -509 640 -640 428 -640 426 -500 279 -640 480 -640 480 -478 640 -640 427 -640 480 -640 414 -640 480 -480 640 -640 479 -640 427 -612 612 -427 640 -640 427 -640 481 -640 427 -500 375 -375 500 -640 480 -640 480 -640 429 -640 359 -640 336 -640 427 -640 427 -640 426 -640 480 -480 319 -640 480 -640 480 -640 427 -480 640 -426 640 -500 333 -612 612 -640 360 -500 300 -550 640 -640 400 -640 360 -500 333 -427 640 -640 428 -593 640 -640 480 -640 444 -640 424 -640 488 -640 478 -480 640 -640 427 -640 426 -640 460 -640 511 -640 356 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 425 -600 400 -640 427 -374 500 -480 640 -640 427 -640 427 -640 475 -425 640 -640 480 -640 434 -640 640 -640 480 -640 319 -640 425 -640 303 -640 468 -612 612 -640 427 -640 427 -640 480 -514 640 -640 427 -500 375 -640 427 -640 480 -640 439 -640 427 -640 480 -640 429 -482 640 -478 640 -550 367 -640 480 -640 427 -640 427 -463 640 -640 480 -640 427 -640 427 -640 427 -640 478 -640 430 -640 427 -640 468 -640 480 -333 500 -640 427 -640 427 -640 425 -640 436 -640 427 -640 579 -640 513 -640 480 -640 480 -500 333 -480 640 -500 375 -375 500 -500 333 -640 426 -375 500 -640 480 -500 349 -640 427 -640 426 -640 480 -640 460 -612 612 -480 640 -612 612 -480 640 -640 424 -612 612 -640 406 -500 333 -480 640 -640 480 -640 427 -640 480 -640 394 -640 480 -640 451 -640 427 -640 426 -480 640 -640 400 -640 480 -640 426 -640 425 -428 640 -640 509 -640 480 -480 640 -480 640 -640 480 -640 427 -640 424 -640 400 -356 500 -480 640 -640 427 -640 426 -640 423 -640 360 -640 480 -640 431 -311 640 -640 478 -640 480 -640 480 -333 500 -640 480 -640 478 -640 478 -640 640 -427 640 -500 335 -480 640 -640 480 -640 480 -375 500 -640 425 -640 426 -640 426 -640 427 -640 427 -640 480 -640 480 -640 428 -640 480 -640 425 -640 480 -500 453 -640 427 -612 612 -375 500 -480 640 -480 640 -468 640 -640 480 -640 457 -428 640 -427 640 -640 480 -640 480 -640 427 -640 431 -640 480 -500 375 -500 332 -476 640 -640 481 -640 427 -640 480 -602 640 -640 480 -640 480 -481 640 -375 500 -640 427 -640 480 -610 640 -428 640 -640 425 -640 426 -640 480 -640 480 -612 612 -640 480 -640 290 -640 480 -640 426 -480 640 -640 424 -426 640 -640 480 -500 399 -640 480 -640 480 -423 640 -500 375 -640 424 -360 640 -640 480 -640 430 -500 375 -640 426 -640 424 -500 333 -640 427 -640 427 -640 396 -640 441 -480 640 -480 640 -640 407 -640 453 -640 480 -640 594 -427 640 -640 427 -640 478 -480 321 -640 480 -640 426 -612 612 -640 640 -640 389 -640 480 -640 511 -640 480 -640 480 -640 480 -480 640 -612 612 -640 360 -640 427 -640 427 -640 426 -640 427 -612 612 -501 640 -640 534 -358 500 -640 480 -640 493 -640 480 -640 427 -640 480 -427 640 -612 612 -640 429 -640 480 -478 640 -612 612 -640 484 -640 480 -640 427 -427 640 -428 640 -640 428 -640 480 -640 640 -455 640 -640 409 -640 480 -640 480 -500 332 -640 427 -400 500 -640 480 -640 426 -640 640 -500 369 -480 640 -640 424 -640 428 -480 640 -640 480 -427 640 -640 480 -640 480 -640 480 -640 427 -425 640 -640 495 -366 640 -640 427 -640 427 -640 427 -640 360 -640 429 -640 427 -640 427 -640 427 -640 480 -423 640 -640 480 -640 480 -640 422 -612 612 -640 480 -640 427 -640 484 -500 377 -640 449 -500 375 -500 333 -640 460 -427 640 -640 426 -640 432 -640 494 -640 426 -333 500 -640 427 -612 612 -640 480 -427 640 -640 360 -640 480 -500 314 -426 640 -640 480 -640 377 -640 480 -450 338 -640 428 -500 375 -640 426 -640 480 -640 510 -640 480 -640 480 -640 480 -640 479 -640 427 -640 480 -500 332 -640 512 -640 480 -640 426 -640 428 -640 480 -640 427 -640 576 -480 640 -640 480 -640 623 -640 480 -640 427 -500 274 -640 480 -426 640 -640 480 -640 480 -640 360 -640 360 -640 254 -427 640 -640 414 -640 423 -640 478 -640 438 -480 640 -640 480 -640 427 -640 480 -428 640 -480 640 -640 428 -428 640 -375 500 -500 338 -640 478 -640 473 -480 640 -640 425 -424 640 -500 500 -640 480 -640 480 -640 427 -480 640 -480 640 -640 425 -640 487 -500 375 -480 640 -640 427 -640 480 -640 480 -640 428 -480 640 -427 640 -640 480 -500 313 -640 427 -640 480 -640 427 -640 427 -426 640 -640 424 -375 500 -480 640 -640 480 -640 427 -500 334 -640 427 -640 427 -640 480 -612 612 -359 640 -640 480 -640 446 -640 427 -640 361 -640 427 -640 427 -612 612 -640 360 -480 640 -640 427 -640 480 -640 428 -640 427 -500 375 -640 426 -640 474 -612 612 -500 375 -640 480 -640 480 -500 375 -480 640 -640 396 -640 510 -640 426 -640 426 -500 333 -640 446 -480 640 -640 480 -640 426 -500 375 -640 480 -400 500 -500 332 -640 427 -612 612 -500 333 -640 431 -640 480 -500 375 -375 500 -430 640 -480 640 -640 480 -640 480 -500 459 -640 428 -443 640 -640 427 -480 640 -640 640 -427 640 -640 428 -640 425 -640 427 -640 427 -480 640 -640 360 -640 480 -457 640 -640 480 -500 375 -640 480 -427 640 -640 427 -640 480 -640 480 -480 640 -640 480 -640 427 -500 400 -640 427 -640 480 -640 425 -640 507 -640 382 -640 427 -640 426 -500 383 -640 347 -426 640 -640 426 -320 240 -640 426 -640 426 -640 421 -640 425 -375 500 -480 640 -640 426 -500 375 -500 333 -427 640 -458 640 -640 534 -375 500 -640 429 -640 480 -640 360 -640 480 -640 457 -500 333 -640 426 -640 427 -480 640 -640 426 -500 333 -640 376 -640 480 -640 480 -640 316 -640 440 -640 381 -640 427 -640 428 -640 480 -640 427 -609 640 -500 375 -640 426 -500 402 -640 427 -240 360 -640 480 -500 334 -640 425 -640 478 -640 638 -640 427 -500 375 -640 480 -640 425 -480 640 -640 425 -640 480 -612 612 -640 480 -640 427 -640 480 -640 480 -640 427 -640 427 -500 400 -480 640 -480 640 -640 314 -640 425 -640 427 -640 480 -500 332 -640 480 -640 427 -480 640 -640 425 -410 640 -640 427 -640 342 -640 480 -600 600 -640 427 -640 360 -640 640 -640 480 -500 336 -640 480 -640 425 -640 427 -640 428 -640 238 -640 427 -640 429 -480 640 -640 428 -640 453 -640 426 -640 428 -640 426 -640 424 -640 426 -640 403 -375 500 -478 640 -640 480 -640 480 -640 427 -640 480 -500 375 -500 400 -333 500 -500 281 -500 333 -427 640 -426 640 -480 640 -274 640 -640 480 -500 383 -640 427 -640 480 -640 383 -500 375 -500 333 -640 480 -640 433 -640 360 -500 333 -640 480 -640 427 -640 424 -500 375 -640 480 -427 640 -418 640 -640 480 -478 640 -640 553 -640 426 -640 424 -640 360 -640 480 -359 640 -427 640 -640 480 -480 640 -331 500 -427 640 -640 427 -640 480 -375 500 -500 375 -640 480 -500 375 -640 427 -640 424 -612 612 -500 332 -640 480 -640 426 -640 426 -500 345 -640 427 -640 425 -640 427 -375 500 -598 640 -640 480 -356 500 -640 480 -640 426 -640 478 -208 160 -500 481 -640 426 -640 426 -640 426 -640 480 -640 424 -480 640 -640 427 -500 294 -640 427 -640 427 -640 436 -640 402 -640 457 -640 480 -640 428 -640 428 -398 640 -426 640 -640 426 -428 640 -426 640 -500 333 -640 427 -640 480 -428 640 -480 640 -640 427 -640 427 -456 640 -501 640 -640 408 -640 480 -640 424 -640 480 -480 640 -640 480 -640 427 -480 640 -640 480 -500 408 -640 429 -480 640 -640 640 -612 612 -640 380 -640 426 -435 640 -640 503 -612 612 -640 480 -640 425 -640 480 -640 480 -640 480 -640 427 -640 426 -640 480 -443 500 -640 480 -640 480 -640 480 -480 640 -640 421 -640 640 -640 427 -640 426 -500 452 -500 333 -640 448 -640 480 -480 640 -640 427 -480 640 -640 480 -427 640 -478 640 -640 427 -640 422 -640 480 -640 424 -640 204 -640 480 -333 500 -480 640 -640 480 -640 425 -640 480 -640 437 -640 480 -462 640 -428 640 -640 480 -500 313 -500 476 -640 428 -640 489 -640 524 -640 426 -640 426 -500 375 -640 302 -640 510 -640 426 -640 360 -640 424 -640 432 -426 640 -488 640 -640 427 -640 376 -450 350 -640 480 -640 480 -500 319 -640 480 -640 359 -375 500 -640 480 -640 480 -640 427 -640 427 -333 500 -640 427 -640 406 -375 500 -427 640 -640 400 -565 584 -640 480 -640 640 -640 427 -335 500 -500 375 -640 448 -640 479 -640 480 -375 500 -640 494 -447 333 -640 457 -334 500 -640 640 -612 612 -640 528 -425 640 -500 375 -480 640 -640 480 -640 640 -640 424 -427 640 -480 640 -640 427 -640 639 -640 480 -640 480 -500 375 -480 640 -427 640 -640 428 -640 426 -640 427 -640 426 -640 424 -480 640 -640 480 -500 333 -383 640 -600 457 -640 216 -640 480 -500 375 -640 480 -640 427 -640 425 -640 480 -427 640 -640 427 -368 640 -640 480 -640 463 -640 425 -640 480 -640 426 -500 364 -640 427 -480 640 -640 483 -600 450 -636 640 -640 480 -640 640 -640 427 -480 640 -375 500 -640 480 -640 427 -640 439 -487 500 -640 425 -640 480 -640 480 -640 480 -640 480 -640 480 -640 356 -480 640 -640 480 -640 360 -640 427 -640 480 -500 333 -500 332 -640 427 -640 427 -640 480 -640 424 -480 640 -640 480 -640 427 -640 480 -640 427 -640 480 -480 640 -640 480 -640 480 -640 425 -433 640 -499 640 -640 480 -640 480 -640 480 -479 640 -640 427 -640 478 -640 429 -500 334 -640 480 -480 640 -640 480 -640 400 -640 427 -640 427 -480 640 -500 375 -640 357 -640 384 -480 640 -640 480 -612 612 -640 427 -640 360 -640 424 -480 640 -500 375 -375 500 -640 480 -480 640 -500 332 -640 640 -640 451 -640 427 -640 480 -640 480 -640 511 -500 357 -640 303 -480 640 -640 480 -500 375 -640 480 -640 390 -564 640 -424 640 -426 640 -640 423 -500 333 -480 640 -640 427 -359 640 -480 640 -640 411 -640 428 -500 375 -640 459 -640 480 -640 480 -640 480 -500 375 -640 427 -640 360 -480 640 -480 640 -640 480 -640 480 -640 427 -640 640 -612 612 -640 427 -425 640 -640 344 -640 427 -640 480 -480 640 -640 478 -640 480 -640 480 -640 429 -375 500 -640 431 -640 426 -480 640 -640 394 -640 427 -640 480 -640 480 -640 536 -640 426 -427 640 -500 404 -500 400 -500 375 -640 427 -640 478 -480 640 -640 479 -640 360 -640 480 -640 427 -612 612 -640 427 -500 375 -640 427 -640 420 -640 427 -640 480 -640 427 -640 425 -640 482 -494 289 -640 425 -640 640 -640 520 -427 640 -640 160 -640 470 -640 480 -640 480 -640 480 -500 375 -640 480 -500 375 -640 401 -500 375 -612 612 -640 360 -640 480 -640 480 -375 500 -640 434 -640 480 -640 480 -640 557 -640 640 -424 640 -427 640 -640 428 -640 411 -427 640 -480 640 -640 427 -640 480 -640 481 -640 480 -640 480 -640 426 -640 480 -640 526 -640 489 -500 375 -640 480 -640 480 -640 426 -640 480 -640 429 -612 612 -427 640 -640 444 -640 480 -640 480 -500 333 -640 396 -400 372 -640 480 -480 640 -640 480 -640 426 -640 480 -640 480 -640 360 -424 640 -427 640 -500 333 -426 640 -500 375 -640 406 -640 429 -640 427 -604 640 -424 640 -640 480 -500 375 -500 375 -640 546 -480 640 -640 406 -375 500 -640 427 -640 480 -640 425 -640 427 -500 375 -357 500 -640 480 -640 480 -640 425 -375 500 -500 400 -640 360 -640 480 -640 423 -640 423 -480 640 -640 480 -600 510 -434 640 -640 427 -640 435 -640 427 -640 480 -640 424 -640 427 -500 375 -640 480 -640 428 -640 427 -612 612 -640 480 -640 434 -640 480 -511 640 -640 427 -333 500 -640 413 -640 640 -640 360 -640 480 -640 427 -640 480 -640 480 -640 426 -640 480 -640 480 -640 425 -640 429 -240 160 -640 480 -612 612 -640 426 -640 360 -480 640 -640 480 -537 640 -640 480 -480 640 -640 426 -640 457 -640 427 -640 516 -640 427 -640 640 -640 480 -640 480 -640 427 -640 427 -640 453 -480 640 -640 428 -480 640 -640 363 -640 480 -541 640 -640 480 -612 612 -326 500 -500 400 -640 640 -640 480 -500 375 -640 427 -640 426 -500 375 -640 424 -375 500 -257 362 -480 640 -480 640 -640 480 -640 360 -640 480 -500 375 -640 420 -640 427 -640 298 -640 480 -640 401 -640 475 -640 427 -640 480 -640 426 -640 427 -610 640 -640 498 -480 640 -640 480 -408 640 -640 427 -500 500 -640 427 -640 480 -480 640 -640 640 -640 640 -500 375 -375 500 -640 480 -500 333 -640 480 -427 640 -640 411 -640 426 -640 426 -640 480 -640 480 -500 346 -640 427 -640 376 -640 360 -640 425 -480 640 -427 640 -500 438 -480 640 -640 426 -640 480 -640 292 -640 428 -640 480 -333 500 -500 462 -480 640 -640 451 -640 427 -468 640 -640 429 -640 480 -500 500 -640 480 -640 427 -427 640 -640 427 -640 427 -640 480 -640 480 -375 500 -640 480 -640 427 -640 340 -640 427 -480 640 -375 500 -500 423 -640 425 -640 554 -500 375 -480 640 -640 505 -640 199 -640 426 -640 427 -640 480 -640 480 -333 500 -640 411 -640 427 -640 480 -500 375 -640 424 -426 640 -480 640 -640 424 -640 480 -640 426 -640 320 -640 425 -500 333 -480 640 -640 480 -375 500 -640 480 -500 400 -343 640 -427 640 -640 480 -640 469 -640 480 -480 640 -640 339 -640 427 -640 427 -513 640 -640 394 -640 416 -640 234 -640 480 -640 427 -640 428 -640 426 -500 375 -500 334 -427 640 -640 480 -640 427 -640 480 -428 640 -500 333 -427 640 -492 500 -640 480 -423 640 -406 640 -640 480 -640 362 -480 640 -640 480 -640 426 -640 480 -640 444 -480 640 -513 342 -412 640 -427 640 -640 480 -640 359 -612 612 -640 480 -640 480 -480 360 -640 425 -640 480 -640 480 -640 598 -640 480 -480 640 -640 480 -640 426 -640 480 -500 374 -640 457 -640 426 -500 333 -500 377 -375 500 -500 375 -640 492 -640 311 -427 640 -640 427 -640 426 -633 640 -640 483 -640 386 -640 427 -640 453 -375 500 -640 320 -640 424 -640 427 -338 500 -640 427 -640 480 -640 480 -640 384 -640 480 -640 426 -375 500 -426 640 -640 480 -640 480 -640 427 -640 427 -640 428 -640 480 -640 426 -640 640 -640 426 -640 480 -640 480 -640 480 -500 345 -640 480 -640 341 -553 640 -480 640 -480 640 -320 240 -500 375 -500 375 -640 482 -640 427 -640 450 -640 480 -640 480 -478 640 -612 612 -640 425 -426 640 -623 640 -640 426 -640 480 -640 451 -640 336 -640 480 -427 640 -640 427 -640 480 -640 480 -640 427 -640 640 -640 512 -640 468 -640 480 -640 480 -640 480 -500 333 -480 640 -480 640 -425 640 -612 612 -640 480 -416 640 -640 457 -640 640 -427 640 -640 428 -480 640 -433 640 -640 425 -640 428 -640 428 -640 373 -500 375 -640 640 -606 640 -457 640 -640 480 -640 480 -640 480 -640 359 -640 512 -640 427 -480 640 -640 476 -640 360 -640 428 -480 640 -640 480 -640 503 -640 427 -640 427 -640 427 -640 488 -500 362 -640 482 -500 375 -640 581 -640 427 -612 612 -640 480 -621 640 -640 480 -640 427 -512 640 -640 425 -640 479 -480 640 -640 640 -640 427 -375 500 -640 480 -427 640 -426 640 -640 427 -640 480 -640 427 -640 424 -500 281 -640 260 -640 457 -480 640 -640 421 -640 480 -481 640 -500 375 -640 640 -428 640 -500 333 -640 427 -480 640 -640 426 -427 640 -500 375 -427 640 -432 288 -640 426 -640 480 -640 427 -375 500 -640 480 -640 425 -640 480 -640 453 -479 640 -640 479 -640 427 -640 352 -640 394 -480 640 -640 640 -640 480 -640 417 -640 494 -640 427 -640 479 -500 375 -640 480 -640 480 -640 426 -426 640 -640 427 -640 480 -640 424 -480 640 -479 640 -640 480 -640 629 -640 478 -640 480 -640 427 -640 430 -640 480 -640 480 -640 480 -640 427 -480 640 -640 480 -480 640 -427 640 -640 420 -640 425 -501 640 -546 640 -640 486 -640 480 -612 612 -640 235 -640 480 -640 429 -640 480 -428 640 -640 480 -640 480 -640 428 -612 612 -404 640 -640 480 -640 427 -640 408 -480 640 -427 640 -500 375 -537 427 -640 426 -360 480 -640 425 -640 480 -640 426 -640 428 -333 500 -334 500 -640 427 -360 480 -640 318 -480 640 -480 640 -640 429 -640 480 -500 243 -500 375 -480 640 -480 640 -640 480 -640 480 -640 456 -640 427 -480 500 -640 426 -640 480 -640 512 -479 640 -640 480 -640 482 -500 333 -640 429 -640 460 -640 428 -640 425 -640 640 -612 612 -640 480 -640 427 -640 427 -500 375 -640 480 -640 427 -427 640 -640 480 -640 480 -640 480 -640 427 -500 499 -640 505 -640 423 -640 480 -640 424 -640 482 -640 427 -640 480 -640 424 -640 427 -480 640 -640 480 -640 541 -480 640 -480 640 -375 500 -428 640 -427 640 -640 480 -500 376 -512 640 -375 500 -640 427 -210 168 -480 640 -640 481 -640 480 -640 427 -370 640 -640 390 -640 412 -640 480 -640 426 -640 425 -375 500 -500 375 -640 428 -640 640 -408 640 -640 427 -640 428 -640 480 -640 427 -500 375 -640 640 -640 427 -640 480 -640 480 -640 426 -499 500 -640 426 -500 332 -640 480 -640 427 -640 480 -640 360 -640 478 -341 500 -640 471 -640 480 -640 427 -615 346 -640 640 -640 480 -640 480 -640 358 -640 425 -640 480 -640 630 -640 427 -640 480 -640 427 -500 335 -531 640 -640 473 -640 427 -640 480 -500 375 -640 480 -640 480 -509 640 -640 431 -640 424 -640 480 -640 480 -640 480 -426 640 -500 375 -480 640 -500 327 -640 480 -500 375 -640 425 -427 640 -414 640 -639 480 -634 640 -612 612 -640 480 -640 480 -640 427 -640 480 -480 640 -640 423 -480 640 -640 426 -640 428 -640 480 -640 480 -640 459 -640 480 -427 640 -480 640 -640 427 -480 640 -640 427 -640 480 -640 480 -640 480 -640 640 -375 500 -640 480 -640 427 -640 480 -640 425 -612 612 -427 640 -483 640 -640 426 -640 419 -640 480 -428 640 -500 400 -640 480 -640 348 -427 640 -640 361 -426 640 -640 436 -333 500 -152 228 -612 612 -462 640 -640 478 -640 480 -640 480 -640 401 -640 427 -640 427 -640 427 -427 640 -640 640 -500 375 -407 640 -640 427 -343 336 -640 480 -500 352 -640 480 -640 428 -640 480 -640 427 -640 425 -354 640 -640 429 -333 500 -298 450 -640 420 -640 480 -427 640 -640 425 -640 427 -480 640 -480 640 -500 331 -500 334 -640 480 -375 500 -640 480 -640 428 -612 612 -640 640 -640 424 -640 480 -640 480 -421 640 -640 480 -390 640 -640 480 -439 640 -640 427 -427 640 -640 480 -500 247 -500 333 -480 640 -640 368 -640 428 -426 640 -480 640 -640 426 -640 403 -640 427 -640 427 -640 480 -640 428 -321 500 -500 333 -640 480 -640 480 -640 480 -413 640 -640 427 -640 427 -334 500 -467 640 -500 375 -480 640 -480 640 -433 640 -500 375 -480 640 -640 424 -640 480 -640 480 -640 480 -375 500 -640 480 -640 428 -640 480 -640 426 -386 640 -640 429 -375 500 -640 426 -640 426 -427 640 -640 480 -640 349 -640 480 -640 480 -640 424 -375 500 -640 374 -640 480 -334 500 -640 480 -640 451 -480 640 -640 430 -640 427 -500 375 -478 640 -520 373 -640 478 -640 427 -612 612 -640 441 -480 640 -640 427 -640 426 -480 640 -640 429 -480 640 -612 612 -640 480 -640 427 -640 426 -480 640 -640 525 -375 500 -640 480 -640 411 -640 428 -640 428 -640 427 -640 427 -535 640 -375 500 -640 427 -640 428 -640 426 -480 640 -640 480 -612 612 -484 500 -640 426 -640 425 -640 427 -500 371 -500 320 -640 427 -480 640 -640 480 -640 424 -640 480 -640 427 -640 301 -500 333 -640 424 -640 480 -427 640 -612 612 -332 500 -640 439 -500 415 -427 640 -640 513 -640 427 -640 426 -640 480 -324 640 -640 480 -640 480 -375 500 -640 427 -640 480 -640 480 -612 612 -640 543 -640 480 -480 640 -640 446 -640 480 -640 480 -473 640 -640 421 -640 427 -640 425 -640 427 -640 427 -640 465 -640 395 -640 446 -640 405 -640 425 -640 375 -640 425 -640 327 -640 480 -427 640 -640 480 -640 427 -500 375 -640 480 -640 480 -428 640 -640 426 -640 480 -640 427 -640 514 -500 335 -640 445 -640 360 -375 500 -640 480 -640 480 -640 480 -640 425 -432 640 -640 425 -640 512 -640 424 -640 427 -640 427 -640 480 -640 480 -640 427 -640 426 -480 640 -640 480 -640 480 -478 640 -640 480 -640 480 -500 333 -500 375 -640 427 -640 426 -500 373 -486 640 -640 496 -640 480 -640 480 -640 480 -640 426 -640 428 -640 427 -640 425 -480 640 -500 375 -640 394 -640 427 -640 428 -640 480 -478 640 -640 480 -640 480 -480 640 -640 474 -640 406 -640 640 -375 500 -640 428 -640 480 -640 480 -500 333 -640 427 -478 640 -640 427 -640 480 -500 375 -234 500 -640 198 -500 375 -640 480 -640 444 -500 375 -480 640 -640 427 -640 640 -640 449 -640 426 -640 480 -500 375 -356 500 -427 640 -375 500 -487 640 -640 427 -640 640 -640 427 -640 436 -640 427 -640 427 -640 421 -640 360 -426 640 -640 430 -640 377 -640 480 -640 480 -640 480 -500 375 -640 480 -640 426 -640 426 -640 481 -640 480 -640 427 -640 444 -640 480 -640 480 -366 640 -500 332 -640 426 -640 480 -478 640 -480 640 -640 426 -427 640 -640 640 -640 427 -480 640 -640 424 -640 430 -612 612 -427 640 -640 640 -612 612 -640 427 -640 480 -480 640 -640 480 -640 427 -640 480 -640 424 -640 480 -640 480 -640 480 -640 480 -425 640 -640 514 -640 427 -640 480 -640 480 -640 426 -500 375 -480 640 -640 425 -500 375 -640 480 -640 480 -480 640 -427 640 -640 480 -500 375 -640 551 -640 427 -640 480 -640 456 -640 480 -335 500 -500 375 -427 640 -480 640 -640 427 -500 375 -640 480 -640 480 -480 640 -500 341 -443 640 -640 395 -640 173 -480 640 -640 448 -640 427 -548 640 -640 480 -640 480 -426 640 -480 640 -480 640 -500 331 -640 427 -640 480 -447 640 -640 480 -640 350 -640 484 -500 338 -640 480 -480 640 -640 425 -500 375 -640 483 -640 359 -640 426 -335 500 -640 426 -640 480 -480 640 -640 427 -640 478 -640 428 -640 480 -640 503 -480 640 -480 640 -640 481 -640 480 -640 238 -640 480 -640 427 -500 274 -640 622 -640 480 -640 427 -375 500 -640 480 -497 640 -640 640 -640 452 -640 426 -500 401 -640 473 -640 424 -640 424 -500 333 -480 640 -640 475 -640 480 -500 400 -640 427 -640 480 -500 347 -640 426 -640 422 -640 480 -640 427 -640 427 -640 425 -433 640 -640 524 -640 453 -640 480 -640 429 -640 480 -500 374 -500 375 -640 427 -426 640 -640 428 -640 428 -640 351 -640 459 -640 480 -640 480 -640 454 -477 640 -500 334 -375 500 -640 426 -640 427 -640 480 -426 640 -640 427 -640 480 -425 640 -640 480 -500 375 -476 640 -640 426 -640 427 -640 480 -640 480 -640 480 -640 468 -640 640 -640 480 -640 426 -640 425 -559 640 -640 398 -640 640 -640 427 -612 612 -640 480 -480 640 -640 480 -612 612 -640 480 -500 332 -640 359 -640 427 -360 640 -640 640 -423 640 -500 334 -640 427 -427 640 -640 427 -640 480 -640 480 -427 640 -480 640 -640 442 -640 480 -640 480 -640 426 -612 612 -640 426 -427 640 -640 470 -427 640 -419 640 -480 640 -640 427 -500 375 -485 640 -640 480 -640 453 -640 480 -640 478 -640 427 -640 480 -640 480 -612 612 -640 480 -425 640 -640 428 -640 427 -640 480 -640 456 -576 640 -640 427 -640 427 -640 480 -640 425 -640 439 -419 640 -480 640 -375 500 -480 640 -640 427 -427 640 -480 360 -500 330 -640 360 -569 640 -640 428 -640 485 -640 496 -640 427 -640 424 -640 594 -640 427 -640 480 -480 640 -640 480 -500 375 -427 640 -640 640 -500 388 -640 428 -640 426 -640 436 -427 640 -500 375 -375 500 -640 480 -640 427 -640 427 -640 480 -500 333 -640 457 -640 426 -640 425 -480 640 -380 640 -640 327 -500 335 -640 480 -640 427 -640 480 -640 425 -434 640 -640 480 -640 480 -640 427 -450 339 -478 640 -480 640 -640 480 -482 640 -640 424 -640 426 -640 512 -612 612 -640 478 -640 480 -640 427 -640 427 -640 427 -640 480 -612 612 -640 480 -500 333 -434 500 -640 446 -640 482 -640 480 -640 480 -640 478 -500 375 -640 427 -640 427 -500 334 -425 640 -640 427 -640 427 -478 640 -640 461 -640 477 -640 425 -640 427 -500 400 -640 389 -640 426 -424 640 -640 480 -640 361 -640 478 -333 500 -640 608 -640 480 -640 480 -375 500 -640 311 -640 427 -640 427 -640 393 -640 480 -500 333 -640 639 -640 376 -640 414 -490 640 -485 640 -640 344 -640 480 -640 427 -640 466 -640 427 -480 640 -640 613 -640 480 -640 426 -640 429 -640 259 -500 333 -612 612 -640 640 -480 640 -640 480 -640 480 -640 427 -640 458 -480 640 -423 640 -500 375 -640 480 -640 480 -500 333 -480 640 -640 480 -443 640 -640 428 -640 427 -400 640 -640 480 -640 427 -500 500 -640 480 -500 333 -600 600 -640 427 -640 320 -480 640 -640 480 -640 406 -427 640 -640 427 -640 419 -640 480 -640 427 -640 429 -640 640 -640 427 -500 477 -640 480 -640 480 -640 480 -612 612 -640 429 -480 640 -640 480 -640 458 -640 426 -500 440 -640 360 -500 334 -640 480 -640 427 -640 480 -640 427 -640 428 -500 375 -640 427 -640 426 -332 500 -427 640 -427 640 -500 375 -640 427 -640 480 -640 518 -640 480 -640 427 -480 640 -640 640 -640 425 -640 427 -481 640 -640 359 -640 480 -640 360 -640 428 -640 480 -640 419 -640 480 -640 480 -640 480 -640 480 -640 426 -640 424 -640 321 -640 478 -640 482 -500 375 -640 480 -640 480 -506 640 -640 480 -640 469 -640 377 -640 359 -640 480 -500 335 -640 478 -640 427 -640 287 -640 480 -375 500 -640 480 -428 640 -456 640 -480 640 -640 493 -640 481 -480 640 -640 480 -640 428 -375 500 -640 480 -640 371 -640 427 -500 375 -427 640 -640 480 -500 375 -640 337 -468 640 -426 640 -640 484 -480 640 -640 427 -640 425 -500 424 -640 480 -640 427 -640 427 -640 427 -640 480 -640 610 -640 480 -640 480 -640 426 -463 640 -640 429 -640 427 -640 522 -640 480 -640 428 -640 480 -480 640 -640 427 -424 640 -480 640 -640 457 -500 367 -640 448 -496 640 -500 375 -480 640 -640 425 -640 425 -640 480 -500 334 -640 369 -427 640 -640 480 -375 500 -640 480 -640 480 -640 411 -333 500 -640 512 -640 427 -640 474 -640 480 -640 427 -640 478 -427 640 -640 358 -640 640 -640 472 -567 378 -640 404 -640 427 -480 640 -640 428 -640 427 -640 480 -427 640 -640 433 -640 638 -480 640 -640 470 -640 591 -640 427 -640 427 -612 612 -550 365 -640 640 -527 640 -640 427 -640 480 -640 480 -640 480 -640 640 -640 459 -480 640 -480 640 -640 427 -640 480 -640 480 -640 480 -640 427 -427 640 -640 427 -333 500 -640 480 -640 426 -640 426 -640 427 -426 640 -640 228 -612 612 -640 426 -612 612 -640 426 -640 640 -640 523 -480 640 -479 640 -640 428 -640 480 -500 375 -640 414 -500 375 -640 480 -480 640 -414 278 -424 640 -640 480 -480 640 -500 375 -612 612 -640 544 -427 640 -640 427 -640 480 -500 331 -640 429 -640 427 -640 480 -640 426 -640 426 -640 480 -640 480 -366 640 -640 427 -640 480 -640 480 -427 640 -640 589 -500 375 -640 426 -640 568 -640 395 -640 427 -640 426 -640 480 -640 480 -640 480 -640 360 -640 561 -640 480 -640 427 -640 480 -640 480 -500 375 -427 640 -425 640 -640 459 -523 640 -488 640 -478 640 -640 426 -500 333 -480 640 -612 612 -640 425 -480 640 -640 425 -640 427 -500 375 -640 552 -640 480 -434 640 -500 334 -500 375 -515 640 -640 480 -425 640 -640 198 -640 426 -640 427 -640 440 -640 427 -640 427 -500 375 -640 402 -500 500 -640 480 -640 346 -500 333 -640 458 -480 640 -640 480 -640 426 -500 375 -640 480 -427 640 -640 425 -480 640 -500 441 -640 480 -428 640 -640 480 -612 612 -640 480 -640 427 -640 501 -500 375 -640 480 -640 427 -441 640 -424 640 -427 640 -640 427 -640 480 -480 320 -500 379 -552 640 -640 426 -640 346 -640 427 -640 512 -480 640 -640 512 -612 612 -640 480 -500 375 -640 640 -375 500 -640 426 -640 359 -612 612 -612 612 -640 428 -640 480 -640 427 -640 428 -640 428 -640 263 -375 500 -640 427 -252 360 -640 425 -640 424 -500 331 -640 480 -500 331 -640 480 -640 480 -480 640 -640 428 -427 640 -640 427 -417 500 -640 480 -426 640 -640 427 -383 640 -480 640 -640 480 -640 512 -640 431 -612 612 -450 600 -640 426 -640 502 -640 480 -640 457 -640 427 -640 424 -640 480 -640 480 -640 427 -378 640 -612 612 -640 426 -640 480 -418 640 -640 426 -333 500 -640 480 -640 480 -640 432 -500 375 -500 347 -640 427 -640 451 -640 480 -640 480 -640 266 -640 426 -640 360 -500 374 -427 640 -640 427 -480 640 -640 431 -500 333 -640 480 -375 500 -640 480 -640 482 -640 480 -640 426 -640 478 -640 480 -640 424 -640 480 -640 427 -640 480 -425 640 -640 427 -640 480 -640 480 -640 424 -480 640 -640 427 -640 480 -426 640 -640 426 -640 480 -640 427 -480 640 -480 640 -480 640 -640 478 -640 480 -640 480 -640 480 -640 480 -640 480 -640 426 -640 480 -500 333 -640 427 -640 427 -500 333 -640 427 -480 640 -480 640 -640 480 -428 640 -640 480 -500 334 -640 347 -640 442 -640 480 -640 480 -640 427 -640 411 -425 640 -640 427 -480 640 -640 427 -640 480 -640 480 -500 387 -640 480 -480 640 -500 332 -453 500 -480 640 -640 480 -640 427 -500 334 -640 427 -500 500 -640 480 -500 375 -640 428 -640 640 -640 424 -500 376 -427 640 -640 427 -640 427 -640 427 -640 480 -640 480 -500 375 -640 422 -640 486 -640 428 -500 322 -500 375 -640 480 -640 513 -427 640 -640 425 -640 480 -640 450 -640 427 -640 480 -640 480 -640 480 -500 332 -640 421 -640 480 -640 426 -640 427 -640 424 -640 428 -640 480 -640 480 -640 480 -427 640 -640 640 -640 480 -640 359 -640 448 -374 500 -425 640 -259 194 -640 428 -640 427 -640 534 -640 480 -640 480 -640 346 -500 375 -425 640 -426 640 -640 480 -640 480 -640 480 -400 640 -640 480 -640 427 -640 427 -419 640 -640 427 -640 614 -500 375 -640 457 -640 428 -640 427 -500 375 -640 483 -500 375 -640 426 -640 388 -640 426 -640 480 -500 341 -640 427 -640 480 -640 425 -500 375 -640 480 -640 427 -640 355 -640 480 -427 640 -500 375 -640 480 -500 400 -401 640 -640 480 -640 426 -640 427 -640 427 -640 551 -640 480 -640 428 -428 640 -427 640 -640 427 -640 480 -426 640 -459 640 -480 640 -640 480 -640 424 -640 480 -333 500 -482 640 -640 480 -640 480 -640 480 -640 360 -640 426 -512 640 -427 640 -375 500 -375 500 -640 480 -640 427 -640 599 -640 454 -456 640 -332 500 -640 426 -640 436 -426 640 -640 480 -480 640 -640 480 -612 612 -640 480 -427 640 -500 334 -640 480 -640 480 -640 480 -640 480 -640 445 -500 375 -640 427 -640 480 -500 375 -640 445 -443 640 -480 640 -640 428 -640 427 -640 426 -512 640 -640 427 -640 374 -500 332 -375 500 -640 480 -640 480 -500 383 -640 427 -500 333 -500 375 -640 535 -640 426 -640 480 -640 425 -640 480 -420 640 -427 640 -480 640 -640 426 -426 640 -500 375 -640 480 -500 333 -480 640 -640 480 -425 640 -640 480 -640 480 -640 422 -640 425 -640 480 -612 612 -500 333 -640 639 -640 429 -500 375 -427 640 -453 640 -500 261 -500 333 -640 478 -425 640 -612 612 -428 640 -640 426 -480 640 -640 331 -640 510 -500 333 -640 427 -640 427 -640 480 -640 376 -640 478 -500 375 -640 427 -640 409 -481 640 -431 640 -640 480 -640 480 -640 480 -426 640 -640 436 -640 534 -640 385 -640 426 -640 480 -367 415 -375 500 -640 430 -640 480 -640 446 -640 480 -640 438 -640 428 -640 480 -500 375 -640 427 -640 361 -640 427 -640 468 -640 480 -427 640 -640 480 -640 425 -604 402 -640 426 -374 500 -640 318 -470 640 -640 359 -640 427 -640 540 -640 427 -457 640 -640 480 -640 360 -640 478 -640 480 -640 426 -450 600 -500 442 -640 640 -640 445 -640 480 -640 425 -640 514 -640 478 -426 640 -640 424 -640 425 -360 640 -640 306 -640 512 -640 480 -500 375 -478 640 -640 441 -396 500 -640 375 -594 445 -640 427 -640 480 -640 425 -640 480 -640 427 -640 426 -640 480 -640 426 -640 426 -640 427 -500 375 -480 640 -640 359 -612 612 -640 480 -640 480 -640 480 -500 310 -612 612 -500 471 -640 427 -640 427 -640 372 -640 427 -640 412 -481 640 -640 293 -500 334 -640 424 -500 375 -480 640 -640 512 -480 640 -612 612 -640 468 -640 424 -333 500 -612 612 -424 640 -500 375 -640 480 -500 333 -425 640 -640 426 -640 480 -480 640 -640 427 -480 640 -640 427 -640 480 -640 384 -640 439 -480 640 -426 640 -612 612 -640 303 -640 480 -640 384 -640 480 -640 427 -500 375 -640 480 -640 427 -640 480 -640 491 -640 430 -640 480 -379 640 -640 480 -480 640 -500 375 -640 530 -640 427 -640 456 -515 640 -640 480 -500 334 -640 480 -640 437 -640 480 -480 640 -640 480 -356 500 -640 478 -640 427 -640 427 -428 640 -480 640 -480 640 -480 640 -640 480 -640 425 -640 408 -640 309 -640 226 -359 640 -480 640 -640 427 -640 471 -480 640 -500 375 -640 426 -640 425 -640 498 -640 360 -480 640 -437 500 -640 427 -375 500 -500 344 -480 640 -640 473 -640 426 -640 480 -640 431 -640 273 -640 427 -640 427 -640 427 -500 375 -640 480 -480 640 -640 427 -640 427 -640 639 -500 375 -526 640 -469 640 -500 345 -640 480 -612 612 -480 640 -480 640 -640 534 -320 320 -333 500 -336 500 -640 426 -640 441 -640 612 -640 425 -500 375 -640 480 -640 480 -471 640 -480 640 -500 375 -640 480 -640 480 -640 480 -640 480 -640 480 -341 640 -640 480 -480 640 -480 640 -640 426 -640 448 -612 612 -353 500 -480 640 -499 640 -640 373 -640 393 -640 444 -640 427 -640 360 -500 348 -500 375 -640 480 -640 640 -640 480 -640 480 -500 375 -441 640 -493 640 -640 427 -640 480 -500 333 -640 481 -640 372 -640 453 -640 427 -640 480 -500 357 -640 427 -640 480 -640 327 -612 612 -424 640 -640 359 -640 472 -640 428 -640 480 -640 320 -425 640 -640 480 -612 612 -480 640 -480 640 -375 500 -480 640 -427 640 -640 427 -425 319 -640 480 -640 427 -640 425 -640 480 -640 425 -640 425 -640 427 -640 427 -500 334 -640 426 -640 427 -640 480 -640 480 -640 444 -480 640 -640 554 -640 480 -612 612 -640 428 -500 375 -640 480 -640 427 -640 428 -500 354 -427 640 -500 333 -414 640 -480 640 -640 488 -640 480 -594 640 -612 612 -640 361 -640 480 -467 640 -640 526 -640 480 -500 491 -640 480 -400 640 -640 569 -480 640 -640 426 -640 480 -640 427 -480 640 -640 480 -500 375 -640 426 -427 640 -640 427 -500 375 -640 480 -480 640 -640 426 -375 500 -640 480 -640 369 -640 428 -426 640 -480 640 -640 426 -640 480 -480 640 -425 640 -640 425 -427 640 -640 435 -640 507 -640 480 -500 333 -640 426 -640 473 -612 612 -640 427 -640 427 -500 375 -640 640 -375 500 -640 480 -640 428 -427 640 -639 640 -480 640 -640 423 -640 391 -640 480 -640 480 -640 389 -478 640 -640 427 -612 612 -463 640 -640 480 -480 640 -427 640 -640 480 -480 640 -481 640 -640 640 -500 338 -640 480 -640 480 -640 360 -500 375 -640 480 -500 375 -640 426 -640 479 -500 375 -640 493 -640 486 -481 640 -486 381 -500 375 -640 428 -427 640 -640 456 -497 640 -426 640 -640 427 -500 375 -640 429 -640 456 -640 360 -640 478 -428 640 -480 640 -640 480 -500 483 -640 426 -381 640 -640 480 -640 443 -640 480 -640 428 -640 424 -640 480 -640 407 -640 426 -640 480 -480 640 -640 480 -640 428 -640 359 -426 640 -640 427 -640 480 -640 428 -427 640 -640 481 -375 500 -573 640 -500 333 -640 428 -640 476 -612 612 -640 480 -640 480 -500 375 -426 640 -375 500 -640 480 -640 480 -640 359 -480 640 -637 640 -640 423 -640 394 -640 480 -500 375 -612 612 -640 360 -640 426 -640 427 -640 640 -640 480 -332 500 -640 427 -640 480 -333 500 -640 426 -640 541 -640 427 -640 640 -640 480 -640 426 -450 338 -640 428 -640 428 -640 354 -640 524 -480 640 -480 640 -640 480 -640 424 -500 332 -640 426 -640 480 -500 375 -480 640 -640 351 -640 480 -640 480 -531 640 -480 640 -375 500 -640 427 -427 640 -612 612 -427 640 -640 441 -640 480 -638 640 -640 426 -488 640 -424 640 -500 400 -640 426 -640 427 -480 640 -333 500 -640 579 -640 427 -640 320 -360 640 -640 427 -640 480 -640 480 -500 332 -640 427 -480 640 -640 467 -635 640 -640 427 -497 640 -640 480 -427 640 -640 428 -424 640 -640 480 -427 640 -478 640 -480 640 -640 424 -427 640 -640 480 -640 480 -640 426 -427 640 -500 375 -640 432 -640 479 -640 360 -640 427 -640 424 -640 480 -640 480 -478 640 -427 640 -640 480 -428 640 -500 375 -640 427 -375 500 -640 429 -640 427 -640 426 -427 640 -640 620 -375 500 -438 351 -640 427 -575 640 -640 480 -640 428 -640 480 -640 480 -640 480 -640 480 -480 640 -500 342 -429 640 -480 640 -640 394 -640 480 -640 298 -427 640 -500 378 -640 511 -500 333 -640 480 -334 500 -640 480 -640 423 -640 426 -640 427 -640 480 -640 388 -640 444 -640 531 -453 640 -500 375 -640 234 -500 333 -426 640 -640 428 -640 480 -640 428 -480 640 -640 472 -480 640 -375 500 -640 480 -480 640 -500 332 -640 427 -640 398 -640 425 -640 478 -640 427 -427 640 -480 640 -500 334 -640 480 -612 612 -640 480 -640 427 -427 640 -427 640 -333 500 -640 480 -640 480 -500 375 -640 480 -333 500 -640 480 -375 500 -640 625 -500 333 -500 375 -500 375 -480 640 -640 480 -500 333 -640 371 -640 481 -480 640 -480 640 -640 480 -427 640 -427 640 -640 427 -612 612 -500 330 -430 500 -500 333 -640 480 -640 425 -480 640 -640 480 -640 405 -640 425 -640 427 -640 427 -640 467 -640 478 -427 640 -640 480 -333 500 -640 426 -500 375 -640 549 -480 640 -640 427 -640 427 -640 480 -640 480 -640 426 -640 640 -640 480 -427 640 -500 375 -480 640 -640 500 -640 425 -640 320 -480 640 -500 376 -640 480 -479 640 -640 504 -480 640 -480 640 -500 375 -640 640 -640 425 -640 480 -640 428 -426 640 -640 427 -640 480 -640 424 -640 480 -640 640 -640 360 -640 480 -640 640 -500 375 -500 384 -640 426 -500 334 -640 480 -640 480 -640 427 -400 300 -480 640 -640 427 -612 612 -640 429 -640 424 -640 557 -640 427 -427 640 -640 440 -640 480 -640 321 -640 427 -500 375 -640 426 -500 375 -480 640 -640 391 -500 375 -640 480 -480 640 -640 425 -640 427 -429 640 -640 427 -640 425 -640 428 -500 374 -640 425 -640 425 -640 477 -640 427 -375 500 -640 480 -640 457 -640 383 -480 640 -425 640 -426 640 -640 480 -427 640 -640 466 -640 427 -640 428 -640 542 -480 640 -640 480 -640 480 -640 480 -640 640 -480 640 -640 479 -480 640 -340 505 -500 500 -640 454 -500 375 -640 427 -480 640 -640 480 -480 640 -640 427 -333 500 -640 480 -408 640 -640 480 -640 427 -640 480 -480 640 -225 300 -640 424 -480 640 -375 500 -640 480 -640 426 -640 480 -427 640 -500 375 -640 463 -640 433 -427 640 -612 612 -612 612 -640 425 -640 480 -640 480 -640 512 -640 353 -500 375 -640 480 -500 375 -640 427 -480 640 -480 640 -640 480 -500 375 -640 640 -500 375 -640 481 -500 375 -424 640 -640 480 -640 480 -480 640 -640 396 -637 419 -640 480 -640 480 -640 427 -612 612 -427 640 -428 640 -331 500 -640 478 -640 429 -640 360 -500 375 -640 428 -640 480 -640 480 -453 500 -640 427 -640 425 -480 640 -385 308 -640 479 -612 612 -424 640 -640 423 -640 480 -640 427 -640 640 -640 428 -640 480 -640 427 -640 427 -640 359 -480 640 -640 480 -612 612 -640 428 -640 427 -640 480 -640 397 -500 375 -640 480 -640 480 -640 427 -500 332 -640 480 -640 431 -640 480 -640 480 -640 486 -500 375 -400 300 -480 640 -640 480 -640 427 -640 427 -640 427 -640 427 -640 480 -285 500 -480 640 -500 333 -640 416 -640 427 -640 427 -458 640 -640 480 -640 427 -500 375 -480 343 -500 500 -428 640 -640 491 -640 426 -640 480 -640 424 -480 640 -640 624 -612 612 -640 480 -640 480 -640 427 -640 480 -640 640 -500 314 -640 359 -640 457 -640 427 -480 640 -472 640 -600 600 -640 427 -640 421 -640 427 -640 480 -612 612 -500 333 -640 427 -640 480 -640 480 -640 640 -640 480 -640 480 -640 538 -640 414 -427 640 -640 480 -640 480 -640 427 -640 427 -640 492 -640 360 -640 457 -640 480 -640 427 -640 480 -500 342 -480 640 -424 640 -640 480 -640 480 -640 426 -640 640 -640 480 -480 640 -640 480 -640 425 -427 640 -500 375 -427 640 -427 640 -500 375 -640 480 -640 426 -480 640 -427 640 -640 424 -500 333 -640 517 -427 640 -529 640 -640 427 -440 640 -480 640 -480 640 -640 426 -640 427 -612 612 -640 480 -640 478 -640 480 -640 426 -640 295 -640 480 -640 480 -500 334 -500 375 -640 423 -480 640 -640 480 -480 640 -640 513 -640 427 -640 481 -640 393 -640 480 -427 640 -640 424 -427 640 -640 451 -640 383 -640 425 -427 640 -640 480 -480 640 -640 427 -500 333 -427 640 -640 463 -640 428 -640 480 -640 426 -640 449 -640 427 -428 640 -640 480 -333 500 -427 640 -640 426 -640 426 -640 427 -640 424 -640 427 -402 600 -640 482 -640 427 -500 333 -640 480 -640 480 -640 426 -640 457 -640 480 -640 423 -640 480 -640 426 -427 640 -640 480 -500 333 -640 426 -500 375 -640 480 -640 360 -427 640 -640 480 -500 375 -640 259 -640 480 -640 480 -360 640 -480 640 -483 640 -640 480 -640 465 -640 480 -640 480 -424 640 -500 335 -640 360 -640 429 -640 457 -360 640 -640 480 -640 427 -640 426 -640 428 -426 640 -466 640 -640 425 -500 375 -640 426 -640 426 -333 500 -640 455 -640 425 -640 494 -500 332 -640 428 -640 480 -640 480 -612 612 -640 427 -612 612 -383 640 -640 480 -640 427 -334 500 -640 640 -500 335 -640 480 -480 640 -640 480 -640 480 -640 427 -612 612 -640 418 -375 500 -640 480 -640 480 -640 480 -425 640 -640 480 -640 480 -500 333 -640 480 -640 480 -480 640 -640 480 -640 426 -640 478 -640 428 -500 333 -640 631 -640 480 -375 500 -640 426 -578 640 -640 473 -640 415 -427 640 -427 640 -479 640 -640 480 -426 640 -612 612 -500 375 -640 480 -640 489 -640 412 -640 480 -383 640 -640 360 -427 640 -500 333 -640 427 -640 480 -426 640 -640 425 -640 509 -640 383 -640 480 -640 427 -640 480 -640 427 -640 480 -640 480 -480 640 -449 640 -640 426 -500 333 -640 427 -640 360 -480 640 -640 425 -400 500 -640 427 -640 480 -640 428 -640 431 -640 480 -500 400 -640 480 -640 480 -640 480 -640 480 -640 426 -640 361 -480 640 -480 640 -640 480 -640 480 -640 469 -500 333 -500 332 -640 480 -346 640 -640 491 -427 640 -640 480 -640 435 -640 426 -640 427 -640 427 -500 375 -426 640 -480 640 -480 640 -329 500 -640 478 -213 320 -427 640 -640 426 -640 480 -640 426 -500 375 -640 425 -640 639 -309 640 -640 427 -640 640 -500 336 -640 640 -640 480 -640 480 -333 500 -640 480 -431 640 -640 480 -640 480 -480 640 -640 426 -640 427 -500 298 -640 426 -640 480 -375 500 -640 631 -640 427 -640 480 -640 480 -640 428 -634 354 -500 375 -428 640 -640 640 -640 480 -640 480 -640 513 -640 425 -640 426 -640 411 -640 478 -640 480 -640 426 -640 480 -640 480 -333 500 -500 284 -375 500 -640 383 -640 427 -640 353 -640 426 -500 380 -640 480 -640 480 -640 427 -640 429 -480 640 -640 427 -500 334 -213 320 -500 333 -640 640 -612 612 -480 640 -640 480 -640 290 -640 427 -640 640 -480 640 -640 480 -640 427 -469 640 -427 640 -500 451 -640 480 -500 366 -640 428 -640 427 -640 480 -612 612 -640 480 -500 375 -399 640 -500 332 -640 327 -500 396 -640 433 -640 427 -427 640 -640 480 -427 640 -427 640 -640 427 -480 640 -640 427 -640 480 -426 640 -480 640 -640 323 -640 457 -640 426 -640 478 -640 446 -426 640 -428 640 -640 480 -427 640 -640 432 -640 359 -640 482 -640 425 -314 188 -355 640 -640 427 -500 355 -500 338 -640 480 -429 640 -500 332 -640 360 -500 281 -640 427 -500 282 -640 428 -500 379 -640 480 -640 427 -640 426 -335 500 -640 456 -640 396 -640 424 -640 480 -640 427 -484 640 -427 640 -640 480 -640 428 -640 428 -640 432 -612 612 -332 500 -640 427 -480 640 -640 480 -366 500 -480 640 -640 508 -640 424 -640 425 -640 425 -480 640 -480 640 -500 375 -640 549 -640 427 -640 424 -500 375 -640 480 -640 470 -640 480 -640 480 -480 640 -640 427 -478 640 -640 360 -427 640 -640 440 -426 640 -640 426 -500 333 -612 612 -640 480 -503 640 -640 427 -480 640 -640 449 -500 479 -640 480 -480 640 -640 427 -640 426 -640 427 -640 425 -640 415 -640 427 -640 427 -640 428 -486 640 -640 486 -640 419 -640 424 -640 480 -640 369 -500 375 -427 640 -640 424 -500 347 -640 615 -640 480 -500 375 -500 375 -640 480 -640 480 -640 480 -427 640 -640 428 -500 333 -640 416 -500 375 -419 640 -640 425 -640 480 -480 640 -480 640 -424 640 -427 640 -640 426 -480 640 -640 480 -480 640 -640 425 -640 360 -640 427 -640 424 -640 480 -640 427 -640 480 -640 427 -640 480 -640 425 -640 428 -640 480 -640 480 -640 478 -640 480 -640 428 -612 612 -640 636 -500 333 -480 640 -640 437 -428 640 -612 612 -640 459 -640 480 -640 480 -640 480 -427 640 -640 480 -640 507 -640 480 -640 427 -640 427 -640 427 -640 480 -640 457 -640 480 -500 375 -640 383 -500 332 -640 480 -375 500 -640 427 -426 640 -640 480 -640 427 -640 480 -640 427 -375 500 -640 480 -480 640 -478 640 -375 500 -480 640 -500 375 -640 480 -427 640 -640 480 -640 427 -334 500 -500 375 -640 361 -511 640 -500 334 -640 480 -640 480 -640 640 -640 480 -500 375 -640 480 -640 480 -640 426 -640 425 -640 524 -479 640 -640 480 -640 480 -640 427 -480 640 -640 480 -640 428 -500 375 -606 640 -480 640 -640 426 -500 392 -640 451 -640 485 -427 640 -640 428 -640 457 -640 424 -640 480 -640 427 -493 640 -640 398 -500 333 -427 640 -640 427 -640 432 -640 480 -640 480 -640 427 -640 361 -640 425 -500 375 -640 438 -432 288 -612 612 -640 480 -500 376 -480 640 -640 479 -400 640 -640 426 -500 377 -375 500 -640 424 -443 640 -640 480 -640 427 -427 640 -480 640 -626 640 -640 550 -500 335 -550 640 -640 428 -452 640 -500 350 -499 500 -640 427 -569 640 -640 480 -640 425 -500 334 -640 420 -640 427 -640 441 -640 480 -500 500 -640 480 -640 598 -333 500 -480 640 -427 640 -640 480 -640 480 -612 612 -500 335 -640 480 -640 640 -600 450 -427 640 -640 400 -507 640 -640 480 -500 375 -500 332 -640 480 -510 640 -640 480 -640 429 -480 640 -500 333 -640 427 -640 346 -281 500 -640 480 -427 640 -640 454 -640 439 -375 500 -640 427 -448 336 -640 533 -640 424 -480 640 -640 480 -640 427 -640 425 -326 640 -640 532 -640 480 -640 480 -640 480 -640 383 -480 640 -640 480 -640 427 -640 427 -640 480 -480 640 -640 384 -480 640 -640 456 -500 375 -640 480 -640 428 -427 640 -640 541 -500 333 -640 436 -640 482 -640 427 -640 537 -640 426 -480 356 -640 427 -640 480 -640 427 -640 480 -480 640 -640 424 -640 427 -640 480 -640 427 -640 360 -500 375 -640 427 -560 600 -640 427 -533 640 -477 640 -640 424 -640 458 -640 427 -480 640 -640 428 -640 427 -399 500 -640 640 -480 640 -478 640 -640 480 -640 480 -640 427 -612 612 -480 640 -640 470 -640 425 -640 431 -425 640 -640 427 -640 427 -640 463 -427 640 -640 480 -640 427 -640 438 -480 640 -640 427 -640 462 -640 442 -640 480 -429 640 -640 427 -640 480 -500 375 -612 612 -640 640 -640 387 -427 640 -640 320 -640 427 -640 480 -640 427 -480 640 -640 429 -480 640 -480 640 -335 500 -640 425 -640 425 -500 375 -640 480 -640 640 -427 640 -640 480 -640 480 -640 480 -453 640 -640 478 -640 425 -500 379 -640 427 -640 480 -500 346 -640 547 -427 640 -399 600 -640 480 -640 327 -640 427 -640 427 -640 427 -640 427 -640 480 -640 427 -640 283 -640 480 -640 480 -435 640 -424 640 -600 400 -640 427 -640 354 -640 556 -612 612 -480 640 -640 480 -640 511 -640 480 -480 640 -640 428 -640 271 -640 480 -640 480 -640 425 -640 383 -428 640 -640 480 -480 640 -640 427 -315 352 -640 480 -426 640 -480 640 -640 427 -640 401 -640 480 -640 480 -640 426 -640 427 -640 427 -640 480 -640 480 -640 480 -640 480 -640 424 -640 513 -459 640 -427 640 -640 640 -640 427 -640 478 -640 416 -640 427 -480 640 -640 423 -480 640 -640 466 -640 544 -640 437 -375 500 -640 492 -375 500 -640 424 -640 370 -640 513 -640 429 -427 640 -640 427 -426 640 -428 640 -640 426 -640 640 -500 384 -627 640 -640 427 -640 427 -640 427 -428 640 -640 512 -640 480 -640 427 -640 480 -500 376 -640 428 -640 384 -480 640 -640 478 -640 480 -640 427 -426 640 -563 640 -640 480 -640 430 -500 333 -640 633 -640 426 -426 640 -640 427 -480 640 -640 638 -640 400 -640 480 -640 480 -640 427 -640 424 -640 427 -640 427 -640 480 -480 640 -640 450 -612 612 -640 483 -640 480 -640 480 -640 427 -450 412 -480 640 -640 443 -640 480 -640 480 -640 434 -640 425 -640 427 -640 360 -640 427 -480 640 -640 378 -640 480 -480 640 -640 480 -640 480 -640 426 -640 480 -640 384 -640 427 -640 480 -640 427 -640 480 -640 360 -640 532 -640 360 -640 556 -640 427 -640 480 -528 640 -640 480 -500 333 -640 427 -426 640 -640 425 -640 428 -425 640 -640 480 -617 640 -418 500 -640 480 -427 640 -640 457 -427 640 -640 480 -374 500 -500 400 -640 480 -484 640 -640 480 -640 431 -640 426 -640 428 -500 375 -640 480 -640 429 -640 427 -640 427 -640 427 -640 427 -480 640 -436 640 -500 333 -479 640 -640 480 -612 612 -640 480 -640 427 -480 640 -640 427 -500 481 -640 451 -640 336 -640 335 -640 480 -500 375 -640 427 -640 480 -640 428 -640 428 -640 501 -640 427 -640 480 -480 640 -427 640 -640 427 -640 480 -640 427 -640 395 -426 640 -427 640 -640 480 -640 426 -640 480 -480 640 -640 426 -640 383 -640 480 -609 640 -640 387 -448 336 -640 457 -640 426 -375 500 -423 640 -480 640 -500 334 -375 500 -640 353 -640 480 -375 500 -640 405 -500 333 -640 480 -427 640 -506 373 -500 375 -640 480 -500 375 -640 480 -640 413 -640 426 -640 427 -640 480 -640 427 -640 480 -640 437 -640 350 -480 640 -640 426 -640 513 -640 425 -480 640 -500 375 -640 426 -640 493 -640 425 -480 640 -500 493 -640 427 -640 480 -483 640 -640 480 -640 480 -500 375 -480 640 -640 378 -500 335 -500 360 -640 543 -640 480 -333 500 -640 480 -640 428 -640 480 -333 500 -640 427 -640 367 -640 427 -640 480 -640 480 -640 480 -640 458 -426 640 -640 480 -480 640 -640 480 -640 480 -640 427 -640 436 -640 451 -500 375 -640 480 -640 427 -640 480 -640 394 -640 480 -500 332 -640 439 -480 640 -500 400 -640 519 -640 480 -640 478 -640 456 -640 428 -640 480 -427 640 -500 375 -250 640 -640 480 -480 640 -640 512 -640 480 -288 352 -428 640 -480 640 -375 500 -640 480 -640 424 -640 480 -640 462 -640 480 -640 428 -640 481 -500 375 -640 480 -640 477 -640 427 -496 640 -513 640 -640 427 -640 371 -640 428 -383 640 -640 480 -375 500 -427 640 -640 427 -480 640 -427 640 -640 480 -640 481 -640 480 -640 425 -640 480 -640 458 -640 427 -640 480 -640 480 -640 480 -640 405 -640 480 -640 428 -320 240 -640 480 -479 640 -640 480 -640 480 -640 428 -480 640 -640 427 -460 640 -612 612 -640 439 -640 480 -612 612 -480 640 -640 425 -640 427 -640 480 -640 480 -500 375 -427 640 -380 285 -375 500 -640 427 -640 480 -640 426 -640 427 -640 480 -640 480 -640 490 -500 329 -612 612 -640 480 -425 640 -483 640 -500 333 -640 427 -640 427 -640 480 -640 479 -640 427 -480 640 -612 612 -433 640 -640 428 -479 640 -520 480 -427 640 -640 517 -640 428 -604 640 -500 375 -640 480 -500 333 -640 480 -427 640 -640 480 -640 478 -375 500 -640 427 -640 427 -425 640 -427 640 -426 640 -428 640 -640 427 -640 444 -436 640 -480 640 -551 640 -640 478 -500 327 -640 480 -480 640 -480 640 -640 427 -640 480 -500 377 -326 500 -640 480 -480 640 -640 424 -427 640 -640 480 -640 480 -424 640 -640 480 -640 427 -640 640 -640 429 -640 480 -480 640 -427 640 -640 427 -640 480 -640 480 -480 640 -640 359 -423 640 -640 427 -640 429 -640 480 -640 480 -500 375 -640 427 -453 640 -640 480 -640 427 -640 480 -500 375 -480 640 -640 577 -500 375 -500 332 -640 427 -640 480 -640 480 -426 640 -640 480 -622 640 -640 516 -426 640 -427 640 -640 428 -480 640 -640 359 -640 429 -640 426 -640 573 -480 640 -640 428 -640 360 -288 384 -480 640 -427 640 -500 375 -427 640 -640 480 -640 426 -640 427 -640 480 -500 333 -640 427 -640 480 -640 424 -640 424 -424 640 -640 426 -640 529 -640 424 -640 427 -640 480 -500 479 -500 332 -612 612 -427 640 -500 375 -640 480 -640 480 -375 500 -600 450 -640 480 -375 500 -480 640 -640 480 -500 375 -640 366 -640 640 -334 500 -640 426 -375 500 -640 480 -640 360 -500 375 -640 425 -482 640 -375 500 -640 480 -481 640 -640 424 -640 426 -640 480 -375 500 -427 640 -640 478 -640 594 -640 480 -640 372 -640 493 -375 500 -640 480 -640 480 -427 640 -640 480 -480 640 -450 469 -640 427 -640 480 -640 480 -640 480 -568 640 -480 640 -480 640 -480 640 -368 640 -640 429 -640 427 -500 333 -612 612 -640 480 -640 429 -500 375 -640 427 -640 428 -640 427 -640 425 -500 335 -500 375 -500 332 -640 425 -500 478 -640 427 -640 427 -427 640 -640 428 -480 640 -428 640 -640 480 -640 596 -640 427 -640 480 -640 427 -640 480 -640 480 -480 640 -640 418 -640 480 -382 500 -640 423 -500 425 -500 375 -640 425 -640 521 -640 427 -360 640 -640 480 -640 427 -640 484 -640 426 -640 481 -640 424 -426 640 -480 640 -427 640 -640 480 -500 343 -640 471 -623 640 -480 640 -640 480 -431 640 -640 503 -640 480 -640 349 -640 426 -640 480 -640 424 -427 640 -640 480 -640 427 -640 499 -640 480 -500 375 -640 480 -640 458 -333 500 -640 384 -640 426 -640 427 -640 512 -640 480 -640 480 -480 640 -640 428 -640 483 -640 425 -640 427 -640 480 -427 640 -640 480 -640 468 -500 336 -480 640 -640 425 -480 640 -640 509 -640 427 -640 428 -640 528 -640 480 -640 480 -480 640 -640 512 -500 375 -640 480 -640 480 -640 480 -480 640 -500 375 -480 640 -480 640 -640 480 -640 320 -640 425 -333 500 -612 612 -403 500 -640 414 -640 480 -640 427 -480 640 -640 428 -640 428 -640 426 -327 293 -640 579 -640 640 -500 333 -640 427 -480 640 -427 640 -640 478 -640 480 -640 426 -640 480 -427 640 -388 640 -640 480 -568 640 -640 424 -640 415 -500 375 -500 375 -640 427 -640 426 -320 500 -400 300 -492 640 -427 640 -640 427 -427 640 -640 480 -500 337 -480 640 -428 640 -480 640 -640 480 -480 640 -640 428 -640 461 -640 480 -640 480 -640 496 -427 640 -640 480 -500 321 -640 480 -640 427 -360 640 -480 640 -640 448 -640 480 -640 438 -640 427 -333 500 -640 427 -500 430 -640 425 -640 480 -640 457 -640 424 -640 480 -640 427 -640 480 -640 428 -640 484 -640 383 -520 363 -640 480 -500 375 -612 612 -640 427 -500 333 -500 311 -480 640 -640 480 -612 612 -500 375 -640 426 -640 480 -480 640 -375 500 -419 640 -640 454 -375 500 -640 426 -640 426 -480 640 -640 427 -640 480 -640 360 -640 512 -480 484 -640 456 -640 426 -640 480 -480 640 -640 483 -640 427 -640 425 -640 480 -640 480 -640 383 -640 480 -640 480 -640 426 -640 480 -640 427 -640 427 -480 640 -424 640 -640 480 -640 480 -640 480 -640 480 -640 426 -640 509 -640 640 -640 426 -480 640 -640 426 -480 640 -640 480 -640 428 -640 428 -480 640 -640 427 -640 480 -640 427 -640 429 -424 640 -640 480 -640 480 -640 427 -640 480 -429 640 -640 539 -640 479 -451 640 -640 480 -640 427 -640 480 -640 480 -640 465 -640 358 -640 428 -640 427 -500 391 -640 629 -331 500 -640 424 -500 333 -408 640 -640 480 -640 424 -640 410 -612 612 -500 375 -500 375 -480 640 -427 640 -480 640 -640 480 -640 427 -500 375 -640 480 -534 640 -640 424 -640 480 -640 480 -640 320 -427 640 -640 480 -500 375 -640 428 -480 640 -500 375 -320 240 -427 640 -334 500 -500 330 -517 640 -640 480 -640 480 -640 480 -640 426 -500 375 -640 425 -640 495 -640 480 -640 480 -640 525 -640 428 -500 375 -640 484 -640 481 -640 480 -640 433 -500 370 -640 427 -640 427 -640 431 -640 429 -500 416 -640 524 -465 640 -640 480 -480 640 -416 500 -612 612 -495 640 -480 640 -640 427 -478 640 -448 287 -612 612 -480 640 -640 480 -640 478 -640 425 -640 426 -640 424 -500 375 -640 480 -446 640 -600 450 -640 398 -428 640 -640 480 -640 480 -428 640 -428 640 -640 426 -640 427 -640 480 -640 480 -480 640 -500 375 -640 434 -640 427 -640 480 -640 427 -500 375 -640 480 -640 480 -483 640 -427 640 -427 640 -640 480 -640 439 -505 640 -375 500 -461 640 -480 640 -640 480 -640 480 -480 640 -480 640 -375 500 -640 480 -640 512 -640 424 -500 375 -500 375 -359 640 -640 462 -640 427 -640 427 -640 426 -379 500 -451 640 -419 640 -640 427 -640 480 -500 205 -500 333 -640 480 -480 640 -640 427 -375 500 -640 480 -640 427 -640 480 -640 425 -500 375 -640 431 -640 484 -640 427 -480 640 -640 427 -471 640 -640 480 -640 488 -640 480 -425 640 -640 427 -362 480 -640 481 -428 640 -480 640 -640 480 -456 640 -640 358 -500 333 -640 427 -640 516 -640 480 -375 500 -640 427 -388 640 -640 427 -640 424 -480 640 -640 570 -640 427 -500 333 -640 427 -640 427 -426 640 -640 480 -640 480 -640 640 -640 480 -334 500 -640 426 -500 375 -640 424 -640 425 -640 480 -500 336 -640 468 -640 349 -640 480 -640 421 -480 640 -375 500 -640 480 -612 612 -640 428 -640 480 -640 478 -640 427 -640 427 -480 640 -640 426 -640 383 -480 640 -640 491 -640 426 -640 480 -640 480 -500 333 -427 640 -640 481 -640 427 -640 426 -640 428 -640 419 -640 548 -640 480 -640 431 -640 631 -375 500 -640 426 -481 640 -640 427 -640 426 -333 500 -640 428 -532 500 -375 500 -640 314 -480 640 -640 480 -640 480 -500 341 -640 425 -640 480 -640 478 -640 427 -500 326 -640 427 -640 480 -640 478 -640 427 -640 447 -541 640 -640 427 -640 427 -640 416 -640 426 -640 427 -640 470 -480 640 -640 425 -640 480 -640 463 -640 427 -480 640 -612 612 -640 480 -640 480 -500 375 -480 640 -640 480 -640 427 -640 427 -500 333 -478 640 -640 425 -426 640 -640 458 -640 360 -640 425 -332 500 -640 425 -640 427 -480 287 -480 640 -480 640 -640 480 -500 376 -500 335 -500 420 -640 480 -640 425 -640 426 -515 640 -640 427 -500 500 -640 426 -481 640 -375 500 -500 375 -640 278 -640 428 -640 403 -640 426 -640 445 -640 492 -427 640 -480 640 -640 426 -640 480 -640 480 -640 581 -640 360 -640 427 -640 477 -612 612 -500 333 -640 426 -640 480 -640 480 -640 480 -500 375 -425 640 -480 640 -640 480 -550 367 -480 640 -640 480 -640 427 -640 425 -640 425 -640 425 -640 480 -640 427 -640 360 -640 419 -480 640 -640 427 -640 424 -640 480 -640 379 -640 413 -640 425 -640 427 -612 612 -424 640 -640 425 -640 411 -640 427 -640 426 -480 640 -480 640 -640 480 -640 426 -640 640 -640 424 -640 480 -640 426 -640 447 -427 640 -377 500 -537 381 -640 427 -500 462 -640 386 -500 332 -640 425 -640 513 -640 441 -640 434 -640 427 -612 612 -640 427 -640 446 -640 424 -640 426 -640 422 -640 538 -640 426 -640 480 -640 640 -640 427 -640 427 -640 426 -640 428 -419 640 -640 427 -637 640 -640 427 -500 500 -640 445 -500 375 -640 456 -640 427 -640 480 -640 480 -500 375 -488 432 -457 640 -500 334 -640 426 -640 427 -640 428 -640 480 -640 480 -640 427 -640 427 -640 480 -640 478 -640 478 -324 487 -640 480 -640 427 -333 500 -640 424 -640 480 -426 640 -428 640 -457 640 -640 483 -640 429 -478 640 -640 427 -640 480 -640 480 -640 480 -500 375 -480 640 -640 480 -480 640 -640 442 -412 640 -640 427 -640 405 -640 425 -640 491 -612 612 -500 333 -640 427 -640 480 -427 640 -500 276 -640 457 -640 480 -480 640 -640 427 -640 480 -640 480 -640 427 -640 428 -500 333 -427 640 -640 480 -640 480 -640 480 -640 359 -640 427 -640 532 -640 428 -640 426 -640 427 -375 500 -640 480 -640 427 -425 640 -640 446 -500 349 -640 427 -640 470 -640 421 -640 427 -640 426 -640 428 -640 480 -640 426 -640 480 -640 427 -640 425 -640 426 -640 425 -291 461 -640 480 -640 435 -480 640 -640 426 -640 425 -500 375 -480 640 -640 381 -500 375 -640 480 -335 500 -640 427 -333 500 -601 640 -640 428 -640 426 -480 640 -640 477 -640 240 -640 427 -640 424 -640 429 -480 640 -500 402 -480 640 -640 480 -480 640 -640 214 -640 427 -375 500 -640 480 -426 640 -640 480 -640 427 -500 242 -500 375 -640 569 -427 640 -500 333 -489 640 -500 375 -611 640 -640 438 -480 640 -529 640 -640 426 -640 480 -480 640 -500 333 -640 480 -640 454 -640 478 -500 376 -500 500 -500 415 -640 413 -515 640 -427 640 -640 427 -480 640 -468 640 -640 480 -500 359 -640 480 -640 480 -640 490 -640 427 -640 480 -640 480 -640 427 -375 500 -640 480 -427 640 -640 480 -640 480 -427 640 -333 500 -640 426 -640 425 -640 427 -640 480 -640 517 -375 500 -480 640 -640 360 -640 425 -640 426 -640 433 -640 480 -640 426 -612 612 -640 426 -640 427 -480 640 -640 427 -640 474 -640 426 -640 481 -500 374 -480 640 -640 427 -427 640 -500 336 -640 473 -640 383 -640 423 -640 480 -640 428 -500 375 -536 640 -640 427 -640 480 -640 427 -612 612 -640 480 -640 427 -640 480 -500 375 -640 461 -640 360 -425 640 -640 480 -426 640 -640 450 -640 428 -333 500 -640 427 -640 396 -640 477 -640 428 -640 480 -640 635 -640 480 -640 480 -640 480 -640 401 -640 480 -640 427 -640 426 -640 427 -640 427 -640 428 -581 640 -640 427 -427 640 -640 428 -640 480 -640 480 -640 478 -480 640 -640 480 -640 427 -640 427 -612 612 -640 576 -424 640 -612 612 -500 375 -640 480 -640 381 -640 434 -500 437 -640 456 -640 425 -640 427 -427 640 -640 429 -640 480 -640 478 -448 640 -640 480 -640 428 -640 480 -480 640 -640 425 -640 427 -640 429 -640 418 -640 360 -556 640 -269 451 -450 338 -328 500 -333 500 -480 640 -640 428 -640 380 -640 480 -640 428 -640 525 -640 427 -640 427 -640 480 -480 640 -640 479 -640 426 -640 425 -480 640 -640 426 -640 480 -612 612 -548 640 -612 612 -640 480 -640 411 -640 426 -640 480 -640 427 -640 438 -640 478 -640 427 -640 428 -640 427 -640 419 -509 640 -640 334 -640 427 -640 480 -640 426 -640 427 -480 640 -640 426 -513 640 -500 374 -640 501 -640 346 -640 360 -640 480 -500 400 -500 388 -640 480 -480 640 -500 375 -640 427 -500 400 -640 424 -491 500 -640 428 -640 480 -640 427 -426 640 -427 640 -640 451 -375 500 -640 480 -500 333 -367 490 -500 375 -640 427 -480 640 -640 480 -640 427 -640 480 -500 399 -640 480 -640 470 -640 427 -375 500 -640 426 -640 482 -640 480 -640 417 -462 640 -640 428 -640 480 -640 427 -612 612 -640 640 -640 362 -480 640 -640 427 -640 480 -640 426 -640 427 -640 428 -640 426 -640 480 -500 375 -640 480 -640 441 -640 451 -640 478 -640 480 -640 384 -427 640 -640 480 -500 459 -640 370 -426 640 -640 445 -640 480 -640 553 -640 383 -640 428 -640 427 -640 424 -427 640 -640 480 -640 427 -640 360 -640 428 -612 612 -640 480 -640 480 -640 425 -427 640 -640 426 -500 273 -640 427 -480 640 -500 332 -640 480 -640 480 -640 427 -429 640 -640 480 -640 424 -333 500 -640 427 -640 431 -500 375 -640 427 -478 640 -424 640 -396 640 -640 425 -640 480 -425 640 -640 480 -640 427 -640 426 -640 427 -500 422 -640 455 -640 427 -479 640 -418 500 -333 500 -640 480 -640 480 -640 426 -640 426 -640 425 -500 334 -480 640 -502 640 -500 375 -640 551 -640 361 -500 333 -424 640 -640 360 -640 427 -640 427 -341 500 -375 500 -640 512 -640 424 -640 427 -427 640 -640 480 -640 427 -640 424 -640 480 -640 480 -640 480 -640 426 -441 640 -640 480 -640 480 -640 420 -640 427 -640 427 -480 640 -640 426 -640 427 -640 379 -640 508 -640 480 -480 640 -640 358 -640 480 -640 478 -400 600 -427 640 -375 500 -640 439 -640 427 -640 426 -640 425 -640 480 -640 480 -640 480 -478 640 -640 480 -640 480 -480 640 -440 640 -640 229 -640 425 -640 428 -640 480 -612 612 -640 426 -480 640 -640 457 -640 480 -640 426 -640 427 -640 426 -640 400 -640 631 -640 427 -538 640 -640 480 -640 426 -640 427 -640 427 -640 480 -640 426 -640 480 -325 500 -640 427 -640 287 -480 360 -500 500 -640 482 -612 612 -640 425 -640 480 -640 426 -640 427 -640 480 -428 640 -640 424 -500 375 -480 640 -612 612 -480 640 -640 480 -640 427 -480 640 -410 500 -480 640 -640 360 -640 427 -640 401 -640 427 -640 426 -640 421 -500 375 -640 424 -640 427 -427 640 -640 480 -640 426 -429 640 -640 480 -375 500 -640 478 -427 640 -640 480 -480 640 -640 480 -640 480 -640 426 -375 500 -640 422 -640 426 -500 375 -640 480 -640 480 -640 480 -640 428 -513 640 -640 427 -640 424 -640 480 -640 480 -640 640 -640 512 -640 480 -640 506 -500 375 -500 375 -480 640 -640 480 -480 640 -500 329 -640 495 -369 500 -605 640 -500 375 -425 640 -640 480 -480 640 -640 428 -500 375 -640 427 -640 427 -640 427 -640 480 -640 608 -640 360 -640 480 -640 480 -640 480 -640 480 -640 444 -640 427 -640 421 -640 442 -427 640 -612 612 -640 480 -640 360 -480 640 -375 500 -480 640 -640 426 -640 498 -640 480 -640 427 -640 426 -640 480 -500 377 -160 120 -640 428 -500 333 -640 410 -480 640 -640 425 -640 426 -640 424 -640 426 -465 640 -640 480 -640 427 -500 375 -480 640 -640 480 -640 428 -640 480 -500 334 -640 426 -640 427 -640 480 -500 333 -640 429 -426 640 -640 426 -500 375 -500 281 -640 639 -500 313 -278 240 -640 427 -640 480 -640 440 -640 480 -640 480 -640 480 -426 640 -640 480 -640 426 -480 640 -640 427 -480 640 -426 640 -640 360 -640 479 -640 424 -640 427 -431 640 -640 427 -640 258 -640 480 -640 426 -480 640 -640 427 -640 480 -640 480 -426 640 -428 640 -640 480 -640 383 -640 425 -640 426 -640 480 -640 480 -425 640 -640 499 -480 640 -640 426 -640 379 -480 640 -640 427 -640 427 -640 427 -640 427 -640 444 -640 480 -500 500 -640 480 -640 480 -640 480 -640 480 -427 640 -640 593 -500 333 -640 427 -640 480 -640 427 -640 608 -612 612 -640 480 -640 480 -480 640 -640 480 -640 480 -240 360 -640 427 -640 480 -640 411 -640 428 -427 640 -333 500 -640 480 -500 375 -500 425 -640 480 -640 480 -612 612 -427 640 -500 453 -640 426 -640 480 -640 427 -640 479 -640 480 -640 351 -640 480 -640 420 -640 428 -640 427 -500 375 -640 446 -640 480 -640 424 -420 640 -429 640 -640 448 -640 426 -500 321 -375 500 -640 480 -640 470 -640 427 -375 500 -640 480 -500 375 -640 461 -360 640 -640 427 -428 640 -640 480 -640 374 -640 480 -640 427 -640 427 -640 427 -500 375 -640 432 -640 480 -247 500 -640 145 -640 427 -480 640 -640 427 -640 429 -640 568 -500 334 -500 375 -640 500 -640 480 -640 512 -640 480 -612 612 -640 426 -640 426 -640 427 -640 394 -640 480 -480 640 -480 640 -640 427 -640 406 -480 640 -640 426 -640 511 -640 428 -500 333 -500 363 -640 427 -640 427 -488 640 -640 480 -640 427 -640 427 -640 511 -500 375 -427 640 -640 427 -640 464 -640 480 -425 640 -640 464 -427 640 -640 480 -480 640 -640 480 -640 480 -640 480 -640 480 -640 425 -500 375 -640 418 -640 427 -480 640 -273 500 -312 462 -640 396 -640 428 -427 640 -250 333 -640 424 -511 640 -640 425 -640 428 -500 375 -640 480 -375 500 -500 375 -640 444 -640 480 -640 427 -396 640 -400 300 -640 480 -640 512 -582 640 -640 480 -640 480 -640 427 -500 375 -640 425 -427 640 -640 428 -640 480 -500 375 -640 509 -640 427 -640 425 -597 640 -612 612 -640 561 -640 480 -640 480 -640 405 -612 612 -480 640 -640 480 -480 640 -640 480 -640 425 -640 427 -500 375 -640 371 -640 478 -640 569 -500 375 -640 419 -640 426 -640 480 -424 640 -480 640 -640 419 -640 579 -640 512 -640 360 -612 612 -640 427 -640 426 -500 318 -640 480 -480 640 -500 385 -640 480 -640 480 -640 512 -640 480 -640 480 -640 539 -480 640 -640 640 -640 480 -640 360 -640 427 -500 375 -600 400 -427 640 -640 480 -640 480 -640 401 -640 427 -640 427 -640 480 -481 640 -306 500 -640 426 -640 433 -640 449 -640 480 -640 480 -581 640 -640 480 -640 478 -612 612 -560 640 -480 640 -640 480 -427 640 -640 480 -640 400 -375 500 -640 427 -640 480 -640 374 -334 500 -612 612 -500 334 -640 544 -640 480 -640 480 -640 471 -640 400 -612 612 -640 427 -640 479 -640 480 -500 375 -640 480 -612 612 -640 533 -640 427 -640 423 -356 500 -640 480 -500 371 -640 480 -640 480 -640 426 -640 427 -640 425 -640 425 -640 480 -640 480 -640 480 -640 424 -370 640 -640 425 -375 500 -640 145 -640 361 -500 332 -500 375 -640 335 -640 397 -640 521 -500 363 -479 640 -500 375 -640 480 -500 345 -640 480 -640 480 -640 480 -500 364 -640 427 -612 612 -480 640 -640 427 -640 483 -640 480 -640 427 -500 360 -640 427 -640 469 -480 640 -640 480 -640 427 -640 480 -640 427 -640 426 -480 640 -640 480 -640 404 -640 405 -640 426 -640 427 -640 228 -500 375 -426 640 -640 423 -640 428 -640 427 -640 361 -640 480 -433 640 -464 640 -640 480 -640 424 -433 500 -640 480 -640 428 -640 480 -640 473 -640 480 -500 331 -640 480 -640 360 -640 480 -640 480 -640 427 -375 500 -442 640 -450 600 -640 427 -480 640 -500 386 -640 480 -640 424 -640 457 -640 480 -427 640 -427 640 -363 640 -640 480 -640 426 -640 448 -481 640 -427 640 -480 640 -640 480 -640 427 -640 480 -640 425 -640 427 -500 375 -640 480 -640 425 -640 427 -500 375 -640 480 -480 640 -500 333 -640 427 -480 640 -640 480 -450 200 -640 480 -640 427 -480 640 -640 480 -427 640 -480 640 -640 459 -426 640 -640 427 -500 344 -640 427 -640 360 -500 333 -500 375 -640 523 -640 480 -640 424 -640 480 -640 439 -427 640 -640 480 -640 427 -432 308 -640 480 -640 480 -427 640 -499 640 -612 612 -640 480 -640 427 -640 480 -640 480 -426 640 -640 480 -640 426 -640 480 -427 640 -500 375 -640 427 -480 640 -640 458 -640 434 -500 375 -640 427 -640 429 -640 480 -640 480 -640 480 -640 428 -640 480 -640 427 -640 430 -622 640 -409 640 -640 480 -640 640 -640 423 -640 360 -640 430 -640 427 -640 563 -640 427 -640 423 -480 640 -640 480 -478 640 -612 612 -427 640 -640 427 -640 320 -640 427 -500 375 -640 427 -427 640 -640 478 -640 425 -500 375 -640 427 -640 478 -640 427 -375 500 -480 640 -480 640 -640 480 -640 640 -427 640 -640 480 -428 640 -640 405 -640 426 -640 480 -640 427 -640 491 -640 427 -640 480 -612 612 -640 427 -480 640 -640 427 -640 480 -640 427 -480 640 -376 500 -640 480 -640 480 -640 480 -480 640 -640 360 -640 480 -640 480 -427 640 -500 375 -640 466 -640 569 -640 385 -427 640 -640 428 -640 439 -500 350 -375 500 -500 375 -500 375 -625 640 -640 480 -500 332 -640 480 -333 500 -480 640 -640 427 -640 427 -640 426 -480 640 -481 640 -500 438 -480 640 -640 359 -640 418 -426 640 -500 375 -480 640 -480 640 -640 427 -640 480 -640 427 -463 500 -640 425 -426 640 -640 427 -288 216 -640 480 -640 480 -640 640 -640 427 -500 334 -640 480 -640 480 -640 480 -640 480 -640 408 -483 640 -640 428 -640 402 -640 425 -336 500 -640 426 -428 640 -640 330 -480 640 -640 425 -480 640 -640 426 -478 640 -640 449 -640 427 -500 334 -640 478 -500 375 -290 379 -640 427 -640 480 -640 480 -640 480 -640 369 -640 427 -500 321 -426 640 -640 427 -640 480 -640 480 -640 428 -500 375 -424 640 -612 612 -640 427 -500 266 -640 400 -480 640 -640 640 -640 480 -640 480 -500 375 -534 640 -640 427 -640 480 -427 640 -640 427 -640 480 -640 427 -640 360 -425 640 -480 640 -640 480 -640 480 -640 428 -427 640 -425 640 -433 640 -640 480 -640 480 -640 451 -375 500 -640 407 -640 480 -640 480 -416 640 -640 427 -480 640 -640 383 -640 614 -640 554 -500 333 -459 640 -640 427 -640 428 -640 428 -373 640 -625 640 -640 480 -640 480 -500 375 -500 375 -640 480 -528 640 -640 427 -640 480 -375 500 -640 426 -640 427 -640 427 -419 640 -640 427 -640 480 -640 480 -640 396 -640 480 -500 374 -640 428 -640 373 -640 202 -640 480 -640 425 -640 427 -640 424 -640 360 -640 427 -640 480 -640 480 -640 480 -640 427 -500 332 -640 480 -640 480 -480 640 -640 480 -640 480 -640 558 -640 480 -640 480 -426 640 -640 427 -612 612 -640 359 -480 640 -640 424 -640 480 -480 640 -612 612 -640 480 -640 480 -640 480 -500 333 -500 375 -640 425 -640 428 -640 439 -640 427 -640 360 -383 640 -640 427 -640 480 -640 322 -480 360 -426 640 -640 428 -480 640 -597 640 -640 428 -480 640 -640 446 -640 427 -640 480 -480 640 -640 527 -640 427 -640 480 -640 426 -604 640 -360 640 -360 640 -640 425 -640 480 -640 640 -640 388 -480 640 -640 427 -640 426 -500 375 -503 640 -640 427 -640 426 -640 480 -640 427 -640 499 -640 480 -640 428 -640 480 -640 425 -640 427 -640 427 -612 612 -480 640 -480 640 -640 427 -640 427 -490 640 -640 454 -640 480 -640 424 -640 428 -640 480 -640 480 -640 431 -640 478 -640 431 -427 640 -640 426 -640 360 -640 480 -640 480 -640 480 -640 480 -640 460 -490 640 -640 427 -640 480 -640 428 -640 480 -454 640 -640 403 -426 640 -640 320 -640 427 -640 393 -640 427 -612 612 -640 480 -640 480 -500 375 -620 463 -427 640 -612 612 -640 480 -640 640 -427 640 -480 640 -500 375 -446 335 -409 307 -640 426 -640 495 -640 480 -640 427 -640 480 -640 218 -640 425 -512 640 -640 480 -480 640 -489 640 -432 324 -640 424 -428 640 -640 427 -640 427 -640 427 -640 427 -500 347 -427 640 -640 427 -640 427 -640 426 -640 568 -463 640 -480 640 -640 271 -500 324 -480 640 -640 480 -640 375 -640 457 -480 640 -640 427 -640 500 -500 500 -640 480 -640 427 -640 428 -640 480 -640 427 -640 482 -640 480 -480 640 -333 500 -640 424 -427 640 -478 640 -640 424 -427 640 -640 424 -640 480 -457 640 -452 640 -640 425 -500 400 -500 375 -640 442 -225 300 -500 333 -639 640 -640 640 -640 478 -640 480 -640 480 -375 500 -629 640 -500 357 -640 427 -640 383 -500 375 -450 640 -640 426 -640 423 -426 640 -640 426 -426 640 -640 480 -640 480 -640 436 -500 375 -640 427 -640 480 -640 427 -640 480 -640 480 -640 480 -480 640 -480 640 -375 500 -480 640 -640 480 -640 433 -640 427 -433 640 -640 429 -640 480 -640 427 -500 333 -514 640 -640 480 -640 490 -640 427 -640 296 -457 640 -640 518 -640 480 -640 480 -350 232 -612 612 -640 425 -640 427 -640 480 -640 480 -640 383 -500 335 -640 424 -640 427 -640 480 -640 426 -431 640 -500 377 -640 512 -640 427 -426 640 -640 425 -640 480 -640 426 -640 427 -640 480 -500 333 -427 640 -640 429 -640 346 -640 427 -640 427 -640 427 -640 481 -640 480 -496 640 -427 640 -640 484 -639 640 -500 375 -640 427 -427 640 -640 480 -425 640 -640 284 -500 422 -640 512 -480 640 -375 500 -640 533 -640 426 -480 640 -640 413 -640 359 -640 513 -480 640 -640 366 -640 490 -640 480 -501 640 -640 424 -640 427 -640 425 -640 427 -500 308 -640 427 -500 333 -640 480 -640 427 -640 480 -640 480 -640 427 -640 428 -640 427 -640 480 -480 640 -640 427 -375 500 -640 432 -640 480 -640 427 -428 640 -640 427 -640 430 -640 480 -375 500 -640 480 -480 640 -640 640 -427 640 -640 480 -500 381 -406 640 -640 441 -333 500 -640 546 -640 480 -640 480 -500 375 -640 535 -640 426 -640 503 -640 434 -640 480 -546 366 -600 400 -640 429 -640 481 -640 480 -333 500 -640 427 -427 640 -427 640 -480 640 -640 439 -500 375 -553 640 -640 480 -639 640 -640 425 -640 480 -640 427 -640 480 -640 427 -500 333 -640 424 -512 640 -640 426 -640 359 -436 640 -640 428 -640 428 -640 426 -426 640 -480 640 -640 427 -640 427 -612 612 -640 380 -640 427 -640 427 -480 640 -640 480 -612 612 -427 640 -272 480 -640 166 -612 612 -427 640 -640 426 -640 480 -419 640 -640 426 -640 480 -640 427 -640 451 -640 427 -640 427 -640 427 -427 640 -500 375 -640 343 -640 428 -500 375 -640 427 -640 489 -640 373 -640 435 -500 375 -460 640 -640 428 -640 428 -640 411 -640 400 -288 432 -640 427 -640 480 -500 375 -640 426 -640 480 -333 500 -640 427 -500 331 -640 461 -480 640 -500 332 -640 330 -640 533 -427 640 -411 500 -492 640 -640 480 -500 419 -640 427 -359 640 -640 422 -213 318 -640 359 -640 480 -640 427 -500 500 -375 500 -640 480 -640 426 -640 428 -640 360 -640 402 -640 457 -500 364 -640 479 -640 480 -640 478 -457 640 -640 480 -640 480 -640 427 -640 428 -640 425 -500 375 -640 457 -640 478 -500 333 -357 500 -640 428 -418 500 -640 427 -480 640 -500 375 -640 426 -426 640 -640 458 -500 375 -500 375 -640 426 -640 398 -640 427 -640 427 -640 427 -426 640 -640 427 -640 480 -640 427 -640 360 -640 426 -640 480 -640 425 -640 426 -640 428 -640 360 -363 640 -640 480 -640 480 -640 480 -500 377 -428 640 -480 640 -640 481 -640 427 -428 640 -480 640 -640 427 -640 426 -480 640 -427 640 -640 466 -640 425 -640 423 -640 429 -640 480 -500 375 -424 640 -500 333 -500 333 -640 424 -612 612 -480 640 -425 640 -427 640 -640 344 -640 426 -640 427 -640 480 -640 480 -480 640 -640 480 -640 427 -640 480 -640 426 -640 427 -640 480 -640 484 -640 407 -640 448 -640 427 -640 427 -640 360 -640 427 -640 448 -640 480 -640 480 -640 480 -425 640 -640 480 -640 427 -640 425 -500 334 -640 426 -480 640 -640 480 -640 480 -640 427 -428 640 -640 428 -640 512 -429 640 -640 360 -640 480 -480 640 -640 480 -640 480 -640 480 -640 283 -640 479 -640 427 -640 425 -500 333 -640 369 -500 376 -640 480 -333 500 -612 612 -427 640 -480 640 -399 500 -640 480 -640 480 -640 348 -640 480 -640 480 -640 456 -427 640 -281 500 -480 640 -640 429 -640 478 -640 427 -640 453 -640 432 -622 640 -640 480 -640 425 -640 428 -640 427 -640 426 -640 480 -640 544 -640 427 -619 640 -480 640 -480 640 -640 480 -640 427 -640 640 -640 419 -370 640 -640 480 -375 500 -640 337 -448 336 -640 432 -500 333 -640 432 -500 375 -640 429 -500 349 -640 433 -640 480 -640 640 -640 480 -500 375 -640 480 -424 640 -640 508 -640 480 -640 480 -480 640 -640 480 -640 640 -640 480 -636 640 -640 480 -640 424 -640 327 -332 500 -480 640 -427 640 -640 425 -640 343 -640 480 -640 480 -640 428 -640 480 -375 500 -424 640 -511 640 -640 480 -640 480 -640 480 -500 375 -640 427 -480 640 -500 375 -640 464 -640 202 -640 426 -500 375 -640 480 -428 640 -640 478 -640 480 -395 500 -640 480 -500 375 -640 480 -479 640 -436 640 -480 640 -500 333 -640 430 -500 376 -640 480 -427 640 -640 428 -640 480 -640 480 -640 480 -333 500 -427 640 -640 426 -640 480 -640 480 -640 480 -640 427 -436 500 -640 453 -640 427 -640 427 -449 640 -534 640 -640 480 -426 640 -480 549 -640 320 -600 322 -467 500 -640 480 -640 480 -500 400 -640 423 -640 427 -640 480 -500 375 -500 302 -500 332 -640 480 -612 612 -640 432 -640 480 -640 427 -500 335 -360 640 -640 480 -640 428 -640 480 -427 640 -640 427 -640 511 -640 474 -500 375 -640 425 -640 427 -425 640 -640 428 -640 480 -640 426 -640 427 -640 360 -640 427 -500 391 -596 640 -640 427 -573 640 -640 480 -640 387 -640 427 -640 480 -640 427 -640 425 -640 372 -640 480 -375 500 -480 640 -426 640 -640 480 -640 480 -500 375 -640 426 -480 640 -333 500 -500 375 -640 428 -640 427 -640 480 -640 360 -427 640 -640 425 -640 427 -640 383 -500 375 -411 500 -640 434 -500 375 -640 427 -640 419 -640 428 -640 480 -640 480 -500 375 -480 640 -640 427 -640 509 -640 480 -640 421 -399 600 -640 480 -640 427 -640 429 -640 427 -500 375 -640 427 -640 427 -480 640 -640 426 -640 480 -375 500 -640 426 -640 413 -480 640 -333 500 -480 640 -640 415 -334 500 -431 640 -640 427 -640 426 -469 640 -640 480 -375 500 -612 612 -640 427 -640 478 -500 375 -640 443 -640 184 -640 406 -413 640 -640 427 -500 376 -640 427 -424 640 -373 500 -640 469 -640 427 -640 640 -480 640 -640 640 -640 478 -640 480 -640 426 -500 444 -640 426 -480 640 -640 427 -614 640 -640 426 -427 640 -600 464 -640 427 -464 640 -500 375 -640 427 -640 480 -449 640 -640 480 -480 640 -640 480 -640 480 -480 640 -640 408 -533 640 -640 426 -427 640 -640 396 -428 640 -640 480 -640 480 -640 480 -500 500 -335 500 -640 480 -427 640 -640 365 -427 640 -640 360 -508 640 -640 539 -640 428 -640 427 -500 375 -612 612 -640 424 -640 491 -640 425 -640 427 -640 480 -600 450 -359 640 -480 640 -640 480 -640 480 -640 480 -500 375 -390 500 -480 640 -480 640 -640 367 -640 480 -640 389 -426 640 -640 480 -480 640 -427 640 -470 308 -640 427 -640 427 -640 315 -640 480 -500 332 -640 480 -480 640 -500 333 -640 425 -480 640 -480 640 -640 480 -500 409 -640 427 -640 419 -480 640 -640 426 -640 427 -640 364 -500 375 -640 480 -480 640 -500 439 -500 333 -500 307 -640 480 -480 640 -427 640 -640 408 -640 475 -640 427 -640 428 -640 427 -640 408 -480 640 -500 375 -500 281 -640 428 -640 469 -480 640 -500 399 -612 612 -612 612 -612 612 -640 426 -500 335 -640 356 -375 500 -640 480 -426 640 -640 427 -640 426 -640 427 -480 640 -640 639 -500 375 -480 640 -612 612 -640 480 -640 448 -640 428 -640 480 -640 427 -543 640 -500 375 -640 427 -640 426 -640 359 -426 640 -478 640 -480 640 -640 428 -640 427 -640 426 -640 427 -640 427 -640 480 -500 340 -480 640 -640 480 -640 427 -640 480 -427 640 -640 480 -640 425 -640 427 -640 482 -500 333 -500 368 -640 427 -425 640 -640 480 -500 375 -640 428 -640 480 -640 423 -640 558 -250 234 -640 427 -478 640 -640 426 -640 427 -640 427 -426 640 -640 480 -428 640 -640 480 -640 480 -640 480 -640 399 -640 427 -640 439 -640 264 -500 375 -612 612 -640 427 -500 350 -427 640 -334 500 -500 332 -500 281 -325 500 -500 318 -480 640 -640 480 -375 500 -640 426 -640 614 -500 400 -487 640 -640 427 -640 427 -640 513 -478 640 -640 480 -500 375 -500 343 -500 375 -640 425 -640 417 -500 375 -640 427 -640 427 -640 427 -640 441 -640 426 -640 427 -640 480 -640 427 -640 383 -640 425 -635 640 -640 480 -640 355 -480 640 -640 427 -500 375 -640 480 -640 429 -640 480 -640 427 -640 480 -640 480 -640 427 -482 500 -480 640 -478 640 -640 426 -640 480 -640 424 -640 480 -630 640 -640 480 -640 480 -335 500 -480 640 -640 427 -640 480 -640 433 -640 423 -640 480 -640 480 -375 500 -640 480 -640 457 -480 640 -640 480 -640 480 -640 427 -500 375 -504 640 -640 480 -512 640 -471 640 -426 640 -319 480 -640 480 -500 371 -640 480 -640 480 -640 480 -500 375 -378 500 -427 640 -640 483 -640 541 -640 426 -640 381 -500 375 -640 423 -640 359 -640 631 -640 480 -400 600 -371 500 -640 480 -500 371 -640 480 -640 427 -478 640 -640 427 -380 500 -427 640 -500 375 -640 427 -600 600 -427 640 -640 427 -640 427 -356 500 -640 513 -482 640 -375 500 -640 480 -640 320 -612 612 -640 480 -640 640 -640 424 -480 640 -640 427 -427 640 -640 494 -639 640 -640 360 -478 640 -640 360 -640 426 -640 427 -640 427 -640 480 -640 439 -640 480 -640 427 -640 480 -640 360 -640 480 -640 480 -640 251 -640 433 -640 466 -640 480 -480 640 -640 480 -640 444 -427 640 -640 424 -480 640 -640 424 -640 458 -640 427 -424 640 -640 426 -480 640 -640 640 -473 305 -640 427 -461 640 -640 427 -478 640 -640 463 -640 480 -640 427 -640 425 -640 480 -640 360 -640 583 -500 344 -640 426 -640 425 -640 480 -413 640 -640 478 -427 640 -640 480 -424 640 -640 425 -480 640 -640 394 -640 427 -496 640 -427 640 -500 375 -640 426 -480 640 -640 429 -612 612 -640 416 -640 283 -480 640 -375 500 -427 640 -640 426 -640 424 -640 593 -640 427 -640 453 -640 429 -266 640 -640 426 -640 427 -640 499 -640 428 -640 425 -612 612 -480 640 -500 375 -375 500 -500 384 -500 333 -640 427 -640 458 -640 428 -640 467 -640 478 -640 427 -640 429 -640 426 -500 375 -640 480 -640 396 -640 512 -334 500 -480 640 -480 640 -640 427 -640 359 -640 480 -426 640 -375 500 -640 480 -640 480 -500 375 -640 434 -640 427 -640 425 -640 480 -640 457 -426 640 -375 500 -640 480 -640 344 -640 480 -640 455 -500 400 -640 427 -480 640 -640 480 -640 426 -375 500 -640 542 -500 332 -480 640 -640 427 -640 427 -426 640 -640 512 -640 500 -640 431 -640 609 -640 480 -640 478 -640 427 -640 640 -640 427 -640 427 -640 480 -640 424 -640 480 -640 480 -640 480 -480 640 -640 480 -383 640 -640 427 -640 480 -640 427 -640 480 -640 427 -640 480 -640 480 -640 480 -478 640 -640 480 -640 480 -640 427 -640 480 -640 428 -640 480 -640 427 -244 500 -426 640 -513 640 -640 480 -640 480 -640 427 -640 480 -640 480 -428 640 -640 368 -500 341 -640 426 -612 612 -640 428 -640 479 -640 427 -480 640 -640 480 -640 424 -480 640 -640 480 -640 429 -640 427 -640 427 -640 426 -640 480 -640 427 -500 375 -500 328 -640 480 -500 333 -640 427 -640 480 -640 392 -427 640 -640 640 -640 429 -480 640 -640 337 -306 500 -640 426 -427 640 -640 480 -640 427 -640 427 -500 381 -375 500 -640 472 -640 480 -500 375 -640 424 -640 480 -500 375 -480 640 -640 427 -640 480 -640 480 -500 383 -640 480 -480 640 -640 399 -612 612 -640 480 -500 375 -640 427 -500 375 -640 427 -640 427 -480 640 -640 480 -427 640 -640 427 -640 427 -346 500 -640 480 -500 400 -640 360 -478 640 -640 413 -375 500 -640 427 -640 424 -640 426 -640 425 -480 640 -478 640 -410 500 -640 640 -640 480 -500 345 -427 640 -640 419 -640 480 -640 406 -500 375 -640 528 -426 640 -359 640 -640 427 -640 428 -480 640 -500 333 -640 369 -400 535 -489 640 -480 640 -640 480 -640 480 -500 375 -640 480 -456 640 -500 375 -640 480 -640 428 -427 640 -640 425 -480 640 -640 427 -640 420 -333 500 -640 427 -428 640 -640 480 -480 640 -640 450 -640 384 -640 480 -425 640 -480 640 -500 351 -640 480 -640 562 -640 428 -640 480 -500 372 -423 640 -640 426 -640 480 -480 640 -640 426 -640 403 -640 480 -640 480 -640 480 -500 434 -427 640 -480 640 -640 424 -640 480 -480 640 -640 428 -547 640 -500 335 -640 360 -640 400 -640 427 -448 640 -500 376 -500 375 -640 481 -640 480 -640 426 -640 480 -640 478 -640 480 -640 423 -500 375 -640 200 -640 480 -600 450 -640 399 -640 480 -640 426 -640 480 -640 480 -640 480 -640 358 -480 640 -640 426 -640 428 -480 640 -640 640 -461 640 -640 480 -640 480 -640 480 -639 640 -428 640 -612 612 -640 404 -640 427 -640 427 -612 612 -640 427 -640 480 -449 640 -480 640 -640 428 -640 480 -333 500 -640 480 -500 385 -640 426 -500 375 -640 480 -640 427 -640 425 -640 427 -640 480 -640 426 -640 480 -640 480 -640 481 -640 480 -640 480 -640 428 -640 427 -427 640 -480 640 -425 640 -333 500 -640 503 -480 640 -640 427 -640 388 -640 426 -538 640 -500 375 -427 640 -640 424 -500 391 -640 231 -640 427 -640 480 -640 480 -612 612 -640 480 -426 640 -640 425 -640 478 -640 427 -640 427 -640 547 -640 360 -612 612 -640 480 -500 334 -431 500 -374 500 -640 428 -640 400 -633 640 -333 500 -640 462 -566 640 -640 359 -500 332 -425 640 -375 500 -640 425 -500 335 -640 480 -612 612 -640 425 -640 426 -487 640 -500 375 -640 424 -640 427 -640 480 -500 334 -640 427 -500 341 -640 480 -640 399 -480 640 -375 500 -480 640 -640 428 -500 334 -640 480 -640 427 -457 640 -500 375 -640 409 -375 500 -640 480 -640 480 -500 375 -375 500 -427 640 -480 640 -640 475 -640 480 -640 425 -500 375 -640 360 -500 332 -640 450 -640 480 -640 426 -500 375 -640 480 -640 480 -640 425 -640 425 -426 640 -640 425 -640 480 -640 384 -640 427 -640 427 -640 253 -640 425 -394 640 -640 426 -640 426 -640 480 -640 427 -427 640 -426 640 -640 467 -640 480 -640 458 -500 500 -640 480 -500 375 -640 427 -480 640 -640 480 -640 480 -640 421 -640 480 -640 542 -640 480 -640 430 -640 469 -640 360 -640 480 -640 355 -640 480 -612 612 -640 480 -500 334 -640 427 -432 640 -640 416 -640 360 -468 640 -640 527 -640 570 -640 428 -480 640 -640 480 -640 427 -480 640 -640 426 -640 480 -500 375 -640 360 -424 640 -478 640 -640 428 -640 427 -240 320 -427 640 -375 500 -500 375 -566 640 -640 480 -640 427 -500 335 -640 427 -500 375 -640 612 -640 480 -426 640 -640 480 -640 385 -640 424 -640 427 -640 478 -640 426 -427 640 -500 375 -640 480 -640 480 -640 258 -640 429 -640 427 -640 480 -640 480 -640 480 -640 425 -500 333 -640 480 -640 501 -640 640 -612 612 -640 424 -500 375 -640 454 -500 375 -640 388 -427 640 -425 640 -500 375 -376 500 -640 425 -640 480 -500 375 -500 357 -640 480 -640 378 -500 375 -640 431 -640 427 -640 450 -612 612 -640 427 -640 427 -640 427 -612 612 -640 480 -567 476 -480 640 -424 640 -640 428 -640 480 -640 427 -640 480 -640 426 -640 427 -640 480 -640 480 -640 480 -640 427 -480 640 -640 427 -640 480 -400 538 -640 427 -500 375 -428 640 -640 384 -640 426 -480 640 -640 488 -427 640 -640 480 -640 427 -640 424 -427 640 -640 480 -480 640 -612 612 -640 480 -480 640 -427 640 -640 466 -640 480 -640 480 -461 640 -640 480 -640 480 -500 254 -640 425 -500 375 -480 640 -480 640 -640 405 -612 612 -480 640 -514 640 -640 480 -640 480 -640 480 -400 300 -640 509 -640 424 -426 640 -640 480 -640 512 -428 640 -480 640 -612 612 -401 500 -640 478 -640 480 -640 427 -640 427 -500 375 -640 480 -640 425 -457 640 -640 427 -640 395 -480 640 -640 427 -640 478 -640 480 -640 455 -640 536 -425 640 -640 480 -640 427 -427 640 -417 500 -500 333 -480 640 -640 427 -640 360 -640 427 -427 640 -640 363 -640 480 -612 612 -640 614 -640 480 -479 640 -334 640 -640 425 -480 640 -429 640 -640 480 -640 427 -640 480 -480 640 -480 640 -500 412 -471 600 -500 333 -640 480 -640 425 -640 389 -640 339 -640 428 -640 640 -500 335 -640 426 -640 426 -425 640 -427 640 -425 640 -640 428 -427 640 -640 480 -640 427 -427 640 -640 282 -480 640 -500 281 -333 500 -458 640 -640 426 -426 640 -640 427 -640 425 -427 640 -640 480 -480 640 -640 485 -640 480 -480 640 -640 426 -427 640 -480 640 -500 326 -640 427 -640 480 -362 500 -640 480 -640 427 -332 500 -602 640 -640 480 -640 480 -480 640 -640 480 -640 427 -640 425 -640 480 -640 480 -480 640 -413 478 -640 640 -640 446 -640 249 -640 458 -640 453 -426 640 -640 563 -640 640 -640 480 -640 427 -425 640 -640 426 -480 640 -640 480 -640 565 -640 640 -640 480 -640 427 -640 427 -426 640 -640 427 -480 640 -640 427 -640 480 -500 375 -612 612 -433 640 -512 640 -640 427 -640 424 -640 480 -500 332 -640 480 -640 480 -500 375 -500 333 -640 427 -640 480 -640 480 -480 640 -500 333 -640 421 -640 480 -640 427 -640 480 -640 424 -640 480 -612 612 -640 480 -640 480 -368 640 -640 480 -640 480 -640 480 -640 480 -640 480 -500 375 -640 428 -640 342 -500 375 -480 640 -640 427 -640 427 -640 424 -640 457 -500 375 -401 640 -480 640 -640 640 -640 478 -640 419 -500 391 -640 481 -640 427 -640 427 -640 480 -640 480 -480 640 -500 274 -640 446 -640 480 -480 640 -480 640 -640 640 -612 612 -640 445 -640 480 -500 334 -640 480 -640 427 -640 427 -640 426 -640 428 -640 425 -500 321 -640 427 -640 480 -640 426 -500 333 -640 480 -608 640 -640 424 -640 426 -226 135 -640 361 -640 427 -640 480 -480 640 -640 480 -612 612 -640 591 -640 417 -390 640 -432 640 -640 397 -481 640 -640 427 -511 640 -640 427 -640 426 -500 335 -640 512 -640 480 -426 640 -640 480 -375 500 -640 480 -640 426 -640 425 -640 427 -640 379 -640 480 -333 500 -480 640 -640 480 -640 360 -640 428 -640 560 -640 359 -640 428 -640 427 -640 640 -640 427 -480 640 -480 640 -334 500 -640 427 -640 428 -640 427 -640 509 -640 480 -640 480 -527 640 -509 640 -640 427 -612 612 -640 480 -640 424 -640 480 -640 480 -640 540 -640 427 -640 368 -640 427 -500 438 -427 640 -640 427 -640 426 -640 427 -612 612 -640 480 -480 640 -640 427 -640 480 -640 480 -480 640 -427 640 -500 333 -640 480 -360 640 -640 480 -640 290 -500 333 -427 640 -640 429 -640 616 -640 428 -640 427 -640 480 -640 465 -640 427 -640 427 -479 640 -500 375 -481 640 -640 480 -640 480 -500 286 -640 480 -500 375 -500 375 -640 480 -640 640 -640 424 -427 640 -640 359 -640 480 -427 640 -640 428 -612 612 -333 500 -640 427 -333 500 -640 480 -612 612 -500 337 -500 375 -480 640 -427 640 -640 476 -640 481 -640 427 -500 375 -640 480 -427 640 -640 480 -640 478 -640 425 -500 332 -640 640 -640 480 -640 425 -640 480 -640 409 -459 640 -478 640 -427 640 -640 480 -640 468 -640 480 -640 427 -500 449 -640 400 -640 360 -333 500 -480 640 -640 480 -640 480 -426 640 -640 415 -305 400 -640 480 -640 419 -640 480 -640 427 -640 425 -300 400 -470 353 -640 521 -612 612 -640 480 -640 512 -480 640 -640 640 -640 480 -500 366 -640 480 -333 500 -640 427 -640 480 -640 427 -427 640 -366 500 -640 427 -640 427 -640 480 -640 426 -640 480 -640 480 -640 480 -640 424 -500 375 -640 427 -640 463 -640 512 -640 480 -375 500 -400 400 -640 426 -640 481 -640 480 -336 248 -640 480 -480 640 -640 274 -640 480 -333 500 -480 640 -640 480 -640 427 -640 400 -640 427 -480 640 -427 640 -428 640 -500 333 -401 640 -480 640 -640 424 -640 480 -375 500 -379 640 -640 480 -480 640 -640 478 -375 500 -640 427 -360 640 -429 640 -500 333 -640 427 -480 640 -640 480 -640 415 -640 293 -620 640 -480 640 -375 500 -640 426 -640 360 -640 481 -640 427 -496 640 -360 640 -640 480 -640 427 -480 640 -640 480 -512 640 -476 640 -480 640 -494 640 -375 500 -640 360 -640 426 -640 428 -640 480 -640 425 -640 426 -640 374 -640 427 -640 480 -640 479 -640 426 -640 427 -640 427 -480 640 -446 640 -640 426 -640 480 -640 427 -640 385 -640 480 -640 488 -640 480 -427 640 -427 640 -640 426 -640 480 -389 500 -640 480 -640 480 -640 480 -425 640 -480 640 -300 225 -640 515 -640 426 -640 480 -640 505 -347 491 -640 385 -640 427 -500 335 -640 426 -640 427 -428 640 -640 452 -428 640 -640 427 -640 427 -427 640 -640 424 -640 480 -480 640 -640 427 -480 640 -640 480 -640 480 -640 427 -640 427 -640 425 -640 426 -640 426 -494 640 -427 640 -640 380 -640 480 -640 480 -427 640 -427 640 -333 500 -640 427 -480 640 -500 334 -640 640 -640 361 -426 640 -640 480 -640 480 -640 480 -640 425 -640 428 -640 480 -640 480 -640 480 -640 426 -640 479 -457 640 -640 424 -500 332 -334 500 -375 500 -640 478 -500 333 -640 480 -500 400 -640 428 -640 480 -427 640 -500 375 -500 334 -500 291 -640 480 -640 480 -640 480 -640 427 -640 510 -640 480 -640 480 -428 640 -480 640 -500 375 -640 480 -640 512 -640 275 -640 512 -640 424 -612 612 -426 640 -640 481 -375 500 -640 457 -640 427 -619 640 -640 427 -640 480 -500 375 -640 398 -640 480 -427 640 -500 375 -480 640 -427 640 -500 375 -640 426 -640 427 -480 640 -500 375 -640 413 -640 424 -480 640 -640 426 -640 480 -500 400 -521 640 -427 640 -640 462 -640 480 -640 480 -427 640 -500 347 -640 427 -640 427 -597 400 -640 426 -640 427 -640 480 -640 480 -640 431 -640 419 -640 479 -640 428 -480 640 -640 427 -640 428 -426 640 -640 311 -480 640 -640 427 -640 513 -640 424 -500 358 -480 640 -640 480 -300 426 -640 480 -377 640 -480 640 -427 640 -640 427 -640 425 -640 320 -640 480 -640 360 -427 640 -640 403 -640 425 -480 640 -640 426 -480 640 -428 640 -426 640 -640 427 -459 640 -369 500 -480 640 -640 480 -480 640 -480 640 -500 281 -640 425 -640 468 -640 440 -640 427 -640 534 -640 478 -640 482 -640 426 -500 375 -424 640 -640 331 -640 480 -541 640 -640 268 -640 427 -640 425 -513 640 -640 426 -640 527 -500 333 -640 427 -498 640 -612 612 -339 500 -640 427 -500 391 -480 640 -427 640 -500 333 -427 640 -640 480 -480 640 -640 422 -349 500 -480 640 -333 500 -640 425 -424 640 -640 427 -500 339 -640 425 -640 460 -478 640 -640 468 -640 427 -640 434 -640 427 -640 427 -640 426 -500 375 -640 427 -500 375 -640 388 -640 426 -375 500 -640 426 -640 426 -640 425 -426 640 -640 424 -387 500 -640 480 -427 640 -640 427 -640 427 -640 427 -640 480 -480 640 -425 640 -640 480 -640 640 -640 424 -612 612 -500 333 -500 375 -640 501 -640 480 -640 577 -640 480 -500 375 -425 640 -500 500 -640 426 -640 427 -640 426 -640 480 -640 428 -500 370 -640 360 -500 399 -500 333 -349 500 -640 427 -640 427 -480 640 -640 480 -640 263 -640 480 -447 640 -640 427 -640 317 -640 480 -428 640 -640 426 -480 640 -640 427 -640 480 -375 500 -640 512 -640 430 -480 640 -480 640 -480 640 -500 500 -500 287 -640 480 -640 426 -427 640 -426 640 -640 480 -640 427 -640 427 -375 500 -546 640 -320 240 -425 640 -500 335 -640 425 -640 367 -640 480 -640 427 -640 480 -478 640 -640 427 -640 391 -640 429 -640 480 -640 427 -640 384 -427 640 -640 360 -640 495 -640 478 -640 427 -640 480 -500 218 -640 480 -500 333 -640 480 -640 480 -427 640 -640 480 -640 426 -375 500 -640 427 -640 427 -640 428 -640 618 -480 640 -640 427 -640 427 -554 640 -640 427 -640 427 -640 480 -640 499 -640 427 -640 420 -640 480 -640 480 -425 640 -500 332 -640 480 -640 423 -408 640 -640 480 -529 640 -640 426 -640 480 -500 375 -640 427 -640 508 -500 375 -427 640 -640 480 -640 427 -612 612 -480 640 -640 251 -480 640 -612 612 -500 375 -426 640 -640 480 -480 640 -536 640 -640 480 -640 425 -640 467 -640 480 -438 640 -448 290 -480 640 -640 480 -640 426 -640 480 -640 480 -512 640 -630 630 -640 383 -426 640 -640 404 -500 333 -500 375 -500 327 -429 640 -640 480 -640 469 -640 426 -640 537 -640 359 -640 640 -640 480 -480 640 -640 427 -500 375 -444 640 -640 480 -640 427 -640 480 -640 480 -427 640 -480 640 -640 399 -480 640 -640 434 -640 480 -640 480 -640 480 -640 480 -640 480 -640 428 -640 427 -640 427 -640 480 -640 394 -640 482 -461 640 -640 480 -640 427 -640 469 -640 424 -640 480 -640 448 -640 262 -480 640 -425 640 -640 360 -500 375 -640 480 -640 480 -480 640 -640 429 -640 480 -640 480 -640 426 -640 565 -640 480 -480 640 -427 640 -640 426 -512 640 -500 375 -500 375 -500 333 -500 375 -429 640 -640 427 -480 640 -640 320 -500 500 -640 480 -640 427 -424 640 -640 480 -640 403 -640 425 -500 375 -500 334 -640 480 -640 615 -640 480 -640 426 -640 480 -640 427 -640 480 -375 500 -640 480 -640 385 -640 368 -640 427 -492 500 -640 480 -640 480 -640 442 -640 404 -640 480 -640 400 -427 640 -640 427 -640 480 -612 612 -427 640 -640 436 -330 500 -640 428 -640 480 -640 480 -640 436 -640 494 -640 360 -320 240 -640 427 -480 640 -640 427 -640 480 -640 480 -640 480 -375 500 -640 500 -640 640 -640 480 -640 426 -640 536 -640 398 -427 640 -640 427 -640 480 -640 426 -640 427 -640 480 -480 640 -427 640 -500 375 -640 404 -500 357 -480 640 -640 427 -640 480 -429 640 -640 480 -640 429 -640 426 -640 429 -427 640 -427 640 -640 473 -480 640 -333 500 -426 640 -480 640 -640 480 -640 480 -640 426 -640 480 -480 360 -500 321 -640 428 -640 427 -640 480 -640 480 -500 375 -427 640 -640 503 -427 640 -640 427 -424 640 -610 405 -640 426 -426 640 -640 474 -640 428 -480 640 -640 403 -640 480 -640 428 -640 427 -640 480 -527 640 -449 640 -640 426 -480 640 -640 430 -500 500 -640 480 -640 427 -640 445 -640 440 -640 478 -500 375 -640 427 -640 539 -640 479 -512 640 -640 480 -640 480 -500 375 -640 480 -500 375 -640 428 -640 478 -500 334 -424 640 -640 424 -640 423 -640 427 -375 500 -640 480 -640 427 -640 427 -427 640 -640 480 -640 427 -640 360 -640 427 -640 427 -428 640 -640 480 -640 428 -640 480 -500 333 -640 480 -425 640 -640 551 -640 511 -427 640 -640 425 -640 480 -612 612 -375 500 -490 367 -398 640 -640 480 -640 504 -640 480 -640 480 -518 640 -640 480 -640 427 -640 413 -640 394 -640 427 -640 427 -640 428 -448 336 -480 640 -500 332 -640 426 -427 640 -424 640 -480 640 -640 426 -478 640 -640 480 -640 360 -436 640 -500 375 -640 544 -427 640 -640 640 -425 640 -640 428 -640 428 -425 640 -480 640 -640 425 -640 425 -426 640 -640 427 -480 640 -640 427 -427 640 -435 640 -480 640 -500 379 -640 640 -640 427 -640 427 -640 480 -640 480 -480 640 -640 480 -640 326 -640 427 -640 480 -500 333 -640 425 -453 640 -480 640 -640 428 -640 428 -441 640 -426 640 -640 480 -640 486 -640 427 -500 375 -500 375 -640 428 -640 494 -324 432 -640 427 -640 428 -480 640 -320 480 -640 480 -640 422 -640 427 -640 405 -640 480 -432 640 -640 427 -640 480 -640 426 -640 475 -458 640 -640 427 -612 612 -640 360 -507 480 -640 427 -480 640 -640 480 -640 480 -640 360 -640 428 -427 640 -500 375 -427 640 -640 427 -640 478 -640 480 -640 480 -417 640 -640 424 -640 427 -640 480 -640 426 -640 512 -640 480 -640 480 -640 427 -480 361 -640 427 -480 640 -640 484 -375 500 -427 640 -480 640 -500 375 -416 640 -640 408 -640 609 -612 612 -640 480 -640 360 -500 499 -640 480 -640 427 -640 427 -640 426 -480 640 -500 375 -640 529 -500 375 -640 480 -640 480 -640 425 -640 480 -500 375 -640 470 -640 426 -500 375 -640 480 -640 426 -640 432 -640 424 -640 316 -640 429 -640 463 -640 480 -458 640 -640 480 -640 427 -640 480 -640 427 -640 425 -612 612 -480 640 -375 500 -640 480 -640 483 -427 640 -640 480 -640 512 -499 374 -233 640 -640 312 -640 480 -640 457 -640 445 -500 375 -640 425 -640 427 -427 640 -640 427 -640 427 -480 640 -640 480 -500 375 -640 480 -427 640 -640 480 -640 428 -640 480 -480 640 -640 640 -640 513 -640 422 -500 325 -426 640 -640 480 -480 640 -500 346 -375 500 -640 480 -640 424 -500 375 -640 456 -640 456 -640 436 -640 426 -640 480 -640 428 -640 437 -300 225 -429 640 -640 480 -640 480 -640 480 -375 500 -640 424 -640 480 -640 480 -640 427 -638 479 -640 316 -500 333 -640 481 -640 427 -640 480 -640 427 -480 640 -640 427 -640 480 -500 332 -640 427 -640 480 -640 431 -584 430 -640 361 -640 640 -500 333 -640 364 -640 480 -480 640 -640 480 -560 640 -640 480 -640 428 -427 640 -443 640 -640 428 -480 640 -640 427 -480 640 -640 427 -640 512 -425 640 -480 640 -480 640 -362 640 -640 379 -640 480 -640 407 -640 480 -640 480 -480 640 -640 480 -427 640 -640 428 -640 427 -375 500 -500 375 -640 480 -640 640 -500 336 -640 480 -361 640 -640 424 -160 120 -333 500 -640 427 -540 455 -640 426 -640 425 -640 425 -640 428 -333 500 -640 419 -640 425 -640 428 -640 480 -500 375 -640 420 -500 375 -480 640 -640 480 -640 424 -640 480 -640 322 -640 478 -640 427 -640 480 -480 640 -640 429 -640 453 -480 640 -500 337 -240 320 -480 640 -640 480 -640 428 -640 427 -640 428 -640 480 -637 640 -640 480 -640 640 -640 480 -640 482 -500 321 -500 375 -640 480 -640 480 -500 333 -426 640 -480 640 -640 427 -480 640 -640 427 -640 427 -640 427 -500 297 -640 423 -500 333 -640 427 -640 480 -500 375 -640 480 -500 364 -640 427 -640 480 -480 640 -500 376 -640 427 -500 375 -640 398 -640 480 -640 427 -640 480 -428 640 -640 413 -640 640 -640 427 -640 427 -640 480 -480 640 -480 640 -640 427 -640 428 -640 427 -480 640 -640 480 -640 448 -640 480 -640 428 -640 391 -640 419 -640 426 -640 480 -640 429 -640 426 -640 480 -640 480 -640 528 -640 426 -640 480 -640 424 -427 640 -480 640 -640 480 -500 333 -500 375 -640 480 -480 360 -500 375 -640 510 -480 640 -640 480 -640 480 -640 627 -640 427 -640 480 -640 427 -640 427 -427 640 -480 640 -640 427 -419 640 -426 640 -640 424 -640 480 -640 625 -640 426 -487 500 -640 427 -427 640 -640 480 -500 375 -640 429 -425 640 -640 286 -375 500 -640 429 -640 480 -480 640 -500 375 -612 612 -640 480 -424 640 -640 427 -640 427 -640 382 -640 446 -640 427 -640 427 -640 472 -428 640 -640 427 -640 427 -500 333 -508 640 -500 375 -500 375 -612 612 -427 640 -640 425 -640 425 -640 480 -640 478 -640 427 -640 428 -427 640 -640 480 -480 640 -426 640 -600 393 -640 360 -480 640 -640 361 -640 427 -500 467 -425 640 -640 480 -640 427 -500 333 -500 333 -640 480 -640 359 -640 427 -595 428 -640 427 -490 500 -640 427 -640 360 -640 429 -612 612 -640 377 -640 454 -640 480 -428 640 -640 640 -640 427 -640 480 -640 384 -640 429 -500 375 -427 640 -640 427 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -640 427 -640 480 -640 480 -640 428 -500 375 -640 424 -640 419 -333 500 -640 425 -612 612 -640 480 -640 427 -640 426 -640 427 -640 455 -640 427 -480 640 -640 476 -640 480 -640 448 -426 640 -427 640 -640 427 -640 480 -640 427 -428 640 -640 426 -640 426 -500 333 -640 427 -640 408 -640 558 -640 480 -500 375 -640 640 -640 482 -640 426 -383 640 -500 281 -480 640 -375 500 -640 427 -640 425 -640 455 -494 640 -640 373 -640 427 -640 427 -640 425 -480 640 -640 480 -640 427 -640 428 -640 480 -500 298 -640 427 -640 409 -640 426 -640 480 -640 314 -640 424 -640 427 -640 427 -640 512 -640 489 -500 333 -480 640 -640 298 -500 375 -612 612 -640 249 -640 360 -454 640 -640 427 -640 640 -640 480 -500 375 -640 481 -640 480 -640 426 -640 453 -640 427 -480 640 -640 427 -480 640 -640 388 -640 480 -640 480 -500 316 -640 480 -640 480 -425 640 -640 480 -500 375 -640 480 -640 427 -480 640 -631 640 -640 480 -640 426 -640 476 -640 427 -640 359 -640 549 -426 640 -640 480 -481 640 -640 389 -640 420 -640 640 -640 427 -619 640 -640 530 -547 640 -640 425 -640 456 -640 480 -640 429 -640 360 -640 480 -640 426 -640 480 -500 375 -640 476 -640 480 -496 640 -640 360 -640 401 -402 640 -640 428 -640 427 -640 480 -640 427 -640 424 -640 480 -640 428 -640 480 -640 427 -640 426 -640 480 -480 640 -640 480 -480 640 -640 427 -640 427 -640 468 -640 427 -640 427 -480 640 -500 375 -612 612 -640 374 -640 433 -640 426 -640 640 -640 478 -458 640 -640 360 -333 500 -640 480 -640 480 -612 612 -640 480 -428 640 -480 640 -480 640 -640 480 -612 612 -640 610 -640 309 -640 640 -640 428 -640 427 -640 427 -480 640 -500 375 -640 427 -640 480 -640 480 -478 640 -500 333 -640 427 -640 427 -640 479 -640 480 -640 480 -500 375 -640 480 -640 425 -640 480 -640 480 -500 375 -640 480 -640 480 -640 480 -526 640 -512 640 -500 406 -500 222 -640 480 -640 427 -640 463 -640 426 -480 640 -500 247 -500 375 -640 480 -640 429 -640 426 -500 333 -640 423 -640 430 -640 427 -640 427 -640 480 -500 375 -640 426 -500 375 -640 424 -640 427 -612 612 -640 480 -427 640 -640 428 -426 640 -640 640 -609 640 -640 480 -480 640 -640 428 -500 332 -640 360 -483 640 -478 640 -640 327 -640 480 -640 359 -640 427 -640 438 -427 640 -640 478 -640 426 -640 480 -480 640 -640 480 -640 480 -427 640 -640 427 -640 413 -640 480 -640 427 -333 500 -640 480 -426 640 -640 480 -640 424 -640 427 -640 480 -640 480 -640 264 -640 368 -640 426 -375 500 -494 640 -490 500 -640 478 -500 335 -640 480 -480 640 -500 333 -346 500 -640 480 -640 415 -640 480 -640 426 -487 640 -500 375 -500 333 -640 371 -640 426 -640 438 -640 480 -640 427 -428 640 -427 640 -439 640 -640 434 -640 480 -500 335 -640 480 -500 333 -640 427 -640 480 -640 427 -427 640 -640 480 -640 478 -424 640 -640 480 -640 328 -640 427 -640 452 -640 360 -500 375 -640 480 -429 640 -640 446 -640 640 -640 426 -640 427 -480 640 -640 364 -640 480 -429 500 -640 480 -500 375 -427 640 -480 640 -471 640 -336 500 -480 640 -640 427 -480 640 -480 640 -496 400 -640 427 -640 158 -640 480 -640 480 -640 480 -640 606 -640 480 -640 427 -640 480 -640 480 -640 429 -640 424 -640 480 -375 500 -500 375 -375 500 -463 640 -530 353 -480 640 -480 640 -427 640 -402 640 -640 480 -500 333 -640 480 -640 427 -640 428 -640 502 -640 480 -591 640 -640 480 -500 375 -486 640 -426 640 -640 480 -427 640 -640 480 -427 640 -640 480 -640 428 -640 427 -640 480 -640 478 -640 480 -640 427 -640 426 -640 480 -640 427 -640 426 -640 424 -427 640 -640 563 -640 427 -640 480 -640 480 -640 471 -640 425 -640 427 -375 500 -640 384 -640 429 -640 480 -428 640 -640 404 -333 500 -640 427 -640 417 -640 480 -612 612 -375 500 -640 480 -612 612 -480 640 -640 427 -640 426 -640 480 -640 480 -480 640 -424 640 -640 427 -640 480 -640 427 -640 394 -640 428 -500 375 -640 640 -640 425 -500 500 -469 640 -375 500 -640 432 -480 640 -425 640 -457 640 -612 612 -427 640 -640 473 -640 478 -375 500 -640 426 -640 360 -640 426 -427 640 -425 640 -640 426 -480 640 -640 428 -640 426 -462 500 -375 500 -640 480 -640 429 -640 432 -640 427 -346 640 -500 333 -640 427 -640 625 -640 418 -640 425 -611 640 -640 512 -640 480 -640 428 -480 640 -640 411 -640 442 -640 480 -640 480 -480 640 -640 480 -640 435 -640 434 -640 424 -480 640 -640 481 -640 437 -640 480 -640 427 -640 426 -640 506 -640 480 -640 480 -640 361 -640 427 -640 480 -640 480 -640 423 -640 427 -640 480 -640 640 -640 427 -640 640 -480 640 -427 640 -640 349 -640 427 -500 353 -640 427 -640 480 -637 637 -427 640 -480 640 -640 480 -640 427 -519 389 -640 480 -640 480 -640 388 -480 640 -640 480 -380 640 -500 375 -349 640 -640 429 -480 640 -640 480 -640 480 -640 427 -496 640 -640 479 -427 640 -612 612 -640 360 -375 500 -500 342 -375 500 -640 427 -550 365 -640 428 -640 480 -640 428 -333 500 -427 640 -640 480 -640 449 -640 480 -640 480 -640 480 -640 480 -612 612 -640 426 -428 640 -640 480 -640 427 -427 640 -640 352 -411 640 -480 640 -640 480 -640 427 -640 480 -323 500 -480 640 -640 623 -612 612 -640 427 -500 375 -640 360 -640 480 -640 427 -640 427 -640 427 -500 333 -442 338 -640 426 -640 493 -480 640 -500 366 -333 500 -640 427 -640 431 -640 427 -480 640 -640 480 -481 640 -333 500 -640 447 -426 640 -480 640 -426 640 -612 612 -640 427 -640 427 -640 427 -640 389 -640 522 -640 480 -640 480 -612 612 -375 500 -640 427 -534 640 -640 480 -640 479 -398 640 -640 480 -640 480 -640 489 -640 480 -640 360 -640 483 -640 533 -640 425 -426 640 -500 334 -640 480 -640 373 -422 640 -500 374 -640 407 -640 383 -640 511 -480 640 -640 427 -320 240 -424 640 -640 489 -424 640 -640 427 -640 478 -640 480 -480 640 -640 398 -428 640 -640 426 -433 640 -640 360 -555 640 -480 640 -640 427 -640 428 -640 426 -640 480 -480 640 -500 375 -417 431 -500 375 -427 640 -480 640 -500 375 -640 428 -427 640 -640 427 -480 640 -640 427 -500 375 -490 640 -612 612 -423 640 -500 333 -375 500 -640 480 -640 480 -426 640 -426 640 -480 640 -640 427 -480 640 -640 480 -640 480 -640 424 -640 480 -640 463 -640 427 -640 291 -640 480 -640 427 -640 395 -640 480 -640 457 -360 640 -640 427 -415 640 -640 427 -640 435 -500 375 -640 480 -640 427 -427 640 -640 425 -640 440 -333 500 -640 480 -640 372 -500 338 -640 426 -640 480 -640 480 -640 360 -423 640 -427 640 -640 522 -333 500 -640 428 -640 498 -500 500 -422 640 -640 480 -480 640 -640 480 -640 512 -640 480 -640 480 -500 375 -500 332 -640 427 -429 640 -375 500 -640 480 -360 500 -640 480 -640 426 -640 426 -640 330 -500 333 -640 478 -640 480 -640 429 -640 480 -640 463 -410 640 -427 640 -640 480 -640 383 -460 640 -640 480 -640 480 -640 474 -640 426 -612 612 -640 480 -640 480 -500 496 -426 640 -640 467 -640 360 -427 640 -640 426 -480 640 -640 640 -480 640 -640 427 -323 500 -478 640 -640 427 -500 383 -640 425 -640 426 -424 640 -640 480 -640 426 -360 640 -312 640 -640 323 -479 640 -640 428 -500 375 -640 480 -640 480 -640 480 -427 640 -480 640 -640 359 -640 480 -640 465 -426 640 -640 480 -640 480 -640 480 -362 500 -640 467 -500 375 -640 480 -480 640 -640 427 -640 426 -640 480 -640 436 -640 480 -424 640 -640 428 -571 640 -640 427 -640 480 -640 482 -320 240 -640 398 -500 333 -500 333 -427 640 -500 375 -480 640 -427 640 -640 480 -376 640 -567 640 -480 640 -640 480 -640 426 -640 480 -640 479 -640 480 -427 640 -466 640 -640 480 -640 484 -640 482 -640 480 -640 480 -640 428 -427 640 -640 480 -640 511 -640 429 -640 425 -427 640 -640 427 -500 375 -640 427 -427 640 -427 640 -640 480 -500 375 -479 640 -640 427 -427 640 -500 500 -487 640 -640 459 -640 427 -640 480 -640 480 -640 480 -640 427 -473 640 -640 360 -426 640 -640 480 -640 409 -427 640 -640 359 -640 423 -500 300 -500 375 -640 427 -640 423 -640 425 -456 640 -640 328 -427 640 -640 480 -640 426 -427 640 -640 427 -500 375 -640 480 -500 375 -640 483 -399 500 -640 480 -640 427 -640 427 -640 427 -500 334 -640 480 -400 500 -427 640 -346 500 -640 313 -640 427 -640 360 -480 640 -640 478 -640 427 -640 427 -480 640 -640 480 -640 541 -500 322 -427 640 -640 379 -518 640 -640 426 -426 640 -640 425 -480 640 -640 428 -640 360 -640 426 -640 474 -480 640 -640 480 -640 480 -640 480 -500 375 -383 640 -480 640 -640 480 -640 414 -640 512 -640 427 -427 640 -500 333 -480 640 -640 425 -640 427 -600 453 -640 480 -640 425 -640 360 -640 480 -500 375 -640 360 -500 332 -640 442 -640 426 -500 331 -640 427 -640 435 -427 640 -640 427 -500 494 -640 420 -640 427 -640 427 -640 427 -500 472 -640 480 -500 375 -431 640 -500 333 -640 396 -640 428 -640 480 -500 375 -640 480 -500 465 -640 425 -640 424 -640 623 -640 430 -480 640 -640 480 -333 500 -640 480 -500 457 -640 479 -640 427 -640 427 -640 427 -500 252 -640 424 -427 640 -640 427 -640 480 -640 485 -640 426 -640 427 -640 433 -500 333 -480 640 -640 480 -428 640 -640 427 -640 427 -640 478 -500 457 -500 334 -640 480 -640 427 -349 640 -640 448 -380 500 -480 640 -640 437 -640 427 -544 640 -640 427 -427 640 -425 640 -612 612 -500 400 -640 480 -480 640 -375 500 -640 480 -640 640 -640 480 -500 375 -640 426 -640 424 -640 617 -500 377 -429 640 -640 479 -500 375 -640 429 -512 640 -426 640 -640 427 -640 427 -640 424 -640 480 -640 480 -640 442 -640 480 -640 491 -640 494 -640 480 -612 612 -467 500 -612 612 -640 534 -640 494 -640 409 -640 478 -480 640 -500 375 -427 640 -640 480 -500 348 -640 425 -640 480 -507 640 -640 480 -640 401 -640 480 -640 360 -633 640 -640 427 -500 333 -640 425 -428 285 -500 332 -640 429 -519 640 -640 480 -640 458 -640 480 -640 480 -334 500 -640 427 -480 640 -640 426 -640 426 -480 640 -640 428 -426 640 -480 640 -640 361 -640 480 -480 640 -612 612 -500 270 -640 419 -357 500 -640 427 -640 401 -512 640 -640 426 -612 612 -443 640 -427 640 -480 640 -640 480 -375 500 -427 640 -500 375 -458 640 -640 427 -640 457 -428 640 -640 479 -640 308 -500 332 -640 428 -427 640 -640 480 -640 427 -500 375 -500 375 -612 612 -640 426 -480 640 -361 640 -640 425 -640 480 -375 500 -427 640 -640 426 -640 425 -480 640 -640 558 -640 480 -640 434 -640 428 -640 398 -640 421 -640 480 -640 640 -640 428 -480 640 -640 427 -640 480 -640 427 -612 612 -640 426 -640 424 -573 640 -640 426 -640 427 -500 375 -640 480 -242 350 -640 426 -427 640 -480 640 -467 640 -640 427 -480 640 -640 480 -640 480 -640 427 -640 499 -480 640 -640 427 -640 480 -640 427 -391 640 -640 425 -640 426 -500 332 -480 640 -612 612 -480 640 -640 480 -439 640 -480 640 -478 640 -433 640 -640 480 -480 640 -640 194 -640 480 -640 480 -640 480 -640 640 -480 640 -640 619 -640 427 -640 480 -640 480 -640 426 -612 612 -640 428 -640 484 -427 640 -640 480 -500 374 -425 640 -640 425 -640 427 -428 640 -640 640 -640 427 -509 640 -333 500 -500 375 -325 485 -513 640 -640 425 -640 426 -500 375 -640 480 -640 428 -460 640 -640 480 -480 640 -640 480 -640 421 -640 427 -640 480 -480 640 -480 640 -640 262 -640 480 -640 480 -640 424 -640 427 -507 640 -640 427 -640 531 -427 640 -640 480 -640 480 -640 427 -500 375 -640 464 -522 640 -640 427 -500 332 -425 640 -640 427 -640 473 -640 398 -640 480 -640 428 -640 359 -640 480 -480 640 -640 426 -480 640 -333 500 -640 424 -480 640 -612 612 -500 375 -426 640 -640 427 -640 426 -480 640 -640 428 -640 425 -480 640 -487 640 -541 640 -512 640 -640 427 -424 640 -500 375 -640 446 -480 640 -480 640 -640 425 -428 640 -640 427 -640 389 -480 640 -640 320 -480 640 -480 640 -459 640 -640 469 -640 286 -640 427 -640 480 -640 549 -640 360 -375 500 -612 612 -640 484 -640 427 -640 427 -640 417 -640 480 -640 508 -483 640 -640 640 -612 612 -640 480 -427 640 -640 427 -500 375 -500 400 -480 640 -640 480 -640 640 -640 480 -640 640 -640 320 -480 640 -640 427 -640 480 -640 480 -640 480 -375 500 -640 427 -427 640 -640 428 -640 480 -640 389 -640 480 -640 428 -640 480 -500 375 -640 425 -640 429 -640 427 -640 480 -640 513 -640 344 -640 480 -429 640 -480 640 -500 394 -500 375 -500 354 -426 640 -500 343 -640 428 -640 427 -640 480 -640 423 -150 200 -640 426 -640 360 -640 480 -481 500 -300 225 -640 426 -480 640 -640 423 -500 375 -480 640 -427 640 -640 360 -600 473 -640 480 -640 427 -640 427 -640 427 -640 480 -640 464 -375 500 -427 640 -427 640 -640 400 -480 640 -640 427 -500 332 -480 640 -640 497 -427 640 -427 640 -640 425 -360 640 -633 640 -591 640 -480 360 -640 427 -640 427 -640 439 -427 640 -640 481 -480 640 -480 640 -427 640 -640 427 -500 400 -478 640 -500 375 -640 479 -640 427 -640 427 -640 513 -640 360 -640 427 -640 512 -640 427 -640 427 -640 480 -640 427 -640 480 -334 500 -640 480 -415 640 -427 640 -640 427 -640 480 -640 640 -500 332 -640 427 -480 640 -640 411 -640 480 -640 419 -500 333 -640 480 -426 640 -482 640 -640 480 -640 480 -640 427 -478 640 -375 500 -640 427 -500 375 -640 425 -59 72 -640 428 -405 500 -640 427 -500 330 -427 640 -427 640 -400 500 -640 480 -375 500 -438 640 -640 480 -500 362 -426 640 -480 640 -480 640 -640 426 -640 480 -640 480 -427 640 -640 480 -640 425 -640 447 -640 360 -640 480 -640 428 -500 399 -500 332 -640 427 -640 480 -357 500 -640 444 -640 426 -456 640 -480 640 -640 335 -478 640 -640 427 -640 480 -640 425 -640 461 -500 375 -640 480 -427 640 -480 640 -499 500 -640 480 -640 427 -640 424 -640 426 -640 429 -500 480 -640 426 -480 640 -640 427 -640 427 -500 375 -480 640 -326 246 -640 416 -640 427 -640 391 -640 427 -640 427 -640 426 -640 423 -500 375 -640 640 -640 480 -640 426 -640 427 -640 480 -640 427 -640 427 -640 426 -428 640 -480 640 -640 427 -640 427 -375 500 -426 640 -480 640 -640 360 -640 457 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -480 640 -480 640 -612 612 -428 640 -640 480 -640 425 -639 640 -480 640 -640 486 -427 640 -640 481 -640 426 -640 400 -640 480 -427 640 -551 640 -640 426 -640 480 -640 480 -640 480 -640 480 -375 500 -640 480 -640 428 -479 640 -640 513 -604 402 -519 640 -640 401 -640 360 -640 425 -500 333 -425 640 -640 425 -640 480 -640 419 -500 375 -640 640 -640 427 -640 427 -640 480 -640 414 -612 612 -480 640 -480 640 -478 640 -480 640 -640 480 -500 375 -640 640 -640 428 -640 426 -640 480 -640 463 -640 480 -640 428 -640 427 -640 480 -500 333 -500 377 -640 480 -640 454 -640 347 -500 331 -640 427 -640 427 -640 480 -500 375 -640 405 -432 640 -640 427 -500 400 -640 480 -640 480 -640 602 -192 640 -640 480 -640 484 -480 640 -640 427 -500 334 -640 480 -640 480 -375 500 -640 429 -640 347 -640 426 -640 480 -640 480 -640 427 -640 449 -640 427 -640 427 -480 640 -427 640 -640 466 -612 612 -480 640 -640 427 -640 426 -640 424 -640 429 -424 640 -640 425 -640 449 -640 426 -427 640 -640 480 -640 427 -640 480 -640 534 -640 480 -480 640 -480 640 -640 318 -640 426 -640 427 -640 493 -640 427 -640 480 -640 480 -640 380 -640 480 -480 640 -640 480 -640 396 -640 480 -640 427 -640 480 -462 371 -640 461 -640 427 -485 640 -500 640 -368 640 -480 640 -640 427 -640 480 -508 640 -640 424 -293 500 -500 375 -429 640 -640 426 -640 480 -640 480 -640 480 -640 481 -640 360 -640 427 -335 500 -640 479 -640 480 -640 427 -640 427 -640 416 -499 640 -640 480 -480 640 -640 425 -640 480 -640 480 -640 425 -640 426 -640 306 -480 640 -480 640 -413 640 -640 268 -375 500 -640 427 -640 480 -500 375 -640 284 -640 480 -480 640 -640 427 -480 640 -406 640 -640 480 -500 375 -480 640 -640 467 -480 640 -426 640 -640 427 -640 427 -427 640 -640 480 -500 333 -331 500 -480 640 -478 640 -423 640 -361 640 -640 480 -640 429 -640 640 -506 640 -640 500 -640 427 -500 333 -480 640 -612 612 -429 640 -375 500 -640 480 -427 640 -640 427 -640 428 -640 427 -500 375 -640 506 -383 640 -640 426 -640 428 -640 480 -640 427 -500 333 -640 480 -356 640 -426 640 -612 612 -640 512 -640 424 -640 480 -640 480 -640 480 -640 480 -640 426 -478 640 -640 424 -426 640 -425 640 -640 428 -500 375 -333 500 -500 333 -612 612 -425 640 -640 480 -640 429 -640 426 -640 426 -640 480 -640 480 -640 427 -640 425 -640 360 -500 333 -480 640 -640 474 -480 640 -640 428 -640 483 -446 597 -640 413 -500 375 -480 640 -640 427 -500 333 -640 427 -640 368 -500 375 -640 368 -640 640 -465 640 -428 640 -640 428 -640 383 -500 375 -640 427 -640 403 -640 480 -640 466 -333 500 -640 480 -640 426 -480 640 -640 426 -640 426 -640 480 -640 480 -640 478 -640 422 -640 480 -640 426 -640 480 -480 640 -640 480 -640 427 -640 427 -427 640 -612 612 -612 612 -640 427 -640 406 -548 640 -640 427 -640 512 -428 640 -500 333 -500 376 -640 419 -640 400 -424 640 -500 375 -612 612 -640 480 -640 426 -640 456 -640 425 -640 480 -640 480 -428 640 -427 640 -453 640 -640 427 -640 480 -612 612 -640 480 -427 640 -640 480 -360 640 -500 375 -333 500 -640 426 -640 278 -500 334 -640 427 -510 640 -640 424 -500 368 -640 478 -640 480 -640 383 -375 500 -480 640 -640 480 -640 480 -640 480 -500 375 -640 427 -640 425 -427 640 -480 640 -640 455 -640 434 -640 427 -521 640 -640 425 -426 640 -480 640 -640 427 -640 429 -640 480 -640 427 -640 428 -640 480 -640 427 -480 640 -640 480 -640 480 -426 640 -508 640 -448 500 -428 640 -640 427 -640 425 -640 480 -612 612 -640 426 -612 612 -640 427 -640 480 -640 480 -480 640 -500 219 -640 480 -640 374 -426 640 -414 640 -640 427 -640 427 -640 538 -640 426 -480 640 -426 640 -640 480 -640 480 -640 480 -480 640 -640 431 -500 333 -640 427 -428 640 -640 427 -640 425 -500 402 -640 425 -640 480 -640 480 -426 640 -640 480 -384 640 -521 617 -478 640 -428 640 -640 427 -640 480 -640 480 -640 426 -640 480 -640 214 -640 609 -640 427 -640 480 -612 612 -640 398 -480 640 -640 480 -640 426 -640 426 -427 640 -428 640 -640 480 -640 480 -640 480 -427 640 -500 375 -375 500 -640 480 -480 640 -500 375 -640 640 -640 480 -480 640 -375 500 -640 594 -480 640 -500 369 -640 427 -640 480 -640 426 -500 375 -427 640 -640 395 -640 424 -640 427 -640 428 -480 640 -640 480 -480 640 -375 500 -640 427 -640 427 -640 482 -427 640 -429 640 -500 375 -334 500 -640 567 -640 236 -612 612 -640 474 -640 480 -640 443 -640 480 -427 640 -640 429 -424 640 -640 389 -640 426 -640 427 -428 640 -640 480 -492 640 -500 336 -297 500 -640 424 -640 480 -640 427 -351 494 -426 640 -640 426 -500 375 -640 427 -640 428 -640 480 -640 423 -494 640 -375 500 -425 640 -306 408 -640 360 -640 480 -640 640 -500 380 -500 375 -640 480 -640 478 -500 375 -640 426 -638 640 -640 480 -333 500 -480 640 -640 427 -500 375 -500 283 -640 481 -640 426 -500 394 -640 427 -640 480 -268 400 -640 473 -640 408 -640 480 -640 427 -427 640 -640 427 -640 266 -332 500 -640 427 -640 425 -426 640 -500 337 -640 427 -568 320 -556 640 -640 480 -500 333 -500 375 -640 482 -288 432 -640 427 -640 480 -640 480 -500 375 -640 458 -640 427 -640 480 -640 480 -360 640 -640 480 -640 427 -640 426 -640 428 -640 480 -427 640 -480 640 -427 640 -333 500 -480 640 -640 427 -428 640 -480 640 -427 640 -424 640 -500 331 -500 414 -480 640 -500 346 -360 640 -640 480 -640 421 -640 425 -640 480 -480 640 -426 640 -480 640 -640 425 -481 640 -640 427 -500 334 -640 429 -500 333 -480 640 -375 500 -640 480 -640 427 -640 404 -480 640 -640 336 -640 480 -640 427 -424 640 -640 428 -640 426 -640 359 -640 424 -640 360 -640 426 -640 427 -640 480 -480 640 -640 480 -640 480 -640 427 -640 360 -640 427 -640 427 -640 480 -640 427 -426 640 -640 640 -500 404 -640 480 -640 480 -640 427 -640 427 -640 480 -640 427 -640 640 -640 413 -450 600 -640 427 -333 500 -240 320 -640 433 -640 480 -640 480 -480 640 -640 424 -425 640 -456 640 -500 375 -640 427 -484 640 -640 548 -640 480 -319 212 -640 480 -425 640 -400 600 -640 480 -640 387 -640 427 -396 640 -640 480 -640 480 -480 640 -640 480 -500 375 -640 480 -425 640 -640 152 -480 640 -467 640 -640 428 -309 500 -334 500 -640 457 -480 640 -640 480 -428 640 -640 427 -640 448 -640 428 -640 512 -500 375 -640 427 -640 480 -640 480 -640 480 -640 426 -640 427 -640 489 -375 500 -640 488 -640 427 -640 427 -640 427 -640 480 -640 480 -640 480 -500 375 -500 335 -640 480 -640 480 -480 640 -640 349 -480 640 -480 640 -640 428 -480 640 -640 329 -511 640 -640 427 -640 480 -640 480 -640 480 -480 640 -640 480 -500 375 -640 427 -640 491 -477 640 -640 426 -640 480 -640 480 -500 331 -427 640 -512 640 -640 426 -640 289 -500 333 -640 640 -640 427 -640 480 -640 429 -640 431 -640 427 -640 426 -640 480 -640 427 -640 426 -640 480 -640 480 -640 480 -500 375 -640 480 -480 640 -640 427 -640 427 -640 610 -640 427 -480 640 -500 358 -640 429 -640 480 -480 640 -426 640 -640 426 -427 640 -640 640 -640 426 -640 425 -500 334 -640 480 -640 216 -425 640 -640 427 -640 416 -375 500 -640 480 -640 512 -481 640 -640 480 -640 415 -480 640 -640 360 -640 426 -480 640 -640 424 -640 427 -375 500 -432 640 -640 480 -640 349 -640 424 -500 333 -428 640 -480 640 -640 461 -640 422 -640 429 -640 480 -640 480 -640 480 -640 640 -640 480 -640 454 -640 371 -481 640 -640 640 -640 480 -640 480 -640 425 -640 640 -640 452 -640 315 -640 427 -640 368 -612 612 -500 375 -640 457 -640 579 -640 427 -427 640 -600 367 -640 480 -628 640 -640 360 -640 480 -640 427 -480 640 -479 640 -640 234 -640 420 -500 375 -640 480 -640 427 -640 480 -640 480 -640 427 -612 612 -500 400 -500 333 -640 480 -427 640 -640 427 -334 640 -612 612 -640 480 -640 427 -612 612 -640 480 -489 640 -427 640 -640 428 -640 427 -640 509 -640 480 -500 102 -427 640 -640 428 -640 480 -640 360 -588 640 -423 640 -640 507 -375 500 -375 500 -612 612 -640 428 -427 640 -500 375 -640 480 -640 480 -640 480 -640 427 -640 427 -640 383 -640 428 -640 480 -640 425 -640 426 -640 472 -640 400 -639 640 -500 333 -500 375 -375 500 -500 333 -640 480 -640 426 -640 424 -427 640 -640 427 -640 425 -640 480 -640 427 -500 375 -640 409 -500 375 -640 423 -640 424 -640 425 -640 470 -640 480 -640 480 -612 612 -640 640 -640 480 -640 426 -640 427 -612 612 -640 480 -426 640 -640 401 -640 253 -640 427 -640 427 -427 640 -640 480 -640 427 -640 480 -640 588 -640 495 -640 429 -640 427 -640 480 -640 427 -491 500 -480 640 -640 406 -640 480 -640 425 -427 640 -640 425 -640 427 -427 640 -640 427 -500 333 -640 427 -500 375 -640 349 -426 640 -640 480 -375 500 -640 480 -426 640 -640 360 -640 425 -640 484 -426 640 -333 500 -640 480 -640 480 -640 427 -640 361 -640 480 -640 425 -640 379 -640 480 -640 480 -423 640 -323 500 -640 377 -640 427 -640 480 -640 424 -640 360 -640 480 -640 474 -640 480 -640 489 -640 480 -500 331 -480 640 -584 640 -333 500 -640 427 -640 429 -640 427 -640 480 -640 480 -640 427 -480 640 -426 640 -640 450 -640 480 -640 425 -640 427 -640 480 -640 427 -640 480 -640 480 -480 640 -478 640 -640 427 -640 480 -640 427 -480 640 -640 480 -640 480 -640 427 -478 640 -427 640 -640 427 -427 640 -640 375 -500 375 -640 427 -640 427 -591 640 -640 480 -640 480 -480 640 -640 480 -640 480 -480 640 -640 480 -640 381 -640 480 -500 393 -640 480 -424 640 -640 480 -640 480 -429 640 -640 427 -640 480 -500 375 -428 640 -314 500 -640 427 -640 480 -480 640 -550 473 -640 457 -640 480 -640 480 -480 640 -640 426 -640 480 -366 640 -640 378 -457 640 -640 503 -640 427 -427 640 -640 480 -510 640 -640 420 -640 625 -375 500 -500 375 -640 480 -640 480 -640 427 -427 640 -640 458 -640 481 -427 640 -427 640 -640 480 -640 427 -612 612 -640 425 -640 360 -640 480 -640 391 -612 612 -640 427 -640 427 -640 480 -640 480 -640 480 -640 427 -640 289 -480 640 -263 350 -640 479 -640 426 -480 640 -640 480 -640 640 -480 640 -640 427 -640 480 -537 403 -427 640 -427 640 -480 640 -438 640 -640 427 -500 375 -640 480 -429 640 -480 640 -500 338 -640 424 -500 375 -640 438 -640 424 -640 303 -612 612 -640 480 -480 640 -640 425 -640 640 -640 480 -513 640 -500 332 -640 427 -500 486 -640 444 -640 424 -427 640 -640 480 -480 640 -640 427 -640 427 -640 480 -640 427 -640 480 -640 431 -640 426 -640 480 -640 429 -375 500 -480 640 -640 480 -640 427 -640 427 -640 444 -480 640 -640 480 -240 320 -640 480 -500 308 -640 478 -640 427 -640 480 -640 480 -640 425 -640 601 -500 333 -640 480 -500 375 -640 427 -640 425 -640 427 -480 640 -640 427 -640 426 -500 333 -640 480 -640 425 -500 400 -640 479 -640 427 -640 425 -640 424 -640 480 -375 500 -500 375 -333 500 -640 467 -640 480 -640 428 -424 640 -640 480 -640 640 -640 469 -640 428 -640 427 -375 500 -640 640 -500 375 -640 427 -500 334 -334 500 -640 424 -427 640 -426 640 -480 640 -640 416 -640 427 -500 375 -640 480 -640 480 -640 382 -640 480 -500 472 -640 426 -640 426 -640 427 -640 426 -375 500 -508 640 -640 418 -333 500 -640 480 -640 480 -640 401 -480 640 -426 640 -640 478 -480 640 -640 428 -375 500 -427 640 -640 427 -640 536 -640 409 -640 413 -640 425 -478 640 -640 396 -640 480 -640 360 -640 480 -640 427 -480 640 -640 425 -640 425 -640 480 -640 424 -640 484 -640 429 -640 427 -480 640 -500 375 -500 333 -500 375 -500 375 -480 640 -500 333 -427 640 -500 311 -427 640 -480 640 -640 480 -640 480 -640 427 -428 640 -640 424 -640 427 -640 480 -333 500 -640 407 -640 428 -640 334 -480 640 -640 427 -615 461 -428 640 -427 640 -640 426 -480 640 -640 424 -500 332 -640 320 -640 425 -583 640 -500 375 -640 480 -624 640 -640 217 -640 400 -360 270 -500 375 -640 426 -640 430 -640 480 -285 640 -640 480 -640 480 -640 427 -444 640 -480 640 -640 403 -640 427 -640 427 -640 461 -640 427 -640 511 -640 480 -640 320 -427 640 -480 640 -640 427 -640 333 -640 457 -640 441 -640 480 -614 640 -480 640 -333 500 -352 288 -640 457 -640 480 -640 480 -509 503 -425 640 -640 425 -427 640 -640 391 -640 427 -640 480 -480 640 -640 400 -640 482 -375 500 -640 427 -640 511 -480 640 -500 327 -640 427 -640 360 -640 480 -640 480 -478 640 -640 428 -640 480 -640 424 -640 480 -460 640 -480 640 -375 500 -640 434 -640 480 -480 640 -640 426 -640 427 -640 427 -375 500 -640 480 -640 450 -640 428 -640 480 -500 358 -640 424 -640 480 -500 375 -640 480 -480 640 -640 480 -480 640 -640 424 -640 480 -480 640 -640 427 -375 500 -640 451 -640 480 -640 427 -427 640 -480 640 -426 640 -640 359 -640 403 -640 480 -640 480 -436 640 -640 480 -640 426 -640 480 -640 480 -640 480 -640 433 -640 427 -640 480 -480 640 -640 480 -640 480 -640 480 -640 536 -640 480 -500 326 -640 605 -427 640 -640 427 -429 640 -640 480 -640 360 -425 640 -500 333 -427 640 -640 434 -640 427 -426 640 -640 427 -480 640 -640 426 -240 320 -640 424 -640 551 -434 640 -640 424 -375 500 -640 426 -640 427 -500 375 -427 640 -640 356 -640 480 -480 640 -640 480 -375 500 -640 480 -640 427 -640 427 -480 640 -640 424 -640 422 -640 427 -640 480 -640 480 -428 640 -480 640 -480 640 -425 640 -480 640 -478 640 -500 354 -480 640 -640 426 -500 375 -500 333 -480 640 -640 480 -427 640 -640 427 -500 375 -640 481 -640 530 -640 480 -480 640 -495 500 -640 480 -640 503 -426 500 -479 640 -480 640 -640 556 -640 480 -488 286 -640 427 -640 480 -640 480 -461 640 -500 341 -640 416 -500 375 -640 418 -640 480 -457 640 -334 500 -640 427 -500 332 -640 480 -500 500 -640 480 -640 480 -640 354 -640 426 -640 428 -612 612 -640 428 -612 612 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -640 480 -500 375 -375 500 -640 480 -375 500 -640 480 -500 375 -640 477 -640 425 -640 430 -640 430 -640 426 -640 480 -500 400 -640 478 -640 427 -640 427 -427 640 -640 460 -640 427 -612 612 -640 424 -640 480 -570 640 -640 241 -640 426 -640 480 -640 480 -640 480 -427 640 -640 427 -500 375 -626 640 -640 427 -640 509 -640 480 -382 640 -640 427 -640 640 -480 640 -640 480 -500 375 -500 354 -640 480 -640 425 -640 427 -612 612 -640 427 -640 427 -640 359 -640 427 -640 480 -480 640 -612 612 -480 640 -640 480 -640 480 -500 376 -640 444 -640 426 -501 640 -640 480 -640 480 -500 375 -640 427 -612 612 -443 640 -400 500 -478 640 -640 424 -600 400 -447 640 -466 640 -640 480 -640 386 -640 426 -640 427 -480 640 -640 360 -640 480 -640 427 -500 333 -479 640 -640 590 -427 640 -640 425 -500 324 -640 480 -640 326 -500 375 -426 640 -330 500 -480 640 -640 480 -640 480 -500 375 -612 612 -382 640 -640 427 -426 640 -640 480 -640 480 -640 640 -640 427 -640 360 -500 375 -640 427 -640 480 -428 640 -640 480 -640 419 -640 425 -500 375 -640 481 -640 426 -640 480 -500 432 -640 427 -640 480 -640 427 -480 640 -640 425 -500 400 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -640 427 -640 377 -425 640 -612 612 -640 427 -640 463 -640 640 -488 500 -640 456 -640 530 -480 640 -640 427 -500 291 -640 426 -640 427 -640 480 -480 640 -640 427 -640 480 -640 480 -640 427 -480 640 -640 360 -334 500 -640 428 -640 427 -640 427 -357 500 -500 400 -640 427 -640 427 -640 480 -375 500 -640 444 -500 333 -426 640 -427 640 -640 428 -640 427 -500 375 -640 425 -640 480 -640 427 -640 424 -500 492 -500 375 -640 480 -640 427 -640 480 -640 504 -500 375 -640 424 -640 386 -640 480 -480 640 -640 422 -640 480 -640 426 -500 335 -640 427 -335 500 -523 640 -640 426 -640 420 -360 270 -423 640 -640 427 -640 420 -500 375 -428 640 -500 335 -640 428 -640 480 -640 426 -640 480 -500 375 -427 640 -426 640 -640 368 -500 333 -640 360 -640 480 -427 640 -427 640 -640 360 -640 410 -480 640 -640 427 -640 330 -334 500 -640 427 -640 640 -500 349 -500 332 -640 430 -500 375 -640 480 -640 490 -640 480 -640 428 -640 428 -640 480 -640 480 -332 500 -640 379 -640 427 -478 640 -640 427 -640 427 -640 480 -640 640 -640 406 -481 640 -640 502 -640 480 -640 478 -640 425 -500 375 -640 480 -640 426 -640 390 -640 480 -640 480 -375 500 -640 427 -480 640 -640 480 -427 640 -640 426 -612 612 -640 480 -640 284 -500 375 -480 640 -640 483 -640 481 -640 427 -500 375 -573 598 -640 428 -640 291 -500 339 -426 640 -500 332 -640 425 -457 640 -612 612 -640 400 -640 427 -375 500 -500 334 -640 427 -640 361 -640 400 -640 631 -640 320 -640 480 -480 640 -640 480 -640 480 -640 427 -500 375 -500 483 -640 480 -500 377 -640 480 -500 333 -640 491 -640 508 -640 426 -500 333 -640 480 -640 480 -640 468 -640 360 -640 427 -640 443 -629 640 -640 282 -640 383 -640 478 -640 427 -640 480 -500 375 -640 427 -640 480 -495 640 -333 500 -640 424 -640 429 -640 430 -640 480 -640 480 -640 480 -491 640 -640 424 -640 428 -640 427 -640 480 -640 482 -640 441 -500 375 -500 375 -500 375 -640 458 -640 427 -640 427 -640 480 -640 424 -426 640 -393 640 -640 426 -640 424 -640 229 -640 480 -323 640 -640 478 -500 375 -612 612 -640 383 -640 360 -333 500 -427 640 -640 427 -640 257 -500 333 -640 480 -640 427 -640 424 -640 458 -640 480 -640 427 -640 427 -640 480 -640 517 -640 360 -500 375 -427 640 -640 480 -500 375 -640 480 -335 500 -600 450 -500 333 -431 640 -640 480 -640 427 -640 478 -640 426 -640 521 -640 428 -640 480 -640 479 -640 640 -640 480 -640 427 -500 375 -640 480 -640 480 -640 480 -500 357 -640 586 -640 480 -500 333 -500 349 -480 640 -500 333 -640 478 -467 640 -426 640 -640 480 -424 640 -500 500 -640 426 -640 480 -478 640 -640 360 -640 480 -428 640 -640 428 -640 428 -640 574 -640 480 -480 640 -640 480 -640 427 -640 480 -640 480 -640 480 -640 427 -500 375 -640 427 -500 375 -640 480 -640 471 -500 375 -602 640 -500 375 -480 640 -640 480 -640 427 -640 427 -427 640 -640 427 -640 428 -640 427 -640 438 -640 480 -480 640 -640 400 -500 375 -480 640 -450 481 -425 640 -640 480 -428 640 -500 375 -640 424 -640 427 -570 640 -640 480 -640 427 -640 523 -450 600 -640 427 -528 604 -640 439 -610 423 -500 499 -427 640 -640 425 -640 427 -640 480 -426 640 -640 480 -640 425 -640 360 -480 640 -640 427 -640 426 -480 640 -640 443 -640 484 -640 480 -640 480 -500 333 -500 375 -480 640 -500 374 -640 423 -500 375 -640 361 -640 415 -500 375 -431 640 -435 640 -640 424 -640 360 -612 407 -640 427 -426 640 -640 640 -640 480 -478 640 -640 517 -640 480 -402 600 -296 444 -640 427 -480 640 -640 428 -427 640 -480 360 -500 255 -640 383 -640 426 -480 640 -500 334 -500 375 -500 335 -480 640 -640 480 -500 333 -640 480 -640 397 -640 428 -480 364 -640 427 -640 428 -640 360 -640 480 -640 426 -640 427 -427 640 -640 480 -640 428 -640 484 -640 425 -254 192 -640 484 -640 500 -640 480 -640 480 -640 424 -640 480 -640 480 -640 428 -429 640 -480 640 -428 640 -449 640 -640 424 -612 612 -640 527 -612 612 -500 375 -336 500 -640 480 -640 427 -640 427 -640 428 -500 333 -640 427 -480 640 -640 509 -640 457 -640 427 -640 427 -640 425 -640 480 -640 480 -500 334 -500 375 -640 427 -640 428 -427 640 -640 480 -612 612 -500 333 -640 544 -640 480 -640 427 -640 427 -604 453 -375 500 -640 360 -640 480 -640 480 -640 427 -640 427 -597 640 -640 428 -640 359 -640 427 -427 640 -459 640 -526 640 -640 424 -427 640 -640 513 -359 500 -640 437 -640 481 -640 480 -500 375 -640 427 -640 480 -640 480 -640 425 -640 512 -640 449 -500 333 -640 480 -640 424 -457 640 -640 427 -640 427 -640 480 -640 427 -500 333 -500 334 -640 472 -500 333 -640 478 -640 480 -333 640 -640 480 -500 375 -640 427 -640 427 -640 480 -480 640 -640 480 -640 426 -640 429 -508 640 -640 359 -480 640 -640 427 -640 480 -640 427 -500 375 -640 480 -427 640 -640 427 -640 480 -640 480 -640 428 -640 478 -375 500 -640 378 -640 429 -640 480 -500 333 -500 500 -443 450 -640 418 -640 480 -640 427 -640 427 -480 640 -640 424 -640 426 -583 640 -500 317 -500 239 -640 480 -640 427 -640 427 -640 480 -500 500 -480 640 -427 640 -640 428 -612 612 -640 480 -640 427 -363 500 -640 480 -480 640 -640 480 -640 427 -640 360 -375 500 -640 480 -480 640 -480 640 -640 329 -303 640 -640 479 -640 427 -640 426 -640 425 -480 640 -481 640 -322 640 -375 500 -480 640 -640 640 -640 321 -480 640 -500 375 -612 612 -640 480 -640 426 -640 427 -640 446 -500 375 -640 428 -480 640 -640 424 -640 427 -640 480 -640 640 -556 640 -640 443 -449 640 -640 425 -640 427 -500 375 -640 480 -500 400 -424 640 -640 480 -640 480 -640 425 -640 428 -640 427 -480 640 -640 427 -640 424 -640 480 -640 513 -640 428 -427 640 -640 479 -640 483 -640 480 -640 427 -500 375 -640 480 -640 431 -640 426 -500 375 -640 425 -333 500 -640 480 -640 480 -640 480 -640 383 -640 360 -480 640 -640 425 -427 640 -427 640 -480 640 -640 480 -640 480 -612 612 -480 640 -640 454 -640 480 -500 319 -500 485 -426 640 -640 480 -640 392 -640 426 -612 612 -500 383 -427 640 -640 427 -640 431 -640 427 -640 452 -500 335 -640 449 -640 429 -640 480 -640 453 -640 426 -640 473 -640 473 -640 480 -640 480 -640 419 -375 500 -640 427 -640 427 -640 427 -426 640 -640 360 -640 569 -640 480 -640 427 -425 640 -640 427 -500 207 -480 640 -500 375 -640 427 -640 376 -640 480 -640 456 -612 612 -500 332 -640 480 -640 480 -640 462 -640 427 -640 427 -427 640 -640 480 -640 480 -400 500 -500 375 -640 350 -640 640 -439 640 -640 480 -640 480 -640 480 -640 480 -569 640 -640 356 -640 437 -640 427 -640 428 -426 640 -640 376 -640 308 -640 469 -640 373 -640 480 -640 480 -500 375 -640 427 -640 423 -640 480 -640 413 -480 640 -612 612 -640 480 -480 640 -427 640 -640 427 -640 430 -480 640 -640 471 -640 480 -640 426 -640 480 -436 640 -640 426 -612 612 -425 640 -640 480 -640 427 -640 417 -640 426 -640 480 -512 640 -640 427 -575 575 -640 174 -640 441 -640 504 -640 480 -640 480 -480 640 -416 640 -333 500 -640 436 -640 480 -640 480 -640 427 -640 480 -640 480 -640 475 -640 423 -640 480 -640 478 -640 401 -640 425 -640 414 -640 478 -500 405 -500 375 -640 439 -640 426 -640 480 -640 456 -500 375 -640 480 -500 375 -640 428 -640 204 -640 427 -640 426 -640 480 -640 426 -624 640 -640 640 -640 193 -500 375 -640 428 -427 640 -486 640 -640 360 -640 242 -640 424 -640 360 -640 480 -640 479 -500 377 -640 606 -640 482 -640 425 -640 480 -604 453 -480 397 -427 640 -640 480 -500 448 -320 240 -500 500 -640 210 -640 424 -500 341 -640 480 -480 360 -500 218 -640 338 -500 470 -640 490 -640 479 -425 640 -640 480 -640 427 -640 478 -640 492 -640 480 -500 333 -500 375 -480 640 -640 480 -640 427 -640 515 -640 480 -640 480 -444 595 -640 344 -376 500 -640 427 -640 427 -640 429 -640 428 -640 480 -640 480 -640 427 -640 480 -640 427 -640 428 -336 500 -640 426 -640 577 -480 640 -640 426 -500 331 -640 427 -640 480 -500 375 -640 514 -640 640 -640 480 -630 640 -640 480 -480 640 -612 612 -640 480 -392 218 -640 427 -640 427 -640 425 -640 310 -640 480 -640 480 -640 427 -640 427 -640 425 -640 427 -640 427 -640 426 -640 425 -480 640 -500 375 -500 375 -640 427 -640 480 -640 425 -400 640 -640 423 -640 480 -640 480 -427 640 -640 427 -640 468 -640 424 -640 359 -150 225 -640 385 -640 625 -640 480 -640 480 -640 425 -640 640 -375 500 -640 480 -500 317 -640 427 -640 457 -375 500 -640 480 -640 426 -640 427 -640 351 -640 480 -640 640 -640 480 -480 640 -640 432 -500 167 -480 640 -640 428 -640 429 -427 640 -500 340 -425 640 -500 396 -240 320 -640 427 -640 428 -640 480 -640 480 -640 400 -640 480 -640 427 -640 480 -360 640 -640 424 -375 500 -612 612 -640 533 -640 428 -481 640 -500 500 -640 429 -500 335 -500 375 -500 375 -640 426 -640 427 -640 426 -640 480 -640 427 -333 500 -640 480 -486 640 -427 640 -640 637 -640 480 -500 500 -640 426 -640 428 -427 640 -640 640 -640 427 -480 640 -640 484 -640 426 -640 427 -640 320 -640 305 -640 480 -640 480 -426 640 -640 438 -640 480 -640 480 -640 427 -640 478 -640 481 -375 500 -612 612 -640 177 -500 427 -480 640 -500 333 -426 640 -480 640 -640 574 -640 461 -640 512 -640 428 -640 480 -500 333 -640 509 -640 427 -640 480 -640 528 -425 640 -612 612 -640 427 -640 455 -640 430 -640 375 -640 427 -640 480 -640 480 -500 375 -640 426 -500 332 -640 427 -640 640 -640 509 -640 529 -640 480 -640 415 -640 425 -640 427 -640 480 -640 480 -640 480 -640 640 -427 640 -640 427 -427 640 -480 640 -640 426 -333 500 -640 454 -640 427 -640 480 -640 640 -640 480 -640 429 -424 640 -640 581 -640 331 -500 375 -640 480 -640 427 -640 403 -640 480 -640 426 -640 480 -640 348 -640 298 -640 480 -640 160 -500 385 -425 640 -640 480 -640 480 -433 640 -640 551 -424 640 -640 462 -480 640 -640 424 -500 375 -640 583 -640 427 -427 640 -640 425 -640 521 -640 480 -640 480 -425 640 -640 426 -333 500 -640 424 -480 640 -426 640 -249 640 -640 427 -500 375 -374 500 -612 612 -640 427 -640 480 -308 500 -640 480 -640 466 -640 480 -500 375 -640 480 -640 427 -612 612 -640 480 -640 426 -640 416 -480 640 -500 333 -640 380 -427 640 -640 480 -640 383 -500 335 -500 375 -500 500 -640 441 -346 500 -480 640 -612 612 -640 427 -640 425 -426 640 -640 427 -640 427 -640 427 -640 480 -640 480 -640 478 -640 427 -640 480 -612 612 -640 428 -640 429 -640 480 -500 375 -640 480 -480 272 -640 480 -640 480 -640 560 -500 319 -480 640 -640 427 -640 426 -500 375 -427 640 -640 427 -640 427 -640 425 -500 375 -640 480 -640 480 -426 640 -640 439 -640 480 -640 292 -480 640 -500 347 -480 640 -640 427 -640 480 -480 640 -640 427 -640 478 -640 512 -640 480 -640 480 -500 340 -425 640 -640 480 -640 478 -512 640 -500 375 -640 426 -426 640 -640 480 -640 424 -333 500 -640 328 -480 640 -640 480 -640 480 -447 500 -640 427 -640 371 -480 640 -427 640 -640 480 -500 375 -640 480 -640 211 -640 427 -375 500 -480 360 -640 424 -480 640 -480 640 -480 640 -480 640 -500 500 -612 612 -545 640 -640 480 -427 640 -640 480 -498 640 -500 333 -640 466 -640 416 -640 480 -612 612 -480 640 -322 500 -640 399 -500 375 -640 480 -640 457 -640 480 -640 426 -640 425 -640 480 -640 480 -500 375 -640 427 -375 500 -640 480 -640 480 -640 481 -640 425 -640 421 -426 640 -640 427 -427 640 -612 612 -640 426 -640 360 -640 470 -640 640 -640 427 -640 360 -500 333 -640 430 -640 480 -500 334 -640 425 -640 427 -640 480 -640 429 -614 640 -640 427 -640 338 -640 480 -640 480 -640 427 -640 480 -478 640 -640 481 -514 640 -640 480 -640 426 -640 422 -640 480 -640 348 -640 480 -640 480 -640 426 -640 480 -640 480 -640 427 -500 375 -500 330 -640 427 -640 479 -480 640 -640 480 -612 612 -640 427 -640 427 -361 431 -640 493 -640 480 -612 612 -388 500 -640 425 -427 640 -640 504 -640 428 -640 480 -640 424 -640 425 -640 426 -480 640 -612 612 -640 424 -640 426 -640 480 -640 427 -640 506 -640 425 -401 640 -640 427 -640 482 -640 437 -640 480 -500 328 -640 480 -640 480 -478 640 -500 375 -480 640 -640 360 -640 480 -426 640 -640 437 -640 424 -427 640 -640 518 -640 426 -500 387 -640 480 -640 640 -640 380 -640 480 -640 480 -333 500 -480 640 -640 376 -640 407 -640 493 -640 407 -640 480 -389 640 -640 480 -480 640 -611 640 -640 480 -500 375 -500 332 -640 348 -640 440 -640 480 -640 480 -335 500 -640 480 -500 375 -427 640 -451 640 -494 640 -640 361 -426 640 -640 281 -640 480 -426 640 -640 481 -640 508 -640 411 -609 640 -480 640 -456 640 -612 612 -640 480 -640 640 -375 500 -640 427 -500 333 -640 425 -640 480 -500 375 -500 375 -640 536 -500 375 -640 480 -640 599 -640 426 -500 283 -640 480 -429 640 -640 360 -640 386 -426 640 -640 426 -640 640 -640 425 -640 426 -640 480 -640 427 -369 500 -640 427 -640 480 -640 480 -640 480 -425 640 -427 640 -640 501 -480 640 -640 427 -375 500 -640 480 -640 428 -640 427 -511 640 -480 640 -640 427 -581 345 -640 468 -640 480 -640 579 -640 424 -426 640 -427 640 -640 427 -640 388 -640 480 -640 480 -640 425 -640 428 -333 500 -427 640 -640 426 -500 375 -640 419 -640 480 -640 480 -640 428 -640 640 -640 480 -500 375 -427 640 -640 360 -500 375 -640 426 -640 427 -427 640 -360 640 -640 480 -500 400 -640 426 -640 512 -640 518 -500 406 -640 480 -480 640 -640 478 -640 454 -375 500 -640 480 -480 640 -640 427 -640 360 -500 333 -640 480 -640 427 -426 640 -500 375 -426 640 -375 500 -640 480 -640 427 -640 480 -428 640 -640 418 -640 480 -640 480 -640 428 -640 427 -640 426 -640 480 -640 449 -640 427 -427 640 -425 640 -640 480 -640 479 -640 480 -640 427 -480 640 -640 427 -333 500 -640 480 -426 640 -640 428 -640 478 -500 375 -427 640 -444 640 -640 480 -640 480 -640 427 -640 466 -426 319 -373 640 -640 421 -640 448 -421 640 -640 427 -640 480 -640 445 -480 640 -396 640 -640 480 -640 480 -640 476 -480 640 -640 426 -612 612 -640 394 -640 480 -640 480 -640 480 -500 402 -640 427 -640 428 -640 427 -640 480 -640 480 -640 360 -480 640 -640 480 -504 378 -512 640 -640 480 -640 427 -640 215 -425 640 -500 375 -640 597 -640 427 -612 612 -500 374 -480 640 -640 427 -640 480 -483 640 -480 640 -640 480 -500 329 -500 375 -500 438 -640 425 -567 640 -640 480 -640 480 -375 500 -427 640 -640 480 -500 375 -375 500 -640 480 -640 480 -500 393 -461 640 -640 427 -500 375 -640 499 -500 375 -640 427 -480 640 -350 450 -640 427 -640 640 -640 427 -640 512 -480 640 -400 257 -500 333 -640 356 -640 360 -526 640 -500 333 -640 427 -391 640 -379 640 -640 425 -640 480 -500 375 -640 501 -500 335 -640 480 -500 281 -640 640 -480 640 -480 640 -500 351 -640 427 -480 640 -480 640 -640 480 -640 480 -500 375 -371 500 -640 480 -427 640 -640 424 -640 427 -500 381 -500 297 -640 480 -480 640 -640 436 -480 640 -640 518 -480 640 -640 321 -640 428 -640 480 -640 553 -500 500 -480 640 -493 640 -500 233 -640 427 -640 480 -640 480 -640 458 -500 375 -640 480 -500 332 -375 500 -640 480 -640 427 -640 480 -640 480 -640 268 -427 640 -640 480 -427 640 -640 427 -500 333 -640 457 -640 480 -640 480 -612 612 -640 480 -640 427 -500 370 -640 427 -640 427 -640 480 -640 480 -640 480 -500 375 -640 478 -640 480 -640 480 -478 640 -640 425 -640 463 -640 480 -612 612 -640 360 -640 427 -640 480 -600 600 -640 480 -375 500 -640 480 -640 454 -500 400 -480 640 -640 480 -398 640 -640 427 -640 427 -640 443 -640 480 -640 427 -640 480 -640 429 -640 478 -640 360 -384 640 -414 640 -264 640 -640 359 -640 425 -427 640 -333 500 -612 612 -640 360 -640 480 -500 334 -424 640 -529 640 -640 228 -640 480 -640 480 -640 360 -640 426 -640 480 -640 360 -640 427 -640 359 -640 426 -640 428 -640 309 -640 427 -612 612 -640 478 -640 425 -500 333 -640 426 -640 477 -640 581 -500 375 -640 409 -640 427 -640 480 -428 640 -640 480 -640 480 -480 640 -640 449 -640 480 -640 427 -612 612 -500 375 -640 419 -640 420 -640 478 -640 417 -424 640 -640 425 -640 293 -426 640 -640 480 -640 428 -640 427 -480 640 -500 375 -640 480 -640 480 -640 480 -640 480 -411 640 -640 425 -339 500 -500 375 -640 480 -640 326 -640 480 -640 427 -640 480 -640 427 -640 478 -640 427 -640 427 -640 480 -640 425 -480 640 -640 480 -640 478 -640 427 -640 221 -640 478 -640 428 -612 612 -427 640 -640 426 -640 480 -500 430 -640 401 -640 480 -640 427 -500 300 -640 427 -640 427 -640 480 -640 413 -500 375 -640 478 -612 612 -640 478 -640 480 -640 427 -640 480 -640 427 -640 439 -500 334 -640 480 -640 427 -640 480 -640 424 -457 640 -640 426 -480 640 -640 433 -480 640 -640 480 -432 640 -640 414 -640 480 -500 344 -640 480 -612 612 -427 640 -612 612 -640 425 -640 361 -640 480 -640 394 -500 375 -640 425 -640 478 -640 427 -375 500 -640 593 -381 640 -640 426 -640 424 -500 281 -640 513 -640 480 -333 500 -500 395 -480 475 -480 640 -640 480 -480 640 -428 640 -612 612 -429 640 -640 480 -640 449 -640 430 -500 375 -640 482 -360 640 -478 640 -640 480 -423 640 -427 640 -640 480 -640 478 -640 383 -480 640 -500 375 -480 640 -375 500 -640 480 -640 480 -640 480 -640 480 -480 640 -640 480 -640 564 -640 480 -187 140 -640 427 -500 459 -428 640 -640 428 -375 500 -640 480 -640 504 -640 424 -500 400 -583 640 -640 427 -640 480 -612 612 -640 489 -612 612 -640 480 -469 640 -463 640 -640 480 -640 480 -640 550 -500 407 -500 210 -640 480 -640 640 -640 478 -612 612 -480 640 -500 333 -640 480 -640 429 -640 480 -427 640 -500 333 -640 480 -640 480 -640 424 -640 360 -321 640 -424 640 -640 450 -640 426 -640 471 -640 427 -640 425 -640 426 -640 425 -498 640 -640 427 -612 612 -640 480 -500 167 -640 424 -640 427 -427 640 -640 480 -640 470 -640 427 -640 480 -539 640 -640 480 -640 480 -500 337 -640 480 -500 332 -332 500 -375 500 -640 480 -590 640 -640 507 -480 640 -640 480 -640 480 -640 427 -500 333 -640 472 -640 427 -395 500 -640 427 -640 425 -640 427 -640 480 -640 427 -640 480 -640 425 -640 640 -427 640 -640 360 -640 348 -612 612 -640 426 -640 425 -640 480 -500 335 -640 433 -640 480 -517 640 -480 640 -427 640 -425 640 -480 640 -640 427 -640 480 -480 640 -640 427 -640 480 -640 425 -640 480 -640 427 -640 480 -640 419 -640 483 -640 425 -426 640 -480 640 -640 338 -640 438 -426 640 -640 640 -640 426 -640 486 -640 483 -500 375 -640 496 -640 480 -640 480 -640 389 -500 333 -640 571 -640 338 -493 500 -640 360 -640 383 -500 375 -640 360 -500 375 -427 640 -427 640 -500 333 -427 640 -640 456 -640 427 -640 428 -480 640 -640 360 -500 429 -640 480 -640 427 -640 427 -335 500 -640 425 -640 478 -640 640 -500 334 -640 480 -640 480 -640 423 -640 480 -640 427 -480 640 -500 375 -640 480 -640 426 -640 427 -640 480 -481 640 -640 425 -640 480 -427 640 -640 430 -640 427 -427 640 -612 612 -640 458 -640 480 -640 480 -640 427 -640 578 -375 500 -640 480 -640 640 -425 640 -500 375 -640 427 -640 480 -640 478 -640 480 -500 375 -640 427 -500 360 -500 375 -640 480 -640 424 -640 480 -417 556 -640 427 -640 480 -612 612 -640 480 -640 480 -480 480 -640 425 -402 640 -640 480 -425 640 -640 425 -333 500 -640 428 -426 640 -427 640 -640 427 -640 480 -640 478 -375 500 -333 500 -500 333 -640 480 -519 640 -500 334 -500 375 -478 640 -640 458 -480 640 -500 376 -480 640 -640 427 -640 426 -427 640 -500 389 -480 640 -640 480 -640 480 -640 480 -500 346 -461 640 -427 640 -640 480 -375 500 -640 493 -640 480 -640 427 -640 480 -640 480 -640 425 -427 640 -640 480 -500 375 -500 332 -640 427 -640 427 -640 480 -612 612 -500 338 -640 450 -640 427 -640 443 -610 493 -640 427 -480 640 -640 480 -481 640 -640 472 -640 436 -640 426 -455 640 -480 640 -640 480 -640 480 -640 480 -640 480 -500 375 -640 426 -640 480 -640 480 -480 640 -640 640 -640 427 -640 427 -640 480 -489 500 -640 480 -640 427 -640 640 -640 640 -640 464 -478 640 -640 367 -640 320 -640 427 -640 427 -427 640 -640 427 -640 504 -640 322 -640 585 -640 480 -640 468 -500 336 -640 323 -612 612 -640 427 -640 426 -640 480 -640 360 -426 640 -640 377 -480 640 -640 425 -640 427 -640 424 -640 422 -482 640 -640 480 -640 425 -640 478 -640 479 -427 640 -478 640 -640 429 -640 594 -640 360 -428 640 -640 523 -640 396 -640 424 -640 480 -640 359 -640 428 -640 511 -640 561 -640 320 -404 640 -500 375 -333 500 -640 383 -640 457 -480 640 -640 360 -640 429 -640 480 -640 480 -426 640 -426 500 -500 333 -426 640 -480 640 -480 640 -640 427 -640 360 -451 640 -604 453 -500 335 -457 640 -640 427 -640 425 -500 333 -500 328 -612 612 -640 427 -480 640 -640 480 -500 253 -640 425 -480 640 -640 457 -480 640 -640 427 -427 640 -640 494 -640 421 -640 426 -640 480 -640 480 -640 424 -500 332 -640 427 -640 427 -500 332 -448 500 -640 425 -500 375 -640 428 -640 480 -640 480 -640 361 -500 375 -640 435 -640 427 -375 500 -640 640 -500 339 -400 267 -640 432 -640 480 -480 640 -640 480 -427 640 -640 427 -640 480 -640 480 -640 427 -640 251 -640 404 -640 426 -640 427 -640 427 -640 320 -375 500 -640 248 -640 480 -640 428 -428 640 -581 604 -640 426 -640 480 -640 426 -640 480 -640 427 -640 480 -612 612 -480 640 -640 480 -640 388 -640 480 -640 424 -500 375 -640 427 -500 375 -612 612 -640 480 -612 612 -500 375 -640 480 -427 640 -640 640 -640 480 -500 375 -640 427 -427 640 -500 383 -640 428 -640 480 -500 469 -426 640 -640 491 -640 429 -640 480 -640 480 -640 512 -500 400 -640 428 -640 480 -500 332 -480 640 -500 333 -640 483 -480 640 -640 480 -375 500 -640 480 -640 480 -500 334 -640 480 -254 500 -640 480 -640 426 -480 640 -640 601 -640 480 -640 360 -640 427 -424 640 -640 480 -640 427 -425 640 -480 640 -612 612 -640 424 -640 480 -640 361 -640 480 -640 427 -426 640 -640 426 -640 427 -640 427 -480 640 -640 480 -640 480 -640 425 -640 480 -640 427 -640 480 -500 375 -480 360 -480 640 -640 428 -640 480 -429 640 -640 428 -640 480 -640 424 -500 461 -424 640 -640 411 -427 640 -640 320 -640 480 -640 480 -640 480 -640 428 -640 480 -429 640 -640 480 -640 427 -640 427 -640 420 -640 480 -640 480 -640 480 -640 484 -640 512 -500 334 -640 463 -640 427 -640 427 -640 418 -500 238 -500 375 -640 480 -640 481 -640 427 -640 480 -427 640 -640 454 -429 640 -640 427 -640 480 -500 347 -640 480 -640 480 -320 240 -640 480 -500 375 -640 480 -640 427 -333 500 -612 612 -612 612 -640 438 -640 427 -640 482 -480 640 -612 612 -612 612 -640 480 -480 640 -640 507 -640 480 -640 426 -640 480 -480 640 -640 427 -640 415 -640 427 -640 480 -500 376 -541 640 -640 426 -500 375 -500 375 -480 640 -640 512 -640 480 -640 427 -640 426 -612 612 -640 480 -640 480 -640 480 -480 640 -453 604 -640 426 -332 500 -430 640 -480 640 -426 640 -500 400 -640 480 -640 434 -500 372 -640 480 -427 640 -640 480 -640 462 -500 333 -640 480 -640 424 -640 480 -640 369 -500 375 -640 478 -383 640 -640 480 -640 480 -640 480 -640 427 -480 640 -640 406 -640 480 -640 359 -640 427 -640 481 -429 500 -640 427 -640 360 -640 429 -640 480 -427 640 -640 480 -640 429 -640 480 -640 480 -640 480 -640 427 -426 640 -640 360 -640 428 -640 471 -640 428 -640 480 -425 640 -500 333 -640 480 -427 640 -640 402 -640 480 -640 426 -500 375 -640 427 -640 359 -640 453 -640 427 -480 640 -640 423 -480 640 -640 480 -640 427 -640 480 -500 375 -500 375 -640 426 -640 480 -640 480 -640 427 -428 640 -500 453 -640 428 -640 427 -640 480 -640 439 -480 640 -500 333 -640 479 -640 480 -640 640 -500 375 -640 427 -640 360 -500 375 -480 640 -640 480 -480 640 -640 427 -640 425 -640 427 -640 480 -640 428 -640 360 -480 640 -640 441 -375 500 -640 441 -640 640 -480 640 -640 428 -640 259 -640 466 -640 425 -500 380 -640 482 -640 359 -427 640 -640 480 -427 640 -427 640 -640 427 -640 480 -640 426 -444 640 -480 640 -640 480 -480 640 -480 640 -480 640 -640 480 -500 320 -612 612 -640 427 -640 427 -640 427 -640 344 -640 425 -640 387 -478 640 -640 426 -640 427 -640 480 -640 428 -640 426 -500 333 -640 480 -640 480 -425 640 -640 480 -384 640 -640 360 -375 500 -500 400 -640 480 -640 490 -640 480 -640 427 -640 427 -480 640 -640 263 -612 612 -375 500 -500 400 -640 427 -640 480 -640 426 -640 424 -640 590 -640 427 -640 427 -640 480 -640 427 -640 480 -500 334 -431 640 -640 480 -480 640 -640 430 -640 480 -640 480 -640 480 -640 427 -425 640 -640 427 -640 401 -640 429 -480 640 -640 480 -640 507 -500 332 -640 427 -640 427 -486 500 -640 480 -640 480 -375 500 -640 425 -640 481 -640 504 -640 480 -427 640 -640 427 -219 500 -640 427 -480 640 -612 612 -639 640 -640 640 -640 423 -500 375 -640 426 -500 375 -480 640 -640 426 -640 426 -620 640 -640 427 -640 426 -612 612 -640 480 -500 358 -640 426 -640 426 -640 427 -640 479 -640 480 -640 279 -640 480 -424 640 -640 426 -640 480 -500 500 -640 427 -640 432 -640 427 -426 640 -430 640 -425 640 -640 424 -640 480 -640 480 -426 640 -640 480 -640 480 -427 640 -640 480 -427 640 -640 415 -640 427 -640 480 -640 377 -333 500 -640 427 -640 427 -640 480 -375 500 -640 457 -500 375 -500 375 -640 425 -424 640 -427 640 -640 444 -640 486 -480 640 -640 426 -640 480 -480 640 -640 426 -640 425 -640 412 -480 640 -640 480 -427 640 -640 426 -480 640 -640 480 -640 480 -640 480 -427 640 -500 393 -427 640 -480 640 -500 375 -640 589 -640 427 -640 359 -640 480 -640 426 -500 375 -640 480 -423 640 -375 500 -640 427 -640 480 -640 427 -640 427 -640 441 -427 640 -426 640 -640 424 -511 640 -640 428 -427 640 -500 375 -500 331 -500 488 -640 427 -640 480 -640 510 -640 426 -640 480 -640 425 -640 429 -640 427 -359 640 -640 425 -640 383 -375 500 -330 500 -640 480 -640 427 -500 375 -640 426 -500 333 -640 386 -640 427 -400 300 -500 375 -500 375 -640 482 -640 360 -640 480 -640 421 -640 480 -480 640 -525 640 -640 244 -640 480 -482 640 -640 294 -640 480 -640 480 -375 500 -496 640 -640 525 -478 640 -640 480 -640 480 -486 640 -640 426 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -640 427 -500 321 -427 640 -427 640 -640 480 -254 336 -640 427 -640 480 -640 640 -400 284 -640 480 -640 541 -640 590 -480 640 -425 640 -640 427 -640 457 -425 640 -640 480 -640 427 -640 425 -640 505 -640 559 -640 426 -640 480 -640 425 -640 427 -500 375 -480 640 -640 427 -479 640 -480 640 -640 478 -640 480 -500 333 -640 480 -640 427 -640 426 -640 511 -640 428 -640 480 -640 426 -480 640 -333 500 -640 480 -640 426 -640 426 -640 427 -458 640 -640 400 -424 640 -640 480 -640 318 -640 427 -360 640 -640 480 -640 480 -640 480 -640 480 -612 612 -640 389 -640 457 -640 480 -500 334 -640 480 -425 640 -640 480 -640 401 -640 480 -640 399 -640 427 -500 274 -213 320 -480 640 -333 500 -640 480 -512 640 -640 427 -640 480 -640 480 -640 427 -640 426 -640 480 -640 379 -640 480 -425 640 -427 640 -640 480 -640 640 -500 333 -354 500 -640 480 -426 640 -640 480 -503 640 -640 480 -427 640 -640 480 -500 375 -640 478 -500 375 -640 480 -427 640 -640 425 -640 427 -640 426 -500 332 -516 640 -428 640 -640 480 -401 131 -640 443 -480 640 -360 640 -480 640 -500 375 -640 474 -503 640 -640 480 -640 427 -640 480 -640 480 -640 427 -640 480 -640 456 -640 427 -640 597 -640 450 -640 383 -640 426 -640 428 -640 427 -480 640 -640 480 -640 440 -640 426 -640 457 -640 480 -480 640 -640 429 -640 426 -500 332 -640 360 -640 478 -480 640 -640 427 -640 480 -500 375 -640 480 -640 478 -640 480 -640 427 -500 375 -640 428 -480 640 -426 640 -640 304 -640 480 -640 427 -612 612 -640 480 -640 480 -640 512 -375 500 -640 427 -500 334 -500 374 -333 500 -612 612 -640 400 -640 284 -640 480 -425 640 -640 486 -640 426 -480 640 -640 427 -640 480 -640 480 -426 640 -640 381 -640 426 -640 481 -640 480 -500 351 -427 640 -500 375 -640 427 -640 427 -640 480 -640 480 -640 480 -500 427 -640 425 -640 427 -640 427 -640 480 -600 400 -359 500 -500 375 -640 480 -640 489 -500 375 -529 640 -500 375 -640 480 -480 640 -640 480 -480 640 -640 444 -427 640 -640 425 -640 426 -612 612 -640 480 -500 357 -418 640 -427 640 -427 640 -500 382 -640 480 -426 640 -375 500 -640 478 -640 478 -500 333 -640 493 -500 333 -357 500 -603 640 -480 640 -640 427 -640 427 -612 612 -640 480 -640 453 -500 334 -640 480 -500 375 -640 480 -640 480 -640 426 -640 480 -640 424 -500 335 -480 640 -640 480 -480 640 -480 640 -640 424 -640 427 -480 640 -500 333 -640 427 -500 375 -640 480 -500 375 -640 427 -640 480 -640 427 -500 375 -427 640 -640 471 -640 480 -640 480 -640 579 -640 427 -480 640 -612 612 -373 640 -640 427 -610 391 -640 253 -640 429 -640 426 -640 425 -640 538 -427 640 -480 640 -640 428 -640 424 -640 427 -640 480 -640 349 -480 640 -640 478 -640 351 -640 384 -400 600 -500 375 -640 522 -640 480 -640 518 -640 427 -333 500 -640 391 -480 640 -467 640 -612 612 -640 426 -500 375 -516 640 -480 640 -333 500 -640 480 -364 468 -500 399 -427 640 -500 400 -640 464 -640 480 -640 429 -341 640 -425 640 -375 500 -640 432 -640 334 -640 427 -480 640 -640 480 -500 375 -451 640 -640 480 -640 480 -640 480 -640 427 -640 470 -640 426 -640 430 -640 482 -640 427 -500 375 -640 360 -500 375 -500 375 -640 462 -612 612 -640 480 -640 425 -426 640 -500 334 -640 427 -436 640 -640 480 -500 375 -640 427 -500 363 -640 457 -500 334 -500 429 -480 640 -640 428 -640 427 -640 427 -500 332 -640 319 -500 336 -640 481 -432 500 -500 333 -640 360 -640 427 -461 640 -640 480 -500 326 -640 425 -480 640 -640 427 -640 427 -640 431 -640 427 -640 539 -640 487 -427 640 -640 526 -640 427 -640 427 -612 612 -442 500 -640 480 -640 495 -480 640 -424 640 -480 640 -640 459 -640 480 -640 426 -640 427 -640 425 -640 480 -640 427 -640 458 -640 427 -640 362 -640 428 -640 451 -640 423 -480 640 -640 428 -640 480 -640 480 -480 640 -640 480 -640 421 -640 427 -480 640 -480 640 -640 480 -640 428 -480 640 -640 427 -640 480 -640 427 -640 427 -640 427 -427 640 -640 427 -500 375 -640 427 -640 427 -640 426 -439 603 -640 445 -640 480 -640 426 -560 640 -480 640 -640 316 -640 480 -427 640 -480 640 -640 480 -640 427 -431 640 -375 500 -640 480 -640 480 -640 427 -640 428 -640 427 -640 443 -620 367 -640 427 -640 480 -640 427 -640 581 -640 480 -640 480 -640 480 -640 640 -500 375 -640 494 -480 640 -640 480 -640 425 -640 480 -640 480 -554 640 -640 480 -425 640 -478 640 -500 375 -640 480 -640 480 -640 427 -480 640 -640 480 -427 640 -526 640 -500 375 -416 640 -640 427 -640 480 -332 500 -640 424 -427 640 -640 448 -640 640 -640 427 -640 427 -640 480 -640 426 -640 480 -500 375 -480 640 -640 427 -500 375 -640 480 -518 640 -640 480 -640 435 -500 375 -500 375 -639 640 -463 640 -500 324 -500 375 -480 640 -480 640 -640 396 -640 426 -383 640 -640 351 -640 427 -500 493 -640 480 -640 480 -500 375 -640 427 -640 429 -640 480 -640 480 -480 640 -640 452 -500 384 -375 500 -500 334 -640 428 -427 640 -640 480 -640 480 -640 640 -640 480 -640 427 -640 424 -640 427 -640 463 -640 480 -640 480 -640 421 -640 428 -640 427 -478 640 -640 480 -640 427 -500 375 -640 480 -640 427 -640 427 -426 640 -640 480 -640 480 -640 480 -640 480 -640 433 -640 480 -640 425 -640 480 -375 500 -640 428 -640 427 -640 430 -480 640 -480 640 -640 480 -640 398 -640 428 -640 480 -640 478 -426 640 -451 451 -640 480 -640 434 -339 500 -640 511 -640 415 -640 640 -480 640 -374 500 -427 640 -640 427 -640 561 -640 478 -640 427 -640 480 -500 375 -413 640 -640 521 -443 640 -425 640 -375 500 -500 375 -640 480 -640 480 -640 426 -640 426 -427 640 -640 478 -640 480 -612 612 -428 640 -640 480 -602 640 -448 640 -319 500 -500 375 -480 640 -480 640 -640 146 -640 427 -640 427 -640 427 -640 512 -480 640 -295 640 -640 427 -640 475 -640 426 -640 480 -640 360 -640 480 -426 640 -480 640 -640 480 -500 375 -640 427 -640 426 -640 480 -640 427 -640 480 -361 640 -640 480 -640 480 -333 500 -442 640 -640 480 -640 480 -640 427 -640 480 -500 375 -640 449 -500 375 -640 378 -500 376 -480 640 -640 460 -500 375 -640 480 -500 375 -428 640 -427 640 -640 360 -640 427 -640 479 -640 427 -640 480 -500 375 -640 452 -640 405 -640 481 -640 495 -640 427 -640 480 -396 640 -640 360 -640 427 -640 480 -480 640 -640 427 -640 427 -640 480 -640 331 -640 480 -640 432 -500 375 -640 480 -640 480 -640 480 -500 375 -640 427 -640 480 -640 433 -480 640 -640 425 -480 640 -640 480 -480 640 -640 428 -640 480 -571 640 -640 480 -640 480 -500 375 -640 490 -640 424 -640 459 -500 375 -640 360 -612 612 -640 480 -640 426 -640 476 -640 428 -500 375 -640 480 -640 480 -478 640 -640 512 -640 480 -640 418 -640 481 -640 562 -604 403 -640 426 -640 425 -425 640 -640 590 -640 425 -640 414 -500 333 -640 480 -640 428 -640 427 -640 480 -426 640 -479 640 -480 640 -640 480 -640 640 -640 426 -640 516 -500 375 -480 640 -500 375 -640 427 -640 486 -500 375 -500 334 -400 500 -640 428 -640 412 -640 427 -612 612 -640 456 -640 502 -640 424 -640 426 -461 640 -640 480 -480 640 -640 480 -640 601 -640 427 -640 480 -640 360 -640 603 -640 417 -640 480 -640 503 -640 427 -640 480 -640 427 -640 487 -640 441 -640 427 -612 612 -500 375 -427 640 -500 311 -640 426 -640 459 -640 513 -640 426 -500 375 -426 640 -640 480 -427 640 -640 405 -427 640 -640 446 -640 480 -480 640 -640 427 -640 359 -640 424 -486 500 -375 500 -640 480 -640 427 -640 425 -640 406 -640 428 -480 640 -640 481 -640 539 -480 640 -375 500 -500 332 -640 480 -640 428 -640 426 -500 500 -500 333 -640 262 -500 375 -480 640 -480 640 -541 640 -480 640 -640 640 -640 427 -375 500 -640 640 -640 459 -640 480 -640 487 -500 375 -640 429 -424 640 -640 640 -500 372 -640 480 -404 640 -640 480 -480 640 -640 480 -640 427 -640 427 -424 640 -640 426 -640 428 -640 428 -640 480 -640 426 -500 375 -458 640 -640 480 -640 480 -360 640 -480 640 -640 569 -640 480 -640 480 -640 426 -640 427 -640 425 -480 640 -640 455 -640 427 -640 427 -640 480 -640 358 -612 612 -428 640 -640 480 -425 640 -640 427 -640 427 -640 427 -500 332 -640 480 -480 640 -500 375 -640 427 -640 480 -600 450 -640 480 -427 640 -640 352 -640 480 -640 480 -640 480 -480 640 -640 480 -640 427 -640 480 -640 425 -500 333 -427 640 -360 640 -640 552 -480 640 -480 640 -500 375 -640 486 -640 480 -640 360 -307 461 -640 480 -640 427 -426 640 -500 436 -480 640 -500 333 -640 480 -480 640 -640 640 -334 500 -333 500 -425 640 -640 354 -500 375 -640 480 -640 480 -640 480 -480 640 -500 375 -640 508 -640 376 -640 480 -640 480 -640 480 -612 612 -612 612 -423 640 -389 640 -640 640 -500 334 -500 375 -640 480 -332 500 -640 480 -500 333 -490 640 -640 425 -600 449 -640 391 -387 600 -640 360 -425 640 -640 360 -640 480 -640 277 -640 480 -640 428 -640 411 -480 640 -500 375 -640 480 -640 426 -640 427 -640 480 -640 427 -640 427 -480 640 -640 640 -640 640 -640 480 -500 334 -391 640 -640 415 -640 480 -480 640 -640 427 -480 640 -640 480 -389 500 -640 427 -640 396 -640 427 -640 480 -640 480 -640 480 -640 303 -640 480 -640 436 -640 429 -457 640 -640 427 -500 375 -640 427 -640 480 -640 425 -640 480 -640 489 -640 419 -640 569 -640 480 -424 640 -640 427 -640 416 -640 418 -640 371 -640 428 -500 413 -640 427 -640 480 -480 640 -640 561 -640 423 -500 375 -640 480 -640 360 -640 480 -529 640 -640 425 -480 640 -428 640 -640 480 -640 409 -359 640 -427 640 -374 436 -640 428 -640 360 -640 426 -500 375 -640 480 -640 360 -640 427 -480 640 -640 425 -640 480 -500 333 -426 640 -640 427 -640 480 -640 428 -480 640 -480 640 -433 640 -640 428 -640 483 -640 401 -640 428 -480 640 -427 640 -640 298 -427 640 -640 480 -480 640 -427 640 -480 640 -500 332 -640 480 -640 480 -640 480 -640 466 -640 425 -640 480 -640 427 -640 445 -640 427 -484 500 -640 320 -640 480 -612 612 -427 640 -640 480 -640 425 -612 612 -640 426 -640 427 -504 640 -500 375 -425 640 -640 424 -427 640 -640 480 -640 427 -640 427 -640 346 -640 480 -640 427 -640 480 -640 371 -640 426 -640 480 -500 493 -640 480 -640 480 -640 427 -640 480 -640 360 -612 612 -640 418 -640 480 -640 427 -435 640 -640 425 -500 375 -500 375 -429 640 -339 500 -640 426 -640 427 -640 428 -640 427 -375 500 -640 360 -640 384 -640 428 -640 371 -640 424 -640 426 -612 612 -640 480 -500 357 -500 375 -612 612 -640 480 -640 427 -500 333 -640 640 -427 640 -640 267 -640 480 -640 382 -426 640 -640 481 -640 481 -480 640 -490 640 -425 640 -612 612 -640 480 -640 480 -640 427 -480 640 -640 480 -640 427 -640 480 -612 612 -640 426 -424 640 -640 480 -640 427 -640 427 -640 427 -640 426 -500 375 -640 480 -640 401 -375 500 -640 426 -640 480 -640 414 -332 500 -640 436 -640 480 -640 480 -640 480 -480 640 -500 375 -500 235 -640 480 -500 375 -640 476 -480 640 -640 506 -640 427 -640 429 -375 500 -640 480 -375 500 -425 640 -440 640 -640 427 -640 428 -640 480 -640 425 -640 360 -640 480 -640 480 -640 480 -538 640 -427 640 -640 480 -640 480 -640 303 -640 468 -640 426 -640 576 -640 382 -640 476 -640 640 -640 427 -500 375 -640 428 -500 375 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -480 640 -480 640 -640 503 -640 430 -640 480 -640 426 -428 640 -428 640 -640 427 -640 351 -640 438 -480 640 -640 640 -640 360 -640 578 -640 480 -640 427 -640 426 -640 427 -480 640 -640 427 -480 640 -640 437 -500 379 -500 374 -640 480 -640 429 -640 428 -640 427 -640 427 -640 480 -480 640 -478 640 -640 480 -427 640 -640 298 -640 480 -640 480 -640 426 -640 480 -640 361 -424 640 -640 480 -640 419 -640 481 -480 640 -640 426 -640 428 -480 640 -480 640 -640 480 -427 640 -640 425 -640 480 -640 427 -640 424 -500 375 -640 427 -640 427 -427 640 -480 640 -640 427 -640 427 -640 428 -640 428 -640 427 -640 425 -500 333 -640 480 -640 427 -640 480 -640 478 -640 426 -500 375 -640 427 -640 498 -640 364 -500 375 -640 427 -640 480 -640 429 -480 640 -480 640 -640 424 -640 478 -640 427 -375 500 -388 500 -640 427 -640 426 -640 383 -640 426 -640 480 -640 396 -640 353 -640 425 -640 374 -640 427 -640 480 -640 480 -640 480 -480 640 -493 640 -640 480 -640 427 -480 640 -640 433 -640 480 -640 425 -640 427 -612 612 -640 495 -480 640 -640 480 -640 480 -640 478 -264 640 -640 427 -436 640 -640 425 -640 428 -640 480 -640 480 -427 640 -425 640 -427 640 -640 344 -500 375 -600 450 -640 480 -640 426 -480 640 -640 458 -640 640 -640 457 -640 426 -640 428 -640 442 -640 480 -640 480 -640 428 -640 480 -640 480 -426 640 -427 640 -640 640 -640 480 -640 640 -640 427 -640 411 -640 507 -640 480 -640 480 -640 425 -612 612 -500 346 -640 640 -640 424 -500 332 -612 612 -640 480 -480 640 -640 480 -500 375 -333 500 -640 427 -640 480 -640 501 -640 359 -640 427 -425 640 -640 432 -640 481 -640 426 -640 480 -640 480 -640 480 -480 640 -640 426 -640 482 -480 640 -640 428 -640 480 -640 428 -640 428 -500 375 -640 578 -640 428 -500 333 -640 480 -640 428 -640 480 -640 410 -640 427 -500 333 -640 426 -640 480 -640 361 -612 612 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 487 -640 426 -640 381 -640 428 -640 427 -360 480 -640 361 -480 640 -500 333 -640 478 -428 640 -640 360 -640 427 -640 480 -500 375 -480 640 -375 500 -500 318 -613 640 -427 640 -640 427 -640 480 -480 640 -500 388 -180 240 -640 444 -640 480 -640 426 -500 375 -509 640 -640 426 -640 564 -640 427 -269 640 -640 480 -638 356 -640 480 -458 640 -500 375 -640 480 -480 361 -640 480 -500 375 -640 427 -500 375 -640 360 -640 428 -640 409 -640 427 -640 360 -640 427 -640 640 -640 480 -640 427 -640 412 -306 408 -427 640 -640 425 -640 480 -640 480 -414 640 -640 427 -428 640 -640 304 -640 480 -640 427 -640 425 -640 640 -480 640 -640 480 -640 427 -458 640 -640 480 -480 640 -640 480 -640 427 -640 480 -480 640 -640 428 -480 640 -500 375 -640 429 -640 588 -640 481 -640 418 -434 640 -640 422 -640 427 -640 480 -640 491 -640 426 -640 427 -640 480 -640 480 -500 375 -640 427 -640 510 -478 640 -500 375 -640 456 -640 427 -480 640 -480 640 -640 480 -640 481 -640 501 -427 640 -640 480 -375 500 -640 416 -500 375 -500 375 -640 480 -480 640 -375 500 -640 439 -458 640 -640 399 -500 282 -640 480 -640 427 -640 427 -428 640 -640 480 -640 480 -500 375 -640 426 -425 640 -640 480 -640 480 -640 480 -640 427 -640 427 -640 480 -424 640 -640 437 -640 427 -500 375 -426 640 -640 424 -417 640 -640 480 -640 480 -480 640 -640 480 -640 427 -640 536 -567 640 -640 425 -640 480 -640 457 -640 640 -640 478 -640 360 -640 427 -640 480 -640 427 -333 500 -640 434 -640 425 -640 424 -480 640 -612 612 -640 425 -640 480 -640 438 -495 500 -426 640 -640 427 -429 640 -640 558 -640 428 -640 480 -500 188 -480 640 -640 360 -612 612 -640 425 -640 424 -640 428 -640 480 -640 428 -500 244 -500 375 -500 375 -640 425 -478 640 -640 428 -640 480 -640 427 -500 375 -426 640 -640 480 -640 457 -640 480 -640 320 -640 383 -640 359 -640 436 -640 426 -640 427 -640 361 -640 428 -640 480 -640 424 -640 475 -640 414 -480 640 -360 640 -480 640 -640 480 -612 612 -640 427 -338 450 -640 427 -464 640 -640 421 -640 480 -640 428 -640 427 -500 375 -640 480 -640 427 -640 480 -640 427 -640 480 -500 375 -480 640 -640 426 -640 425 -538 640 -640 480 -640 480 -640 480 -640 480 -478 640 -640 478 -640 427 -640 480 -640 480 -500 375 -640 427 -480 640 -640 480 -427 640 -640 480 -640 509 -640 480 -640 471 -640 480 -612 612 -337 500 -640 480 -427 640 -513 640 -640 480 -474 640 -640 428 -480 640 -325 500 -640 480 -640 426 -640 481 -409 640 -640 360 -640 311 -640 426 -413 640 -640 424 -640 480 -639 640 -640 427 -640 480 -383 500 -427 640 -335 500 -640 427 -640 426 -640 427 -640 480 -640 425 -640 427 -640 427 -640 480 -640 433 -480 640 -640 416 -640 366 -640 427 -640 480 -640 391 -333 500 -640 436 -640 425 -640 428 -640 480 -542 640 -431 640 -640 427 -640 480 -334 500 -640 480 -640 425 -423 640 -425 640 -494 640 -480 640 -640 427 -640 427 -500 375 -550 412 -640 518 -640 429 -640 427 -640 480 -640 481 -640 480 -640 480 -640 477 -640 427 -640 427 -640 487 -640 426 -640 480 -512 384 -640 516 -640 435 -457 640 -480 640 -640 427 -376 500 -413 500 -640 431 -480 640 -427 640 -640 433 -640 480 -640 484 -640 428 -640 359 -640 426 -500 375 -500 375 -500 400 -480 640 -480 640 -450 338 -427 640 -500 333 -640 480 -640 361 -640 480 -427 640 -640 424 -640 425 -375 500 -419 500 -640 427 -500 375 -640 427 -463 640 -640 480 -640 434 -500 333 -500 375 -500 375 -640 427 -480 640 -640 480 -640 480 -640 427 -640 480 -480 640 -640 480 -498 640 -612 612 -640 427 -640 480 -359 640 -500 333 -426 640 -640 480 -424 640 -375 500 -640 493 -500 333 -640 480 -427 640 -640 429 -640 480 -480 640 -640 480 -640 360 -640 460 -640 427 -640 480 -500 334 -640 457 -640 401 -500 381 -640 427 -640 411 -640 424 -640 427 -500 357 -404 640 -463 640 -640 428 -640 427 -640 480 -426 640 -640 426 -426 640 -640 481 -640 427 -640 481 -640 427 -640 427 -480 640 -427 640 -333 500 -640 480 -640 480 -640 428 -425 640 -427 640 -640 480 -640 480 -427 640 -640 426 -640 480 -480 640 -640 426 -503 640 -480 640 -640 480 -333 500 -640 480 -640 426 -640 480 -640 428 -640 480 -480 640 -640 426 -640 427 -640 480 -388 640 -640 374 -640 427 -480 640 -427 640 -500 375 -640 429 -640 585 -640 427 -500 383 -640 427 -640 394 -640 426 -640 480 -333 500 -426 640 -640 480 -427 640 -640 422 -640 480 -640 426 -640 425 -428 640 -640 427 -640 427 -640 425 -640 427 -640 480 -640 348 -640 480 -640 427 -640 480 -345 500 -640 384 -640 480 -640 427 -480 640 -640 427 -640 426 -640 480 -480 640 -332 500 -640 427 -640 480 -640 480 -640 543 -640 429 -640 415 -640 640 -500 377 -500 375 -640 426 -640 480 -640 519 -640 480 -640 361 -427 640 -640 480 -640 429 -640 427 -640 634 -480 640 -479 640 -427 640 -500 375 -500 452 -500 375 -640 431 -640 429 -640 427 -640 426 -640 424 -160 120 -427 640 -640 480 -640 480 -640 424 -427 640 -640 480 -640 417 -640 480 -500 333 -273 500 -640 640 -500 334 -386 336 -640 450 -640 426 -640 480 -427 640 -640 480 -640 480 -625 640 -640 427 -157 160 -480 640 -640 480 -500 367 -640 359 -500 375 -640 428 -500 375 -500 319 -375 500 -640 427 -640 426 -480 640 -640 480 -640 480 -640 427 -640 473 -640 425 -640 394 -383 640 -640 426 -640 427 -640 427 -640 428 -640 427 -640 480 -640 570 -480 640 -500 333 -640 457 -640 422 -640 480 -640 480 -640 640 -640 383 -640 427 -640 425 -640 256 -426 640 -640 427 -640 478 -640 427 -500 375 -640 424 -640 480 -640 478 -500 375 -640 427 -640 427 -640 427 -640 479 -500 334 -375 500 -640 425 -428 640 -640 425 -640 640 -640 428 -434 500 -640 429 -640 503 -640 424 -640 427 -640 480 -640 440 -640 480 -427 640 -640 480 -612 612 -640 425 -640 400 -640 428 -640 480 -640 427 -427 640 -640 446 -640 464 -640 480 -333 500 -640 361 -640 480 -640 480 -427 640 -640 428 -612 612 -426 640 -640 427 -640 480 -500 412 -495 640 -640 426 -427 640 -640 424 -640 427 -640 480 -480 640 -640 480 -413 500 -640 426 -386 640 -640 480 -640 487 -640 480 -480 640 -600 400 -640 480 -500 375 -640 513 -640 426 -640 322 -500 375 -640 480 -427 640 -428 640 -640 480 -640 425 -454 640 -640 424 -427 640 -640 359 -480 640 -640 509 -640 428 -640 480 -480 640 -640 480 -640 480 -640 426 -640 427 -640 480 -640 426 -640 480 -640 479 -640 493 -640 480 -480 640 -640 480 -500 375 -640 427 -640 318 -640 480 -640 480 -640 425 -640 480 -640 533 -640 427 -640 480 -640 426 -640 427 -640 427 -400 600 -640 373 -640 426 -640 424 -640 557 -640 427 -640 427 -640 427 -640 427 -640 413 -426 640 -640 480 -540 640 -640 480 -640 427 -427 640 -640 454 -640 480 -640 480 -480 640 -640 480 -640 481 -640 440 -500 375 -640 480 -640 480 -640 480 -427 640 -376 500 -640 480 -640 480 -640 523 -640 427 -640 640 -640 480 -640 480 -500 333 -640 336 -606 640 -640 427 -612 612 -640 480 -640 480 -640 480 -640 480 -427 640 -425 640 -640 480 -640 480 -502 640 -612 612 -640 480 -640 485 -640 313 -480 640 -640 427 -640 427 -640 429 -640 427 -640 513 -640 480 -640 480 -640 426 -640 480 -640 480 -480 640 -640 426 -640 480 -640 480 -640 427 -640 480 -523 640 -640 426 -375 500 -426 640 -640 425 -640 425 -427 640 -640 480 -640 427 -640 480 -429 640 -640 427 -500 378 -639 640 -640 427 -640 480 -478 640 -640 480 -640 426 -500 375 -640 426 -411 640 -640 480 -640 480 -640 480 -640 427 -640 424 -640 371 -640 478 -640 480 -640 425 -640 480 -375 500 -424 640 -500 500 -640 427 -640 480 -640 426 -640 426 -640 480 -500 375 -640 424 -640 427 -640 427 -429 640 -640 378 -498 640 -640 408 -640 480 -480 640 -427 640 -640 427 -640 480 -640 480 -500 375 -500 351 -640 188 -640 486 -640 428 -640 427 -640 424 -640 364 -640 364 -640 384 -500 356 -640 431 -640 427 -640 480 -640 426 -500 375 -500 375 -640 429 -640 425 -640 448 -640 480 -640 480 -640 483 -640 427 -500 375 -375 500 -480 640 -640 354 -640 427 -640 426 -500 375 -640 427 -640 480 -640 480 -640 480 -500 371 -612 612 -640 480 -640 554 -640 549 -640 480 -500 375 -640 360 -640 427 -640 427 -640 480 -500 340 -500 333 -375 500 -640 480 -375 500 -640 394 -640 480 -640 480 -640 427 -640 640 -459 640 -640 480 -640 360 -427 640 -640 224 -480 640 -640 427 -640 428 -500 375 -640 429 -640 480 -640 427 -582 640 -640 480 -640 428 -640 451 -354 640 -426 640 -640 512 -640 480 -640 640 -425 640 -480 640 -640 427 -640 447 -640 480 -500 334 -480 640 -480 640 -640 428 -500 375 -500 375 -640 428 -640 428 -640 480 -640 480 -640 428 -571 640 -500 375 -640 481 -427 640 -500 375 -640 480 -640 480 -640 426 -453 640 -500 335 -640 426 -568 320 -640 429 -640 427 -640 480 -640 480 -640 449 -500 375 -640 424 -500 375 -480 640 -640 319 -640 480 -427 640 -640 427 -480 640 -640 428 -640 428 -640 480 -640 427 -640 478 -427 640 -500 402 -424 640 -640 427 -640 427 -640 480 -640 426 -480 640 -427 640 -640 480 -640 480 -640 480 -480 640 -640 480 -500 286 -427 640 -375 500 -640 427 -640 427 -640 480 -480 640 -500 332 -500 375 -640 427 -640 480 -640 482 -640 456 -640 427 -640 399 -640 480 -640 423 -338 500 -424 640 -640 480 -640 427 -427 640 -640 428 -640 480 -640 640 -640 428 -500 332 -640 480 -640 427 -640 427 -640 424 -640 423 -500 375 -640 480 -640 427 -640 480 -640 360 -480 640 -640 429 -640 478 -500 375 -597 400 -640 426 -465 500 -640 425 -640 480 -640 427 -640 480 -640 480 -429 640 -462 640 -447 640 -640 426 -640 423 -640 426 -640 347 -640 427 -500 375 -640 480 -640 427 -640 426 -640 480 -500 332 -360 640 -427 640 -370 640 -640 426 -640 480 -640 480 -640 427 -640 478 -640 427 -640 427 -427 640 -640 514 -640 426 -622 640 -640 519 -479 640 -500 375 -640 597 -640 429 -640 396 -640 427 -589 640 -640 480 -640 427 -640 480 -640 424 -500 484 -500 375 -640 510 -640 427 -640 470 -480 640 -640 413 -612 612 -640 480 -640 480 -500 333 -427 640 -375 500 -612 612 -640 480 -640 480 -640 480 -426 640 -640 427 -640 428 -640 480 -612 612 -640 429 -456 640 -640 480 -640 484 -480 360 -640 420 -483 640 -640 427 -640 427 -640 427 -640 407 -512 640 -640 480 -480 640 -640 351 -640 480 -640 381 -427 640 -500 375 -640 427 -640 436 -640 480 -480 640 -640 480 -480 640 -640 408 -640 473 -375 500 -640 427 -640 427 -500 375 -640 426 -640 434 -640 425 -640 427 -512 640 -640 426 -612 612 -612 612 -640 480 -640 480 -375 500 -640 428 -640 480 -480 640 -426 640 -640 428 -480 640 -640 427 -640 480 -500 231 -640 427 -427 640 -640 571 -375 500 -417 640 -525 640 -500 375 -640 480 -640 480 -500 333 -360 640 -640 416 -427 640 -640 480 -640 427 -640 427 -640 427 -640 426 -640 427 -640 480 -500 375 -640 480 -500 375 -640 354 -480 640 -480 417 -612 612 -640 480 -640 427 -640 427 -500 375 -480 640 -640 640 -640 427 -640 480 -640 485 -640 366 -427 640 -500 375 -640 425 -640 480 -640 427 -640 480 -640 427 -500 398 -500 375 -640 429 -500 375 -640 427 -640 640 -480 640 -480 640 -640 427 -640 480 -640 427 -640 421 -409 307 -400 500 -640 428 -640 427 -480 640 -500 373 -500 309 -640 480 -500 375 -640 427 -640 480 -640 638 -500 375 -480 640 -640 480 -640 480 -640 454 -640 425 -640 360 -427 640 -640 427 -478 640 -640 481 -480 640 -500 375 -427 640 -500 375 -427 640 -500 348 -428 640 -640 480 -424 640 -640 480 -500 332 -376 500 -500 375 -640 480 -640 480 -640 480 -553 640 -640 515 -640 427 -500 375 -640 427 -640 427 -480 640 -640 427 -640 427 -640 359 -640 512 -640 425 -640 480 -481 640 -612 612 -640 480 -500 333 -640 427 -640 427 -480 640 -640 427 -640 480 -500 336 -640 425 -640 481 -344 640 -339 500 -407 640 -640 427 -640 480 -640 480 -426 640 -640 480 -640 480 -640 427 -333 500 -640 386 -640 480 -640 423 -333 500 -640 480 -640 427 -640 427 -640 481 -640 480 -500 375 -640 480 -640 426 -480 640 -640 427 -640 360 -640 480 -640 457 -640 376 -500 375 -612 612 -640 480 -640 427 -448 336 -640 427 -640 427 -640 480 -386 500 -640 470 -640 480 -427 640 -640 415 -424 640 -640 426 -640 425 -640 427 -640 480 -640 427 -375 500 -640 480 -640 427 -640 428 -640 427 -640 480 -640 480 -425 640 -600 400 -640 428 -427 640 -640 427 -640 501 -640 431 -500 375 -640 426 -640 427 -640 365 -640 425 -499 371 -640 426 -480 640 -481 640 -640 426 -640 427 -640 360 -640 480 -640 489 -500 500 -640 640 -640 428 -640 548 -480 640 -469 500 -640 428 -640 425 -640 426 -640 480 -640 427 -640 424 -640 468 -640 428 -640 427 -640 378 -640 430 -640 427 -640 480 -426 640 -640 427 -640 469 -497 640 -480 640 -640 480 -640 283 -410 640 -640 426 -640 481 -640 358 -640 480 -640 480 -640 439 -640 480 -640 480 -425 640 -640 340 -500 375 -640 379 -640 480 -640 475 -480 640 -640 514 -480 640 -640 427 -640 425 -640 480 -640 454 -640 428 -640 428 -500 375 -640 480 -640 424 -500 332 -640 427 -500 375 -640 427 -500 375 -640 576 -607 640 -640 480 -640 427 -640 480 -640 480 -427 640 -640 427 -640 480 -427 640 -500 333 -425 640 -600 466 -640 427 -640 540 -640 427 -640 461 -640 480 -640 480 -640 424 -640 480 -640 480 -640 480 -427 640 -500 375 -640 480 -640 446 -640 391 -480 640 -500 375 -640 420 -640 429 -426 640 -469 640 -640 640 -640 426 -640 480 -640 480 -640 427 -640 442 -380 640 -640 480 -500 375 -428 640 -640 415 -418 500 -640 425 -480 640 -640 531 -427 640 -640 473 -320 240 -640 457 -640 480 -640 423 -500 375 -375 500 -500 375 -640 427 -640 427 -327 500 -640 360 -500 332 -427 640 -385 500 -640 512 -500 417 -640 427 -640 480 -640 480 -480 640 -640 427 -640 426 -640 480 -211 500 -612 612 -480 640 -640 573 -640 427 -640 438 -640 360 -427 640 -500 333 -500 375 -480 640 -480 640 -640 480 -612 612 -640 360 -640 427 -640 425 -612 612 -640 480 -640 480 -427 640 -628 442 -480 640 -612 612 -640 480 -640 427 -640 478 -480 640 -480 640 -498 640 -500 375 -640 443 -640 427 -640 427 -640 428 -339 500 -480 640 -640 427 -449 640 -500 378 -640 427 -640 395 -470 640 -640 480 -380 330 -640 458 -640 400 -506 640 -640 554 -480 640 -640 427 -333 500 -640 426 -640 427 -640 480 -640 427 -640 480 -640 480 -500 276 -612 612 -612 612 -500 375 -500 500 -640 480 -640 480 -500 370 -640 640 -500 375 -640 480 -640 462 -640 480 -640 564 -640 480 -640 427 -640 427 -500 333 -640 396 -640 427 -500 375 -640 426 -535 640 -640 480 -640 427 -640 400 -448 640 -640 480 -480 640 -334 500 -510 640 -480 640 -500 375 -640 427 -480 640 -640 480 -640 640 -480 640 -448 336 -640 361 -640 426 -480 640 -375 500 -640 480 -500 335 -640 360 -640 489 -480 640 -640 424 -640 480 -500 375 -640 480 -480 640 -500 339 -640 427 -424 640 -500 335 -640 480 -640 412 -640 366 -429 640 -426 640 -640 436 -640 350 -427 640 -640 427 -640 426 -640 480 -640 496 -640 426 -612 612 -640 480 -640 480 -426 640 -640 229 -640 640 -640 480 -640 442 -480 640 -480 640 -640 479 -500 332 -612 612 -640 425 -640 427 -500 333 -426 640 -500 373 -640 435 -640 427 -640 427 -376 500 -500 335 -640 480 -468 640 -640 426 -640 424 -640 419 -640 427 -640 428 -640 428 -500 333 -640 545 -640 360 -640 383 -640 634 -640 360 -640 427 -490 469 -640 425 -640 640 -640 480 -640 480 -640 427 -480 640 -640 424 -428 640 -424 640 -640 427 -640 480 -480 640 -640 480 -640 427 -440 500 -640 427 -426 640 -480 640 -640 428 -640 480 -500 411 -427 640 -640 480 -480 640 -176 384 -427 640 -425 640 -427 640 -640 427 -640 480 -480 640 -640 480 -478 640 -375 500 -640 480 -612 612 -479 500 -480 640 -500 367 -640 640 -640 512 -612 612 -500 500 -334 500 -640 425 -640 480 -640 480 -640 427 -640 425 -640 480 -600 400 -500 332 -612 612 -640 393 -640 480 -640 480 -424 640 -640 480 -640 640 -640 427 -640 435 -640 480 -640 427 -333 500 -512 640 -640 524 -640 480 -640 480 -640 478 -640 426 -375 500 -640 427 -426 640 -426 640 -480 640 -640 427 -640 426 -640 480 -640 425 -640 427 -640 480 -640 425 -640 427 -640 320 -640 426 -480 640 -424 640 -640 427 -640 480 -640 480 -500 333 -640 518 -640 480 -640 359 -640 426 -612 612 -640 427 -428 640 -640 427 -640 480 -427 640 -640 427 -426 640 -640 427 -640 480 -640 428 -640 480 -612 612 -640 523 -640 383 -640 427 -640 480 -640 427 -640 480 -640 480 -480 640 -480 640 -640 427 -640 426 -640 480 -640 432 -500 375 -640 427 -640 423 -640 480 -640 480 -500 375 -640 480 -640 480 -500 357 -640 427 -428 640 -640 426 -428 640 -480 640 -640 426 -612 612 -640 440 -480 640 -480 640 -640 480 -640 359 -500 375 -332 500 -640 427 -640 480 -640 400 -500 333 -340 500 -640 427 -640 448 -640 510 -640 427 -640 480 -429 640 -640 352 -640 436 -424 640 -450 600 -428 640 -640 480 -640 479 -640 427 -640 640 -480 640 -640 279 -640 423 -640 427 -640 425 -640 640 -640 427 -640 427 -427 640 -640 480 -512 480 -640 426 -427 640 -640 427 -640 480 -640 631 -640 425 -333 500 -378 500 -480 272 -640 480 -480 640 -640 443 -640 427 -427 640 -640 426 -640 480 -640 424 -640 506 -640 406 -480 640 -640 388 -640 424 -640 480 -640 407 -425 640 -640 388 -640 480 -640 494 -640 426 -640 480 -500 336 -426 640 -640 427 -640 426 -640 468 -427 640 -424 640 -500 333 -640 407 -612 612 -640 425 -500 333 -640 457 -640 480 -500 375 -480 640 -640 426 -640 480 -426 640 -640 423 -640 480 -640 427 -640 426 -640 480 -640 480 -640 480 -640 480 -640 412 -640 426 -612 612 -640 427 -426 640 -640 480 -640 376 -640 480 -640 404 -640 482 -640 427 -427 640 -640 426 -640 431 -640 425 -480 640 -382 500 -640 428 -375 500 -640 359 -640 427 -640 426 -640 485 -640 392 -640 332 -480 640 -640 425 -333 500 -640 426 -640 457 -500 340 -640 480 -500 326 -375 500 -640 396 -480 640 -333 500 -640 427 -640 480 -640 480 -640 427 -640 429 -640 427 -640 476 -428 640 -640 480 -427 640 -640 495 -640 480 -500 334 -640 508 -640 480 -640 457 -640 427 -640 480 -500 375 -425 640 -640 290 -500 330 -466 640 -500 375 -640 480 -640 480 -640 600 -640 640 -480 640 -640 426 -640 427 -640 427 -427 640 -640 473 -640 428 -640 480 -640 480 -640 480 -640 480 -640 427 -640 427 -500 375 -640 427 -426 640 -640 422 -640 480 -640 480 -640 425 -640 426 -640 427 -480 640 -640 426 -640 427 -335 500 -640 427 -640 480 -396 640 -640 480 -640 427 -425 640 -480 640 -640 494 -640 427 -640 480 -500 375 -480 640 -640 478 -514 640 -640 433 -640 480 -400 500 -640 426 -640 426 -480 640 -640 427 -500 333 -640 360 -640 478 -480 640 -640 427 -479 640 -478 640 -612 612 -512 640 -640 480 -640 427 -500 335 -640 480 -640 360 -640 496 -375 500 -386 640 -640 428 -640 441 -640 480 -640 427 -480 640 -640 427 -640 428 -428 640 -425 640 -640 549 -480 640 -640 480 -640 480 -640 391 -640 480 -640 480 -480 640 -640 427 -640 480 -640 480 -640 512 -500 317 -478 640 -640 428 -640 427 -640 480 -640 480 -640 427 -640 436 -640 503 -640 426 -640 480 -640 426 -640 311 -640 427 -640 640 -640 425 -640 478 -480 640 -480 640 -640 427 -640 480 -640 480 -640 428 -640 504 -427 640 -640 478 -640 480 -640 559 -640 437 -612 612 -640 424 -640 480 -480 640 -640 459 -640 424 -640 426 -640 480 -640 426 -640 480 -640 480 -640 480 -640 480 -500 335 -640 480 -640 426 -640 427 -427 640 -640 427 -640 426 -480 640 -640 480 -640 480 -640 423 -640 424 -640 480 -640 427 -640 480 -640 480 -348 640 -375 500 -461 640 -427 640 -612 612 -640 457 -640 426 -640 506 -414 640 -640 417 -640 423 -640 478 -640 426 -500 375 -640 481 -640 428 -640 428 -600 600 -640 429 -500 375 -640 480 -640 501 -640 480 -640 479 -640 480 -640 480 -640 480 -480 640 -538 360 -500 375 -640 480 -480 640 -640 512 -424 640 -640 425 -640 425 -640 480 -640 424 -500 375 -640 480 -640 360 -427 640 -448 299 -640 392 -426 640 -640 427 -640 445 -612 612 -500 333 -640 518 -640 320 -640 428 -480 640 -640 428 -640 428 -640 480 -640 427 -375 500 -640 480 -500 438 -478 640 -500 375 -320 240 -640 480 -640 480 -640 326 -640 480 -640 480 -640 491 -423 640 -640 427 -640 428 -640 480 -640 428 -640 480 -480 640 -640 398 -640 480 -612 612 -640 480 -640 425 -640 437 -426 640 -640 480 -640 431 -640 427 -427 640 -500 375 -375 500 -486 640 -480 640 -640 427 -426 640 -425 640 -478 640 -333 500 -500 332 -640 480 -640 640 -640 480 -500 448 -427 640 -500 372 -640 426 -480 360 -640 426 -427 640 -426 640 -427 640 -466 640 -640 403 -333 500 -640 449 -329 469 -640 342 -640 478 -640 474 -640 480 -425 640 -640 399 -640 426 -640 480 -500 334 -612 612 -482 640 -425 640 -640 640 -640 486 -333 500 -640 208 -612 612 -640 480 -427 640 -427 640 -640 480 -425 640 -640 427 -500 334 -640 427 -640 380 -500 281 -640 425 -640 425 -640 425 -640 480 -478 640 -333 500 -640 427 -640 427 -640 480 -428 640 -640 427 -640 480 -480 640 -640 427 -640 480 -640 480 -640 503 -427 640 -612 612 -640 427 -640 480 -640 565 -612 612 -640 640 -500 377 -640 428 -640 424 -500 375 -500 375 -480 640 -640 427 -369 500 -640 441 -640 425 -640 480 -640 480 -640 480 -500 333 -500 375 -640 480 -424 640 -500 333 -640 502 -640 480 -640 480 -500 334 -640 480 -640 480 -501 640 -640 480 -640 480 -478 640 -640 428 -612 612 -480 640 -592 640 -640 480 -640 480 -640 427 -640 480 -640 480 -427 640 -640 547 -640 480 -640 480 -640 439 -640 480 -640 427 -481 640 -494 378 -640 405 -640 480 -640 399 -519 640 -640 480 -640 360 -640 480 -640 427 -640 427 -640 483 -379 500 -640 480 -640 427 -640 426 -640 429 -640 426 -383 640 -640 480 -640 601 -640 455 -640 480 -375 500 -640 427 -640 427 -640 426 -427 640 -640 427 -640 426 -640 426 -500 375 -640 480 -480 640 -480 640 -427 640 -427 640 -480 640 -480 640 -640 426 -640 480 -500 375 -425 640 -480 640 -375 500 -640 480 -640 425 -640 425 -640 516 -640 463 -640 361 -640 402 -427 640 -512 640 -361 640 -424 640 -427 640 -640 640 -480 640 -640 457 -373 500 -640 426 -640 480 -640 478 -640 479 -640 427 -427 640 -640 480 -500 375 -480 640 -640 427 -640 480 -640 480 -640 480 -640 425 -640 427 -640 480 -640 419 -427 640 -640 427 -640 427 -640 480 -480 640 -640 425 -640 640 -640 480 -640 400 -333 500 -427 640 -640 480 -612 612 -640 427 -640 513 -640 428 -397 500 -640 427 -640 480 -426 640 -428 640 -480 640 -333 500 -640 426 -500 333 -500 335 -448 640 -500 375 -480 640 -640 456 -640 427 -640 457 -500 375 -640 406 -640 427 -480 640 -500 377 -500 375 -640 431 -640 359 -640 640 -640 428 -427 640 -640 480 -426 640 -640 427 -480 640 -500 333 -640 480 -640 426 -640 496 -532 640 -640 450 -640 427 -640 480 -480 640 -640 428 -640 258 -640 383 -640 460 -640 480 -640 480 -375 500 -640 263 -500 375 -612 612 -640 308 -640 427 -484 640 -640 424 -500 375 -640 427 -330 500 -640 360 -640 427 -480 640 -640 424 -640 480 -500 329 -640 480 -640 354 -640 480 -640 480 -343 230 -640 451 -427 640 -640 427 -500 429 -640 480 -640 427 -640 454 -640 426 -427 640 -525 640 -640 463 -200 133 -640 480 -426 640 -640 534 -640 494 -500 400 -500 375 -612 612 -480 640 -640 480 -640 569 -621 600 -640 480 -640 426 -640 480 -640 640 -640 427 -500 375 -640 480 -640 423 -500 375 -640 424 -426 640 -333 500 -640 294 -476 640 -545 640 -426 640 -480 640 -441 640 -640 480 -640 427 -640 427 -486 640 -640 426 -640 427 -171 500 -375 500 -425 640 -640 427 -640 426 -640 426 -427 640 -640 480 -640 360 -640 640 -640 427 -332 500 -500 375 -320 240 -640 480 -640 416 -640 428 -640 488 -640 426 -640 426 -640 480 -629 640 -361 640 -640 428 -640 480 -640 427 -640 360 -640 475 -500 375 -640 480 -640 548 -500 375 -427 640 -640 479 -480 640 -478 640 -480 640 -640 480 -640 438 -468 640 -640 340 -640 480 -640 480 -640 427 -640 480 -640 427 -500 375 -640 427 -640 424 -640 480 -478 640 -480 640 -640 427 -640 529 -500 375 -640 426 -640 426 -640 480 -612 612 -640 359 -480 640 -640 360 -640 427 -425 640 -640 427 -424 640 -640 480 -640 422 -640 443 -640 427 -640 428 -640 640 -640 480 -640 424 -640 480 -640 480 -640 480 -500 375 -640 480 -500 375 -640 426 -640 333 -455 480 -480 640 -407 640 -500 334 -640 480 -427 640 -500 333 -500 375 -480 640 -640 423 -500 393 -480 640 -640 427 -333 500 -640 360 -418 640 -640 536 -640 428 -640 452 -640 384 -500 332 -490 640 -640 426 -640 425 -640 496 -640 428 -640 429 -640 300 -640 427 -481 640 -640 480 -640 427 -612 612 -341 500 -612 612 -640 299 -640 536 -640 480 -427 640 -640 360 -427 640 -640 427 -500 375 -500 333 -640 480 -424 640 -640 427 -640 427 -640 480 -426 640 -640 480 -640 427 -640 480 -500 375 -640 426 -640 480 -640 480 -640 424 -480 640 -640 427 -640 640 -640 427 -426 640 -640 480 -640 480 -640 640 -640 480 -640 486 -375 500 -640 480 -375 500 -480 640 -640 479 -640 427 -480 640 -640 425 -640 424 -500 295 -427 640 -427 640 -640 480 -640 426 -430 640 -640 427 -375 500 -640 360 -640 480 -427 640 -640 480 -375 500 -640 427 -640 359 -640 480 -500 333 -426 640 -640 427 -637 640 -640 425 -480 640 -427 640 -640 424 -640 479 -640 427 -457 640 -640 427 -480 640 -640 480 -640 427 -500 337 -427 640 -640 360 -500 375 -640 640 -480 640 -640 428 -428 640 -500 375 -480 640 -640 480 -640 480 -640 480 -640 484 -426 640 -480 640 -480 640 -500 375 -640 480 -387 640 -640 427 -640 425 -427 640 -640 427 -375 500 -640 480 -640 480 -427 640 -500 366 -640 480 -640 480 -640 472 -640 416 -640 426 -427 640 -640 480 -478 640 -640 425 -640 428 -428 640 -640 480 -493 640 -640 480 -640 424 -500 333 -640 427 -640 427 -640 480 -640 427 -640 470 -640 427 -375 500 -640 427 -500 499 -640 480 -640 427 -640 427 -480 640 -640 436 -640 375 -640 640 -640 404 -333 500 -500 361 -640 480 -640 424 -640 480 -640 480 -640 444 -640 426 -480 640 -470 640 -640 427 -640 427 -480 640 -640 428 -640 425 -640 427 -640 426 -640 480 -640 480 -640 480 -480 640 -600 450 -640 378 -640 427 -640 480 -640 424 -640 480 -640 425 -427 640 -553 640 -640 428 -640 480 -640 428 -442 640 -500 375 -415 500 -640 640 -640 426 -500 378 -640 427 -640 480 -640 479 -640 427 -380 640 -640 480 -640 480 -500 375 -500 311 -469 640 -640 421 -640 480 -640 480 -640 427 -640 476 -640 480 -640 480 -480 640 -640 480 -640 480 -412 500 -640 426 -640 640 -640 427 -640 425 -640 368 -640 626 -640 484 -612 612 -640 514 -640 640 -640 468 -500 314 -458 640 -480 640 -640 457 -640 480 -640 480 -640 427 -640 480 -479 640 -640 480 -640 512 -334 500 -500 500 -640 426 -375 500 -427 640 -332 500 -640 426 -640 480 -640 480 -426 640 -640 427 -612 612 -640 480 -640 410 -640 480 -640 427 -640 480 -500 375 -640 426 -480 640 -457 640 -640 427 -427 640 -640 480 -640 427 -640 480 -640 426 -640 428 -333 500 -640 478 -640 426 -640 427 -640 480 -640 480 -450 500 -640 427 -640 427 -640 428 -381 640 -500 375 -375 500 -640 426 -640 519 -480 640 -640 588 -375 500 -640 480 -640 480 -500 442 -480 640 -640 480 -500 429 -640 429 -640 427 -640 425 -640 480 -500 375 -640 427 -480 640 -640 480 -480 640 -640 480 -640 437 -640 480 -640 312 -640 427 -500 332 -640 480 -429 640 -640 426 -640 556 -480 640 -640 427 -640 427 -480 640 -640 486 -640 480 -640 480 -640 480 -640 480 -300 403 -493 500 -640 480 -640 414 -640 375 -333 500 -500 333 -630 420 -640 414 -375 500 -640 427 -640 427 -640 457 -640 361 -640 427 -500 333 -640 425 -640 480 -426 640 -640 429 -640 480 -640 426 -640 427 -640 480 -640 426 -640 360 -640 480 -612 612 -640 429 -425 640 -612 612 -480 640 -640 478 -413 640 -640 478 -480 640 -640 427 -640 360 -480 640 -500 332 -640 480 -640 480 -640 471 -640 478 -427 640 -404 640 -640 480 -375 500 -359 640 -640 425 -480 640 -640 458 -640 426 -427 640 -640 427 -500 395 -640 427 -640 425 -640 427 -640 428 -375 500 -375 500 -500 375 -425 640 -640 480 -612 612 -640 489 -640 426 -640 426 -640 479 -640 464 -640 480 -640 532 -640 480 -640 322 -640 427 -500 323 -640 427 -500 375 -427 640 -640 640 -426 640 -612 612 -500 332 -480 640 -423 640 -640 480 -640 384 -640 429 -640 512 -500 375 -480 640 -640 532 -640 425 -640 480 -640 428 -425 640 -427 640 -500 338 -640 420 -640 480 -640 427 -640 427 -640 427 -640 426 -640 480 -640 480 -375 500 -640 426 -424 640 -640 480 -640 428 -640 352 -640 480 -426 640 -500 333 -640 425 -640 480 -640 426 -640 480 -640 513 -640 426 -640 394 -640 480 -640 480 -640 434 -500 341 -418 640 -640 426 -640 480 -640 480 -640 480 -500 375 -426 640 -500 375 -640 446 -640 480 -640 426 -640 427 -640 426 -640 480 -640 463 -640 480 -427 640 -640 426 -640 498 -213 140 -640 427 -375 500 -640 426 -500 375 -332 500 -427 640 -640 427 -640 426 -640 480 -640 480 -426 640 -640 425 -640 480 -480 640 -640 489 -640 480 -640 480 -478 640 -640 426 -640 563 -640 478 -640 480 -640 480 -640 427 -500 334 -640 478 -500 375 -640 443 -427 640 -353 500 -640 511 -640 427 -612 612 -480 640 -600 400 -500 375 -581 575 -640 427 -640 424 -640 359 -640 483 -500 375 -480 640 -640 480 -640 426 -640 427 -500 375 -500 375 -640 456 -640 480 -640 480 -640 428 -640 480 -640 480 -427 640 -640 480 -500 352 -640 427 -445 640 -500 332 -640 494 -640 484 -598 640 -640 480 -640 480 -640 427 -640 427 -500 333 -640 640 -427 640 -480 640 -640 457 -640 427 -480 640 -640 514 -640 471 -640 478 -427 640 -640 422 -640 480 -640 421 -612 612 -640 478 -500 375 -640 522 -640 424 -480 640 -640 480 -640 480 -602 640 -640 428 -640 376 -640 320 -612 612 -640 482 -640 480 -427 640 -640 480 -640 426 -640 480 -640 480 -640 536 -640 426 -640 480 -450 640 -640 427 -324 432 -640 505 -640 480 -500 500 -640 640 -640 425 -480 640 -640 480 -427 640 -640 497 -640 360 -640 480 -640 480 -640 480 -640 427 -500 373 -640 428 -640 426 -500 375 -640 423 -640 616 -640 428 -640 502 -640 488 -414 640 -640 479 -478 640 -620 640 -640 427 -640 360 -640 427 -500 344 -640 480 -640 480 -640 480 -428 640 -444 640 -640 429 -500 375 -422 640 -360 640 -500 332 -640 480 -615 310 -640 427 -640 480 -612 612 -640 425 -427 640 -640 427 -375 500 -426 640 -612 612 -640 640 -500 333 -640 426 -500 375 -640 426 -640 539 -640 480 -640 481 -640 427 -640 603 -640 426 -640 457 -500 375 -640 448 -640 369 -640 480 -500 333 -375 500 -640 480 -427 640 -640 441 -640 301 -332 500 -640 480 -640 426 -640 480 -250 188 -573 640 -500 375 -640 427 -640 327 -640 496 -359 500 -640 427 -640 480 -640 360 -640 530 -640 427 -640 426 -640 498 -480 640 -640 480 -480 640 -500 334 -640 427 -640 406 -480 640 -640 480 -640 469 -640 480 -640 480 -640 433 -640 480 -640 439 -460 345 -640 426 -640 480 -640 360 -640 480 -640 480 -405 640 -640 427 -480 640 -427 640 -640 480 -640 480 -640 425 -480 640 -640 427 -612 612 -640 480 -612 612 -640 429 -640 478 -500 333 -640 480 -640 366 -640 360 -480 640 -480 640 -500 333 -640 480 -640 483 -640 480 -640 480 -640 483 -500 500 -500 375 -640 463 -612 612 -640 480 -500 375 -355 500 -640 472 -640 480 -425 640 -604 640 -640 383 -427 640 -640 427 -640 427 -640 425 -640 410 -640 480 -640 429 -640 480 -640 480 -640 508 -640 426 -640 360 -500 375 -612 612 -370 500 -640 320 -426 640 -640 480 -480 640 -426 640 -480 640 -640 427 -640 426 -612 612 -640 338 -640 425 -640 480 -480 640 -375 500 -640 480 -640 512 -427 640 -500 375 -640 427 -640 428 -640 425 -640 476 -426 640 -480 640 -480 640 -480 640 -494 640 -480 640 -609 640 -640 368 -640 427 -640 433 -640 480 -375 500 -510 510 -640 425 -640 480 -375 500 -640 480 -640 640 -640 424 -640 427 -640 429 -640 480 -480 640 -640 480 -500 375 -640 480 -611 640 -500 332 -640 427 -421 640 -640 480 -640 427 -640 478 -612 612 -612 612 -640 480 -375 500 -640 480 -640 480 -500 270 -640 480 -612 612 -500 250 -500 375 -640 364 -640 480 -640 427 -480 640 -640 427 -640 426 -500 342 -640 427 -500 330 -640 480 -640 426 -640 427 -400 500 -640 479 -296 640 -620 640 -640 480 -480 640 -640 427 -480 640 -640 480 -640 427 -640 480 -640 428 -640 427 -612 612 -640 480 -640 480 -640 480 -400 312 -640 480 -640 427 -426 255 -612 612 -640 428 -640 430 -320 240 -640 425 -640 480 -425 640 -640 428 -640 433 -640 427 -357 500 -640 459 -640 427 -640 480 -640 491 -500 375 -640 427 -510 640 -640 486 -640 480 -640 424 -640 478 -480 640 -428 640 -326 500 -640 480 -500 324 -640 427 -640 640 -640 495 -640 426 -500 375 -426 640 -640 480 -640 514 -640 427 -500 375 -427 640 -640 428 -640 359 -640 480 -640 482 -640 480 -640 387 -424 640 -640 480 -474 640 -612 612 -500 375 -160 120 -640 399 -500 333 -425 640 -640 427 -480 640 -362 500 -640 427 -640 480 -480 640 -480 640 -518 640 -425 640 -500 333 -640 480 -640 480 -427 500 -500 375 -640 435 -500 375 -640 427 -640 512 -640 427 -418 640 -640 434 -500 376 -640 480 -640 426 -500 333 -500 340 -427 640 -640 427 -375 500 -640 427 -640 427 -500 207 -427 640 -640 480 -640 360 -480 640 -640 427 -512 640 -500 333 -480 640 -640 429 -640 532 -640 420 -640 480 -500 437 -383 640 -640 426 -640 480 -480 319 -640 480 -424 640 -427 640 -640 480 -640 480 -426 640 -426 640 -640 447 -640 424 -480 640 -640 427 -640 480 -640 480 -640 426 -640 427 -504 640 -640 480 -640 433 -640 426 -640 427 -500 333 -480 640 -640 478 -640 428 -640 427 -640 427 -500 333 -640 426 -640 432 -500 375 -500 375 -640 480 -344 500 -375 500 -480 640 -500 375 -426 640 -640 167 -500 333 -640 407 -640 424 -640 426 -640 512 -640 427 -640 480 -599 419 -640 427 -640 480 -640 427 -640 480 -640 480 -640 425 -640 480 -640 494 -640 448 -640 480 -426 640 -640 480 -640 480 -454 640 -640 427 -640 480 -640 427 -426 640 -640 427 -640 426 -640 426 -640 426 -640 480 -640 360 -640 427 -640 427 -640 427 -480 640 -640 427 -640 480 -640 366 -500 375 -640 427 -480 640 -640 427 -500 375 -640 427 -640 427 -640 428 -500 375 -640 289 -640 480 -480 640 -427 640 -480 640 -640 480 -640 640 -472 640 -427 640 -612 612 -480 640 -640 427 -640 427 -425 640 -640 426 -640 360 -640 354 -480 640 -640 424 -480 640 -640 392 -640 228 -640 424 -640 480 -640 480 -500 281 -640 480 -640 427 -640 278 -376 500 -375 500 -640 432 -640 357 -425 640 -480 640 -500 337 -500 375 -500 375 -640 480 -640 480 -640 427 -640 427 -333 500 -640 480 -480 640 -640 360 -591 640 -640 360 -640 480 -480 640 -640 480 -640 427 -500 375 -640 480 -427 640 -640 427 -640 640 -500 366 -640 480 -512 640 -359 640 -320 640 -640 360 -480 640 -480 640 -640 619 -640 426 -500 400 -640 427 -640 427 -333 500 -640 424 -480 640 -425 640 -640 361 -452 500 -404 500 -640 640 -425 640 -640 406 -436 291 -640 480 -640 426 -640 427 -425 640 -429 640 -500 375 -640 426 -500 375 -480 640 -640 427 -640 512 -640 426 -640 426 -640 427 -640 480 -324 500 -640 480 -640 428 -640 480 -640 397 -375 500 -640 480 -640 400 -640 360 -640 426 -640 427 -640 427 -640 427 -500 330 -480 640 -640 576 -640 428 -500 331 -640 427 -500 278 -480 640 -640 640 -490 640 -640 383 -612 612 -480 640 -332 500 -640 480 -640 480 -640 427 -478 640 -426 640 -640 507 -480 640 -480 640 -480 640 -640 424 -640 252 -640 411 -640 427 -640 427 -463 640 -640 480 -640 427 -640 429 -331 500 -640 480 -640 427 -500 332 -500 375 -352 288 -500 375 -491 640 -479 640 -612 612 -480 640 -640 427 -403 456 -600 399 -375 500 -640 424 -640 480 -612 612 -640 480 -640 427 -640 482 -462 640 -480 640 -427 640 -640 427 -640 429 -640 425 -640 427 -640 468 -640 427 -640 480 -640 490 -640 480 -640 427 -640 480 -640 640 -640 480 -612 612 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -427 640 -640 427 -538 360 -640 480 -640 426 -500 370 -640 425 -640 480 -640 425 -428 640 -640 480 -640 428 -500 375 -428 640 -640 427 -640 460 -640 480 -512 640 -640 426 -640 427 -640 424 -500 375 -640 516 -640 424 -640 428 -500 332 -640 427 -461 307 -640 426 -640 379 -640 480 -640 420 -640 480 -480 640 -480 640 -640 638 -640 259 -640 480 -426 640 -640 427 -640 480 -640 480 -640 427 -640 426 -375 500 -640 427 -640 421 -426 640 -640 424 -640 426 -640 427 -480 640 -375 500 -640 429 -640 583 -640 480 -500 375 -640 640 -426 640 -640 480 -284 640 -240 166 -640 428 -640 426 -640 480 -640 596 -640 425 -640 640 -640 427 -640 408 -640 360 -500 375 -427 640 -480 640 -640 480 -640 423 -640 428 -640 360 -640 585 -640 426 -640 425 -354 500 -640 480 -640 424 -640 435 -640 480 -500 375 -640 427 -640 480 -427 640 -425 640 -375 500 -640 450 -640 426 -640 640 -480 640 -360 640 -640 426 -640 428 -640 427 -427 640 -640 480 -500 375 -640 426 -600 375 -640 331 -640 434 -640 428 -427 640 -500 335 -640 426 -640 480 -640 392 -640 427 -640 480 -640 640 -612 612 -640 360 -375 500 -612 612 -640 480 -640 480 -640 480 -636 479 -640 433 -640 480 -397 464 -480 640 -640 426 -640 429 -640 480 -427 640 -640 428 -444 640 -640 480 -640 359 -480 640 -640 425 -500 375 -640 378 -640 428 -427 640 -640 334 -640 428 -640 426 -640 480 -640 495 -640 473 -640 384 -427 640 -640 405 -478 640 -640 425 -480 640 -640 426 -500 366 -640 426 -640 427 -480 640 -500 332 -640 480 -640 399 -640 427 -640 424 -640 480 -640 502 -640 502 -640 480 -640 480 -640 451 -640 426 -375 500 -640 427 -640 423 -422 640 -500 335 -640 480 -640 480 -427 640 -640 404 -640 427 -640 427 -640 427 -640 480 -640 480 -480 640 -640 426 -640 393 -457 640 -640 426 -480 640 -500 500 -640 427 -640 480 -500 375 -640 480 -500 375 -640 426 -640 480 -500 375 -351 500 -379 500 -640 428 -640 427 -640 419 -500 454 -363 640 -640 427 -640 427 -420 640 -640 427 -426 640 -500 375 -427 640 -640 427 -640 448 -443 640 -512 640 -640 427 -640 480 -640 515 -640 432 -640 428 -640 480 -375 500 -640 338 -500 500 -515 640 -640 480 -640 449 -640 427 -640 532 -500 640 -640 374 -640 427 -640 614 -640 480 -640 480 -480 640 -640 480 -427 640 -640 451 -640 424 -640 480 -640 426 -640 425 -640 480 -458 640 -480 640 -640 427 -480 640 -288 352 -640 427 -640 463 -640 427 -640 480 -640 425 -393 640 -480 640 -640 427 -425 640 -640 427 -512 640 -640 425 -640 480 -640 256 -640 478 -500 375 -640 559 -612 612 -444 640 -640 427 -480 640 -640 360 -640 488 -640 452 -640 426 -427 640 -487 291 -439 640 -640 515 -640 480 -640 480 -640 480 -612 612 -478 640 -640 480 -480 640 -633 640 -500 333 -640 425 -640 480 -480 640 -640 480 -640 480 -312 640 -640 479 -640 427 -427 640 -640 480 -500 375 -640 480 -640 427 -640 480 -480 640 -640 474 -640 427 -640 426 -386 640 -640 383 -450 640 -500 332 -640 479 -480 640 -640 480 -449 640 -640 480 -640 388 -640 429 -640 480 -375 500 -640 480 -640 480 -640 427 -640 425 -640 480 -640 383 -640 427 -640 425 -612 612 -640 480 -640 616 -500 375 -400 600 -500 454 -640 369 -445 640 -640 426 -486 640 -640 447 -640 480 -480 640 -640 480 -613 640 -640 427 -467 640 -640 480 -640 426 -640 364 -640 424 -399 600 -640 480 -500 333 -640 427 -640 426 -480 640 -480 640 -389 640 -640 480 -640 480 -640 426 -375 500 -640 480 -640 480 -640 480 -640 480 -640 427 -640 426 -640 427 -640 426 -640 427 -640 426 -640 480 -640 429 -640 480 -428 640 -640 443 -640 426 -640 501 -640 339 -640 640 -640 480 -640 429 -519 640 -640 480 -375 500 -640 427 -640 426 -640 480 -640 636 -640 426 -500 375 -500 375 -640 480 -500 375 -640 426 -640 428 -640 436 -612 612 -640 471 -640 423 -640 429 -640 425 -425 640 -640 480 -640 424 -640 504 -640 480 -480 640 -640 480 -640 428 -640 480 -640 639 -640 480 -480 640 -500 375 -640 360 -333 500 -640 411 -640 481 -640 393 -430 640 -640 427 -500 500 -640 427 -640 543 -640 480 -640 427 -640 480 -500 284 -640 480 -640 438 -640 480 -612 612 -612 612 -427 640 -480 640 -640 480 -480 640 -426 640 -500 333 -640 427 -640 480 -500 375 -640 480 -640 482 -640 427 -500 375 -640 427 -640 427 -640 360 -640 478 -640 427 -640 480 -640 480 -500 375 -500 333 -500 375 -461 640 -640 480 -640 427 -640 426 -640 480 -640 480 -640 480 -640 490 -500 308 -640 359 -640 406 -500 334 -480 640 -640 478 -640 428 -500 404 -640 427 -612 612 -480 640 -640 480 -640 480 -640 427 -640 640 -640 427 -640 427 -640 473 -640 480 -640 480 -640 480 -501 640 -640 640 -640 424 -640 521 -480 640 -480 640 -640 428 -480 640 -640 480 -640 428 -640 480 -640 383 -479 640 -640 425 -640 427 -640 480 -640 480 -640 480 -640 505 -640 480 -500 333 -640 480 -640 480 -500 375 -640 480 -640 449 -640 480 -375 500 -640 428 -500 375 -500 333 -640 480 -640 424 -640 428 -640 427 -640 427 -612 612 -640 543 -640 446 -640 505 -500 375 -480 640 -640 400 -640 427 -640 480 -640 426 -479 640 -640 480 -640 320 -428 640 -640 448 -480 640 -612 612 -640 480 -640 424 -640 477 -427 640 -341 500 -480 640 -428 640 -640 427 -427 640 -640 427 -640 480 -640 480 -640 427 -640 428 -480 640 -640 427 -640 480 -640 426 -425 640 -640 480 -640 480 -640 462 -500 375 -594 555 -640 427 -640 480 -640 480 -640 447 -612 612 -640 480 -640 480 -640 427 -640 480 -500 375 -640 454 -427 640 -640 426 -640 480 -640 640 -287 432 -640 427 -640 640 -640 427 -640 426 -500 400 -640 427 -640 480 -640 427 -500 334 -612 612 -640 480 -640 480 -500 375 -640 480 -427 640 -500 333 -612 612 -640 429 -640 480 -480 640 -640 427 -640 480 -640 427 -500 375 -640 480 -375 500 -500 375 -551 640 -640 427 -640 429 -640 428 -640 360 -640 478 -640 480 -308 500 -640 478 -640 388 -640 480 -640 426 -640 423 -500 375 -640 429 -427 640 -640 389 -640 480 -640 427 -640 333 -640 428 -500 346 -640 480 -640 425 -640 438 -640 480 -640 480 -640 428 -640 481 -483 640 -427 640 -640 428 -640 426 -640 480 -480 640 -640 427 -640 480 -320 240 -640 425 -500 333 -640 506 -640 428 -640 425 -480 360 -640 427 -408 640 -612 612 -480 640 -640 359 -491 280 -640 480 -640 637 -480 640 -640 424 -640 480 -640 481 -640 480 -640 480 -640 480 -640 480 -480 640 -439 640 -640 480 -640 428 -517 640 -640 427 -640 457 -500 375 -640 484 -480 640 -640 480 -640 480 -640 418 -640 601 -600 400 -640 427 -640 480 -480 640 -640 480 -500 375 -426 640 -640 480 -639 640 -480 640 -480 640 -640 314 -480 640 -500 361 -640 473 -500 377 -612 612 -640 403 -640 426 -512 640 -640 640 -640 429 -640 480 -640 428 -640 480 -640 480 -640 480 -480 640 -500 500 -500 333 -640 428 -640 452 -480 640 -640 479 -518 640 -500 500 -640 427 -479 640 -640 481 -640 480 -612 612 -484 480 -319 640 -480 640 -480 640 -629 640 -478 640 -381 500 -640 427 -640 480 -640 480 -640 427 -640 463 -428 640 -427 640 -480 640 -640 480 -500 375 -640 427 -640 419 -640 480 -640 313 -480 640 -445 640 -640 480 -640 427 -375 500 -640 480 -640 512 -480 640 -640 427 -640 480 -640 427 -640 427 -640 536 -375 500 -640 428 -640 480 -640 360 -640 425 -640 480 -640 427 -640 427 -640 427 -350 500 -480 640 -500 374 -640 478 -640 480 -640 429 -640 478 -640 467 -500 332 -480 640 -500 375 -640 478 -427 640 -640 427 -427 640 -375 500 -640 424 -640 480 -428 640 -640 480 -640 613 -480 640 -640 444 -640 383 -640 480 -640 427 -640 480 -640 495 -640 426 -640 415 -640 480 -640 427 -480 640 -640 449 -640 426 -640 264 -640 427 -640 427 -509 640 -640 427 -640 480 -494 640 -480 640 -634 640 -640 427 -640 480 -640 516 -640 480 -640 428 -640 486 -640 428 -640 480 -640 401 -500 375 -640 480 -640 426 -500 334 -640 480 -620 640 -640 480 -314 500 -360 640 -640 427 -500 376 -500 333 -640 480 -640 480 -426 640 -640 414 -640 427 -480 640 -640 480 -640 480 -640 480 -500 375 -640 427 -640 480 -612 612 -640 480 -427 640 -640 425 -640 427 -640 464 -640 480 -640 427 -640 427 -612 612 -640 481 -640 480 -640 479 -640 425 -640 427 -640 266 -427 640 -640 305 -480 640 -640 427 -427 640 -455 640 -640 425 -480 640 -640 480 -375 500 -428 640 -480 640 -640 355 -375 500 -640 427 -640 204 -640 640 -640 480 -640 427 -640 457 -427 640 -640 425 -500 375 -640 426 -640 427 -640 480 -571 640 -640 480 -640 628 -480 640 -427 640 -640 425 -427 640 -500 375 -426 640 -500 332 -640 480 -640 427 -640 427 -640 427 -332 500 -457 640 -640 429 -640 427 -427 640 -496 500 -640 383 -640 422 -640 480 -640 427 -640 347 -393 500 -480 640 -640 637 -640 424 -500 375 -640 480 -640 480 -640 427 -640 425 -640 480 -640 427 -640 480 -640 427 -640 432 -640 480 -640 428 -427 640 -500 375 -640 480 -640 425 -640 465 -640 480 -640 324 -640 480 -640 427 -640 462 -640 426 -640 360 -640 427 -640 426 -424 640 -640 428 -500 334 -640 425 -640 213 -640 480 -333 500 -640 359 -640 480 -640 427 -612 612 -480 640 -480 640 -640 480 -640 427 -500 381 -500 342 -640 449 -640 480 -640 430 -640 480 -640 427 -640 480 -427 640 -427 640 -640 427 -640 480 -640 399 -640 457 -640 480 -640 480 -640 427 -640 337 -640 427 -426 640 -640 428 -640 363 -640 480 -640 430 -640 481 -640 429 -640 480 -640 433 -640 428 -478 640 -640 427 -480 640 -612 612 -480 360 -640 480 -375 500 -640 427 -640 426 -640 266 -640 426 -498 640 -640 480 -480 640 -640 427 -640 427 -640 480 -480 640 -612 612 -640 624 -640 427 -640 398 -640 426 -640 480 -360 640 -640 478 -640 427 -640 427 -500 375 -640 526 -640 362 -640 480 -640 424 -640 480 -426 640 -480 640 -640 426 -640 426 -640 461 -640 480 -375 500 -640 426 -640 426 -640 425 -480 640 -640 427 -640 430 -640 478 -640 480 -350 500 -375 500 -640 427 -457 640 -640 480 -375 500 -640 640 -640 584 -640 480 -640 480 -500 349 -612 612 -500 375 -640 428 -640 480 -500 333 -500 400 -640 513 -640 427 -640 427 -480 640 -640 478 -457 640 -640 427 -500 281 -640 368 -640 480 -640 427 -640 427 -500 406 -500 375 -360 270 -640 422 -480 640 -640 427 -640 561 -640 478 -640 427 -640 480 -500 333 -640 427 -640 427 -640 480 -640 427 -640 485 -400 640 -427 640 -640 480 -428 640 -640 273 -600 402 -480 640 -640 518 -640 427 -640 480 -640 427 -640 427 -640 427 -640 480 -640 640 -640 426 -354 500 -640 480 -640 415 -480 640 -640 480 -640 418 -640 428 -640 480 -640 425 -335 500 -640 480 -640 636 -640 429 -427 640 -640 480 -427 640 -640 427 -612 612 -640 480 -640 480 -500 392 -640 430 -256 448 -640 327 -640 512 -480 640 -640 446 -640 480 -427 640 -500 457 -640 427 -640 427 -500 375 -640 426 -480 640 -640 640 -640 457 -640 482 -375 500 -480 640 -640 476 -640 480 -640 360 -480 640 -427 640 -640 480 -640 427 -640 427 -640 480 -375 500 -500 375 -426 640 -480 640 -640 321 -640 489 -425 640 -182 273 -640 427 -640 427 -640 436 -640 457 -640 426 -561 640 -425 640 -640 427 -640 427 -640 427 -640 451 -427 640 -640 480 -640 480 -612 612 -640 427 -425 640 -640 427 -640 480 -426 640 -375 500 -500 375 -640 426 -640 379 -427 640 -480 640 -640 425 -640 426 -500 493 -640 341 -640 428 -425 640 -640 480 -640 574 -640 480 -480 640 -640 427 -640 480 -640 478 -640 421 -400 640 -640 425 -424 640 -480 640 -640 426 -640 541 -424 640 -640 480 -640 478 -640 427 -426 640 -640 480 -427 640 -500 375 -500 375 -500 326 -468 640 -430 640 -640 480 -640 640 -640 480 -640 361 -428 640 -500 333 -480 640 -640 480 -640 429 -506 640 -640 391 -328 500 -612 612 -426 640 -640 565 -640 480 -640 455 -640 371 -640 426 -640 427 -454 640 -421 640 -640 427 -457 640 -640 321 -640 442 -640 424 -427 640 -640 427 -494 640 -400 239 -640 426 -640 480 -640 480 -480 640 -640 480 -480 640 -471 640 -480 640 -640 497 -640 480 -640 480 -424 640 -640 426 -640 425 -612 612 -500 250 -640 416 -640 480 -640 427 -427 640 -427 640 -640 298 -640 426 -480 640 -640 361 -640 480 -640 360 -640 427 -612 612 -640 426 -480 640 -640 424 -640 411 -640 480 -640 480 -640 426 -640 533 -640 480 -480 640 -640 427 -426 640 -319 235 -640 424 -480 640 -640 353 -500 348 -640 427 -426 640 -375 500 -640 480 -640 426 -640 466 -640 480 -480 640 -640 480 -640 427 -640 480 -480 640 -485 404 -524 640 -500 375 -640 480 -480 640 -640 480 -640 429 -480 640 -640 426 -640 480 -640 359 -640 444 -640 278 -640 469 -640 480 -640 425 -423 640 -612 612 -425 640 -426 640 -640 423 -640 480 -480 640 -640 427 -640 426 -600 450 -640 480 -640 427 -640 427 -640 480 -640 427 -640 427 -640 480 -640 428 -640 480 -640 480 -500 308 -640 478 -640 480 -640 427 -640 427 -640 427 -480 640 -480 640 -640 513 -500 336 -417 640 -375 500 -640 426 -640 454 -375 500 -640 427 -640 318 -640 427 -640 427 -375 500 -640 480 -640 358 -640 427 -640 426 -469 640 -640 427 -480 640 -480 640 -640 480 -640 426 -500 375 -640 427 -480 640 -640 427 -640 360 -500 375 -640 427 -640 480 -640 426 -500 333 -500 375 -480 640 -640 480 -640 480 -473 640 -640 566 -640 476 -427 640 -640 425 -640 490 -480 640 -359 640 -640 480 -500 375 -640 425 -640 427 -444 640 -640 427 -640 480 -640 480 -640 480 -332 500 -640 408 -480 640 -640 480 -640 640 -480 640 -640 480 -640 640 -500 372 -640 428 -607 640 -640 426 -480 640 -640 427 -640 458 -640 426 -500 375 -640 424 -612 612 -640 425 -640 480 -500 370 -640 480 -640 423 -640 427 -640 425 -640 428 -640 428 -640 427 -640 626 -500 267 -640 480 -640 480 -640 478 -332 500 -612 612 -640 428 -640 480 -640 453 -640 480 -640 223 -640 478 -640 427 -640 427 -640 480 -640 422 -640 361 -640 480 -427 640 -486 640 -427 640 -640 427 -612 612 -426 640 -640 427 -411 640 -500 375 -640 427 -640 360 -640 428 -640 428 -640 425 -471 640 -462 640 -640 480 -640 451 -640 427 -640 427 -320 240 -640 512 -427 640 -533 640 -640 427 -480 640 -640 426 -640 425 -427 640 -500 375 -640 425 -640 480 -640 438 -640 425 -498 438 -640 427 -640 423 -640 360 -640 480 -640 480 -500 375 -640 426 -480 640 -640 426 -500 400 -500 479 -612 612 -640 570 -480 640 -640 480 -640 427 -423 640 -640 480 -427 640 -640 480 -640 424 -640 426 -427 640 -640 480 -480 640 -640 480 -640 640 -480 640 -427 640 -640 427 -312 500 -640 480 -640 428 -640 427 -500 375 -638 640 -428 640 -375 500 -640 480 -640 425 -640 420 -505 640 -375 500 -500 296 -480 640 -640 480 -480 640 -612 612 -640 428 -640 471 -640 480 -640 463 -640 427 -640 425 -640 360 -640 360 -427 640 -640 640 -478 640 -640 426 -480 640 -500 375 -480 640 -425 640 -640 640 -640 564 -640 428 -500 375 -640 428 -640 427 -640 480 -640 512 -640 425 -640 452 -640 427 -640 491 -640 483 -480 640 -640 480 -427 640 -640 480 -640 425 -640 480 -427 640 -640 640 -640 428 -425 640 -640 480 -427 640 -429 640 -532 640 -480 640 -640 501 -640 480 -361 640 -450 372 -640 427 -640 480 -640 480 -640 480 -640 441 -480 640 -500 381 -428 640 -640 443 -640 482 -640 427 -640 512 -500 332 -640 480 -403 640 -640 426 -640 453 -480 640 -640 424 -410 500 -640 477 -480 640 -640 426 -500 372 -500 375 -640 360 -485 640 -640 480 -500 375 -640 608 -640 133 -640 428 -640 480 -520 373 -640 427 -480 640 -332 640 -640 427 -612 612 -640 480 -500 429 -640 480 -640 428 -500 375 -640 539 -640 469 -427 640 -640 427 -640 428 -427 640 -480 640 -640 427 -640 480 -640 426 -480 640 -640 480 -640 427 -640 427 -640 480 -640 428 -640 457 -640 480 -640 427 -534 640 -427 640 -640 446 -480 640 -640 425 -427 640 -480 640 -640 361 -500 375 -640 480 -640 480 -480 640 -640 431 -640 480 -426 640 -640 428 -480 640 -640 424 -500 375 -640 427 -640 480 -640 480 -500 375 -640 427 -640 470 -366 500 -333 500 -640 427 -500 375 -320 640 -640 426 -640 509 -612 612 -640 478 -640 426 -640 640 -640 480 -640 320 -448 600 -500 338 -427 640 -640 480 -426 640 -640 481 -640 480 -427 640 -612 612 -480 640 -480 640 -480 640 -425 640 -640 480 -640 480 -640 427 -640 427 -640 427 -640 480 -640 480 -640 480 -640 557 -480 640 -640 425 -640 427 -482 640 -500 375 -568 640 -640 424 -480 319 -640 480 -640 480 -640 480 -640 427 -640 415 -500 375 -500 328 -640 425 -640 431 -319 500 -612 612 -640 640 -640 640 -375 500 -480 640 -640 442 -333 500 -640 429 -640 428 -640 427 -330 500 -500 375 -640 480 -640 512 -612 612 -500 375 -640 427 -640 515 -441 640 -640 480 -493 600 -640 478 -331 500 -500 361 -640 428 -500 375 -640 428 -640 429 -640 427 -640 425 -480 640 -480 640 -480 640 -480 640 -640 426 -640 480 -478 640 -427 640 -375 500 -640 427 -640 475 -500 375 -640 419 -513 640 -480 640 -640 480 -640 428 -348 500 -640 480 -640 480 -640 480 -640 427 -420 500 -640 427 -238 640 -480 640 -640 480 -480 640 -483 640 -640 480 -640 480 -330 640 -485 640 -640 480 -640 429 -640 426 -640 480 -612 612 -640 394 -427 640 -640 457 -333 500 -428 640 -640 426 -640 480 -375 500 -640 446 -640 512 -427 640 -640 428 -640 328 -640 480 -612 612 -640 427 -471 450 -640 480 -480 640 -640 480 -640 480 -640 427 -640 448 -500 409 -640 432 -640 400 -640 427 -640 426 -640 480 -640 480 -640 480 -640 480 -480 640 -640 480 -500 333 -500 375 -427 640 -640 360 -427 640 -500 375 -640 427 -640 460 -640 360 -640 480 -640 480 -640 591 -427 640 -640 480 -640 424 -612 612 -640 431 -640 478 -427 640 -640 427 -640 480 -640 480 -638 640 -479 640 -640 480 -640 480 -640 456 -640 480 -427 640 -640 426 -500 335 -480 640 -640 396 -512 512 -640 427 -480 640 -640 424 -500 375 -500 333 -424 640 -480 640 -640 473 -640 482 -281 486 -480 640 -424 640 -426 640 -640 427 -640 436 -640 480 -500 375 -640 447 -640 427 -640 448 -640 427 -640 427 -640 480 -600 359 -640 148 -640 434 -640 480 -612 612 -500 500 -500 333 -640 426 -426 640 -640 480 -640 428 -640 494 -640 426 -425 640 -640 480 -640 456 -500 375 -427 640 -640 427 -640 480 -640 363 -542 640 -457 640 -640 360 -480 640 -640 478 -500 375 -640 424 -640 488 -480 640 -640 427 -500 375 -640 243 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -532 640 -640 318 -640 480 -640 427 -640 426 -300 225 -480 640 -640 480 -640 429 -640 379 -424 640 -359 640 -640 478 -427 640 -480 640 -640 425 -640 424 -640 480 -332 500 -640 480 -480 640 -640 480 -480 640 -640 427 -426 640 -640 425 -640 479 -640 480 -640 480 -640 428 -640 428 -380 500 -640 480 -640 383 -640 480 -640 427 -500 375 -480 640 -640 427 -500 400 -640 480 -640 427 -640 467 -640 480 -500 375 -480 640 -640 429 -500 375 -640 390 -480 640 -640 480 -600 450 -612 612 -480 640 -468 640 -640 427 -640 480 -640 427 -500 375 -640 480 -640 480 -640 426 -640 480 -640 427 -640 427 -640 480 -500 333 -640 427 -427 640 -640 480 -640 480 -604 640 -478 640 -500 376 -640 441 -640 403 -640 480 -640 404 -427 640 -640 394 -640 427 -640 480 -640 640 -640 480 -611 640 -612 612 -478 640 -640 480 -480 640 -612 612 -640 351 -640 513 -640 521 -640 360 -427 640 -500 375 -640 540 -480 640 -500 375 -423 640 -640 448 -500 375 -640 640 -500 303 -640 426 -640 384 -640 480 -640 429 -640 480 -424 640 -640 480 -640 480 -640 431 -640 480 -640 480 -640 426 -640 427 -640 480 -640 427 -640 440 -480 640 -500 352 -640 428 -640 481 -500 500 -640 480 -640 480 -511 640 -640 480 -640 425 -640 353 -640 424 -640 427 -588 640 -640 426 -640 392 -334 500 -496 500 -640 480 -480 640 -640 480 -443 640 -640 439 -640 640 -480 640 -305 500 -640 428 -640 480 -640 426 -640 480 -427 640 -640 427 -426 640 -640 426 -612 612 -480 640 -640 426 -640 457 -640 480 -640 580 -640 360 -640 428 -640 427 -640 480 -500 479 -434 640 -640 425 -531 640 -640 480 -640 426 -640 480 -640 391 -640 426 -640 480 -640 472 -640 376 -640 427 -640 480 -512 640 -500 389 -640 427 -640 427 -500 375 -500 375 -640 425 -640 480 -640 458 -640 478 -640 427 -480 640 -640 480 -640 427 -427 640 -640 425 -510 640 -487 640 -480 640 -640 480 -332 500 -427 640 -480 640 -640 451 -480 640 -375 500 -424 640 -640 480 -640 427 -474 334 -640 480 -480 640 -640 336 -640 480 -640 428 -426 640 -640 480 -640 428 -475 640 -640 480 -640 480 -640 426 -426 640 -640 427 -640 427 -640 387 -428 640 -500 407 -640 427 -363 249 -640 509 -428 640 -640 427 -500 375 -640 468 -640 427 -426 640 -640 480 -500 339 -500 375 -427 640 -500 333 -469 640 -640 393 -640 334 -640 491 -640 468 -500 332 -500 325 -640 480 -640 423 -640 480 -500 333 -640 425 -511 640 -640 425 -640 440 -428 640 -640 480 -640 428 -640 480 -640 426 -640 480 -640 480 -640 427 -289 640 -640 427 -640 480 -555 640 -640 480 -640 460 -640 401 -426 640 -640 480 -640 426 -428 640 -640 361 -612 612 -640 467 -640 427 -640 480 -640 480 -640 373 -640 428 -640 427 -640 425 -428 640 -640 427 -333 500 -640 427 -640 426 -514 640 -640 427 -640 428 -640 428 -640 426 -640 426 -335 500 -640 480 -500 375 -480 640 -640 427 -640 480 -640 480 -640 480 -640 480 -640 426 -640 480 -640 480 -583 640 -480 640 -640 426 -640 359 -640 480 -426 640 -480 640 -500 375 -640 486 -640 427 -375 500 -640 426 -640 480 -640 480 -640 486 -640 467 -640 459 -640 428 -427 640 -500 333 -640 427 -640 480 -640 484 -500 375 -640 454 -640 480 -640 480 -513 640 -640 427 -640 480 -375 500 -500 375 -500 333 -500 281 -640 427 -640 480 -480 640 -640 640 -640 426 -480 640 -640 480 -640 427 -480 640 -640 480 -640 427 -640 426 -640 470 -640 427 -500 335 -500 333 -640 427 -433 640 -640 428 -360 288 -640 427 -640 424 -480 640 -640 426 -640 426 -500 375 -640 426 -640 428 -640 436 -640 426 -480 640 -373 500 -612 612 -500 313 -640 480 -640 426 -640 426 -640 486 -640 480 -640 480 -640 426 -500 375 -640 427 -480 640 -640 427 -480 640 -640 478 -640 428 -640 427 -640 425 -500 375 -640 480 -500 375 -640 426 -385 640 -500 385 -495 640 -640 426 -640 480 -640 480 -640 457 -640 480 -640 480 -640 480 -640 426 -375 500 -269 448 -359 500 -500 375 -640 640 -640 426 -640 360 -500 333 -500 375 -640 535 -375 500 -640 429 -640 427 -640 480 -428 640 -640 480 -640 424 -424 640 -640 400 -417 640 -640 428 -409 640 -378 640 -480 640 -612 612 -640 541 -407 640 -640 480 -640 480 -640 640 -480 640 -640 447 -640 424 -640 480 -640 480 -500 331 -640 478 -427 640 -333 500 -640 427 -500 335 -640 480 -640 480 -427 640 -640 427 -536 640 -500 375 -640 430 -500 375 -640 438 -640 480 -512 640 -382 471 -640 430 -640 478 -640 508 -500 375 -640 424 -640 480 -640 480 -428 640 -640 480 -640 427 -640 480 -335 500 -640 364 -612 612 -640 427 -375 500 -640 480 -640 360 -640 480 -640 360 -500 334 -429 640 -640 480 -600 600 -640 479 -640 513 -480 640 -640 428 -640 460 -640 480 -640 480 -640 456 -640 480 -640 467 -640 427 -640 427 -640 480 -640 480 -480 640 -640 512 -640 480 -640 426 -546 640 -640 425 -640 360 -333 500 -640 480 -481 640 -640 427 -640 427 -640 480 -640 480 -640 336 -445 640 -640 427 -640 426 -640 198 -640 449 -640 425 -640 480 -640 480 -480 640 -640 427 -427 640 -599 391 -640 425 -640 480 -640 283 -500 375 -480 640 -640 406 -424 640 -640 421 -640 480 -640 426 -640 480 -640 480 -640 427 -640 480 -640 480 -425 640 -640 427 -640 480 -635 640 -500 335 -427 640 -640 480 -342 500 -480 640 -640 480 -333 500 -640 480 -640 480 -640 480 -480 640 -500 367 -427 640 -640 425 -480 640 -640 406 -640 519 -640 480 -640 425 -500 375 -640 318 -640 360 -638 640 -640 452 -640 480 -500 375 -500 333 -333 500 -640 427 -640 427 -640 427 -640 426 -640 481 -640 480 -536 640 -640 482 -640 426 -640 427 -427 640 -640 486 -640 480 -640 427 -640 427 -640 480 -480 640 -640 360 -480 640 -640 392 -640 427 -423 640 -640 427 -640 457 -640 360 -500 357 -640 480 -640 480 -640 480 -640 452 -480 640 -640 426 -640 427 -640 480 -640 425 -487 640 -640 428 -640 427 -640 426 -640 515 -500 375 -480 640 -640 640 -640 480 -480 640 -640 403 -640 243 -383 640 -480 640 -640 561 -500 410 -640 640 -640 480 -640 480 -612 612 -640 427 -640 480 -640 480 -537 640 -640 480 -500 333 -583 437 -500 319 -366 640 -640 480 -640 424 -640 426 -640 424 -500 321 -640 432 -640 480 -640 480 -640 427 -383 640 -427 640 -640 427 -516 640 -640 487 -640 398 -500 375 -640 478 -640 360 -612 612 -426 640 -640 480 -640 480 -640 427 -640 427 -427 640 -640 425 -500 333 -640 427 -640 640 -640 495 -640 480 -478 640 -640 480 -640 480 -500 375 -640 480 -640 424 -640 424 -500 408 -640 556 -480 640 -640 429 -480 640 -640 480 -640 478 -640 594 -640 427 -640 531 -640 429 -640 413 -640 478 -480 640 -480 640 -640 425 -640 485 -478 640 -478 640 -640 480 -640 453 -640 426 -426 640 -640 480 -640 425 -640 474 -640 480 -640 480 -640 480 -600 401 -640 440 -640 480 -640 480 -426 640 -480 640 -480 640 -640 427 -479 640 -427 640 -640 480 -640 480 -313 500 -500 375 -500 375 -640 425 -480 640 -640 480 -333 500 -640 433 -480 640 -500 371 -640 428 -640 480 -640 480 -640 480 -640 401 -640 480 -640 480 -640 640 -640 480 -640 429 -612 612 -640 427 -640 480 -640 427 -492 500 -640 480 -320 240 -470 350 -640 428 -640 512 -640 427 -640 403 -640 480 -640 480 -640 425 -640 427 -500 325 -640 480 -640 427 -640 425 -500 375 -500 332 -640 427 -500 375 -640 521 -429 640 -550 640 -640 426 -640 480 -640 476 -427 640 -640 480 -521 640 -480 640 -640 359 -640 427 -500 500 -640 427 -427 640 -640 425 -500 375 -500 334 -640 478 -500 281 -640 428 -640 426 -640 440 -640 480 -640 480 -640 426 -640 427 -640 480 -640 427 -640 480 -640 427 -375 500 -500 375 -640 427 -457 640 -640 480 -640 480 -640 480 -500 375 -640 480 -640 480 -383 500 -427 640 -640 427 -640 424 -427 640 -425 500 -427 640 -478 640 -640 427 -640 480 -612 612 -640 480 -640 427 -640 480 -640 420 -500 375 -640 214 -612 612 -375 500 -640 482 -640 427 -640 427 -640 466 -480 640 -640 480 -425 640 -480 640 -375 500 -640 480 -500 333 -640 480 -640 480 -640 438 -640 427 -640 394 -480 360 -640 431 -640 480 -456 640 -500 375 -640 480 -427 640 -559 640 -500 375 -640 478 -640 427 -640 480 -640 359 -640 480 -640 429 -480 640 -333 500 -640 428 -640 424 -640 428 -640 480 -640 512 -640 426 -640 425 -500 375 -640 480 -640 427 -463 640 -640 524 -640 427 -640 427 -640 426 -640 480 -612 612 -640 425 -480 640 -640 480 -640 480 -640 480 -640 430 -640 480 -640 480 -500 357 -640 480 -640 366 -375 500 -500 333 -480 640 -480 640 -640 424 -640 426 -640 210 -500 375 -640 427 -640 480 -640 480 -426 640 -427 640 -640 480 -480 640 -640 480 -640 427 -480 640 -640 480 -375 500 -425 640 -480 640 -640 427 -427 640 -640 480 -480 640 -640 480 -480 640 -480 640 -334 500 -640 506 -428 640 -640 426 -569 640 -640 431 -612 612 -640 480 -427 640 -375 500 -480 640 -640 640 -500 375 -640 427 -640 527 -640 426 -640 480 -640 480 -640 619 -640 427 -335 500 -640 427 -640 427 -640 500 -640 427 -640 478 -500 333 -640 427 -428 640 -640 480 -640 478 -500 500 -424 640 -640 444 -428 640 -640 480 -431 640 -640 369 -612 612 -427 640 -640 480 -640 428 -422 640 -640 424 -480 640 -640 427 -427 640 -425 640 -480 640 -640 480 -640 427 -640 453 -427 640 -640 480 -640 424 -640 480 -640 427 -640 427 -375 500 -640 428 -640 480 -640 480 -640 427 -640 426 -640 480 -640 480 -640 427 -640 428 -640 480 -500 375 -480 640 -640 480 -480 640 -500 324 -480 640 -640 426 -640 480 -640 425 -500 334 -328 500 -640 480 -640 478 -364 640 -640 427 -640 480 -640 426 -640 427 -640 640 -640 480 -457 640 -640 480 -640 425 -500 480 -640 427 -640 480 -640 360 -640 480 -480 640 -375 500 -640 424 -640 471 -640 480 -640 480 -480 640 -500 375 -640 480 -640 480 -640 427 -426 640 -428 640 -640 640 -640 421 -640 427 -640 429 -640 480 -640 480 -427 640 -640 428 -640 427 -640 480 -640 360 -640 480 -500 333 -640 428 -640 566 -480 640 -640 427 -468 640 -612 612 -500 333 -500 375 -640 480 -640 455 -640 483 -640 427 -640 480 -640 424 -640 383 -640 480 -640 427 -640 480 -480 640 -640 480 -500 237 -640 480 -640 491 -427 640 -326 500 -640 361 -640 512 -612 612 -500 333 -640 480 -427 640 -426 640 -640 485 -640 427 -640 480 -640 480 -640 480 -640 511 -640 480 -480 640 -640 523 -640 454 -640 360 -500 375 -500 375 -500 414 -500 375 -613 640 -640 420 -480 640 -640 480 -640 427 -640 442 -512 640 -640 426 -640 360 -500 375 -500 375 -640 427 -640 424 -640 428 -640 425 -640 427 -640 480 -640 360 -640 428 -640 426 -640 426 -427 640 -640 478 -640 640 -640 480 -640 426 -640 428 -500 322 -640 480 -640 428 -333 500 -425 640 -640 480 -640 513 -500 376 -480 640 -480 640 -500 333 -545 640 -425 640 -640 427 -479 640 -455 640 -405 640 -640 565 -640 480 -640 427 -640 480 -640 480 -640 454 -640 293 -640 476 -640 480 -640 480 -399 600 -640 425 -640 427 -640 427 -427 640 -500 333 -640 480 -640 427 -612 612 -640 422 -500 333 -640 463 -500 357 -640 480 -640 427 -640 427 -612 612 -428 640 -640 480 -640 426 -640 480 -640 480 -426 640 -640 480 -640 480 -480 640 -424 640 -480 640 -480 640 -640 426 -640 480 -640 480 -640 427 -640 480 -640 480 -480 640 -640 480 -424 640 -640 427 -640 427 -612 612 -640 480 -480 640 -640 480 -640 424 -640 514 -640 379 -640 428 -500 375 -640 427 -640 427 -500 375 -500 333 -640 480 -299 640 -640 425 -640 480 -640 510 -500 375 -426 640 -640 480 -640 480 -522 640 -640 480 -480 640 -640 427 -640 427 -500 344 -640 428 -640 480 -500 375 -352 288 -640 424 -427 640 -640 480 -479 640 -640 428 -640 427 -640 478 -612 612 -480 300 -640 427 -480 640 -640 237 -640 427 -640 461 -640 622 -480 640 -500 375 -640 502 -640 378 -640 480 -500 409 -640 224 -640 478 -640 394 -424 640 -640 480 -333 500 -640 395 -640 416 -479 640 -500 375 -640 640 -640 480 -640 403 -640 416 -480 640 -386 640 -332 500 -457 640 -640 480 -640 426 -640 427 -640 451 -640 480 -640 427 -640 480 -640 427 -478 640 -480 640 -640 427 -640 428 -640 480 -640 425 -640 480 -425 640 -640 427 -640 424 -640 426 -640 424 -640 284 -427 640 -640 427 -500 375 -427 640 -480 640 -640 427 -640 463 -640 446 -480 640 -640 317 -425 640 -594 640 -427 640 -480 640 -480 640 -640 427 -427 640 -640 640 -640 432 -640 480 -640 426 -640 427 -640 480 -640 480 -640 427 -640 430 -640 480 -561 640 -640 427 -640 478 -424 640 -426 640 -640 418 -640 427 -457 640 -640 480 -480 640 -500 375 -480 640 -640 478 -425 640 -640 533 -640 424 -640 427 -640 427 -640 359 -640 480 -612 612 -500 376 -640 480 -640 426 -335 500 -640 480 -640 426 -640 480 -640 640 -640 480 -640 427 -640 480 -640 480 -640 480 -427 640 -640 359 -467 640 -640 428 -640 480 -640 418 -640 480 -640 480 -640 480 -640 425 -640 427 -640 478 -640 480 -640 427 -640 427 -640 480 -640 414 -640 360 -427 640 -500 330 -640 480 -500 335 -640 480 -427 640 -640 439 -640 480 -640 478 -640 427 -500 375 -640 426 -640 427 -375 500 -640 427 -640 480 -640 480 -640 596 -640 400 -640 425 -480 640 -640 448 -640 429 -640 426 -500 304 -640 507 -640 427 -500 332 -640 426 -640 480 -427 640 -500 378 -640 426 -375 500 -480 640 -500 417 -640 480 -640 427 -640 481 -640 426 -640 426 -500 387 -286 417 -640 480 -640 424 -500 403 -640 480 -640 411 -500 332 -500 334 -640 427 -612 612 -640 395 -640 480 -500 335 -640 480 -640 480 -640 433 -640 427 -428 640 -640 640 -640 428 -500 375 -640 417 -427 640 -480 640 -640 360 -640 480 -640 427 -407 640 -640 480 -640 425 -640 480 -640 418 -640 428 -500 371 -640 426 -500 480 -498 500 -640 424 -640 426 -640 426 -640 427 -480 640 -640 480 -500 333 -640 480 -640 457 -426 640 -408 640 -640 428 -640 480 -426 640 -552 640 -640 425 -640 480 -500 375 -640 477 -640 488 -504 640 -312 480 -457 640 -640 480 -640 480 -640 425 -640 474 -640 480 -640 428 -456 640 -500 400 -612 612 -640 480 -640 439 -640 480 -640 427 -640 480 -640 477 -640 480 -640 425 -640 360 -480 640 -640 480 -640 480 -640 425 -640 480 -640 480 -431 640 -480 640 -640 426 -480 640 -428 640 -426 640 -461 640 -640 480 -337 500 -360 640 -640 480 -500 332 -480 640 -500 333 -464 640 -640 480 -640 480 -640 480 -640 428 -640 427 -640 360 -640 425 -480 640 -500 375 -500 414 -612 612 -640 480 -427 640 -640 366 -640 427 -427 640 -640 427 -640 480 -640 480 -640 427 -640 426 -640 480 -500 375 -549 640 -640 480 -429 640 -500 640 -640 480 -640 480 -500 375 -500 334 -640 480 -640 480 -640 444 -640 324 -640 480 -480 640 -640 427 -480 640 -640 426 -640 361 -338 500 -640 427 -640 480 -640 480 -480 640 -427 640 -530 640 -441 640 -500 375 -640 428 -640 512 -500 375 -640 480 -480 640 -428 640 -332 500 -640 427 -640 480 -640 425 -640 429 -640 431 -640 480 -640 427 -640 396 -425 640 -640 480 -640 427 -500 376 -375 500 -500 333 -640 480 -640 360 -500 375 -500 389 -640 480 -640 344 -480 640 -428 640 -640 480 -640 427 -480 640 -640 427 -640 547 -375 500 -612 612 -481 640 -640 480 -612 612 -640 480 -640 427 -426 640 -400 500 -640 427 -640 480 -640 419 -640 513 -640 480 -427 640 -640 426 -640 427 -500 333 -427 640 -640 424 -640 399 -640 480 -640 425 -640 364 -640 640 -640 427 -640 457 -640 629 -640 426 -427 640 -640 426 -500 375 -640 424 -427 640 -640 427 -640 428 -640 480 -640 480 -640 324 -500 375 -640 480 -640 427 -500 281 -640 427 -640 441 -640 427 -640 480 -500 300 -480 640 -350 500 -424 640 -534 640 -640 427 -640 427 -640 428 -640 426 -640 480 -480 640 -500 317 -640 427 -500 375 -640 480 -640 427 -640 480 -640 480 -640 480 -640 427 -480 640 -640 501 -640 478 -640 480 -640 424 -640 459 -500 375 -640 427 -480 640 -640 426 -640 481 -500 476 -333 500 -640 480 -640 490 -640 428 -640 568 -640 480 -640 512 -640 453 -640 480 -428 640 -640 480 -640 480 -640 480 -480 640 -640 624 -640 427 -640 438 -640 480 -640 400 -500 333 -640 480 -427 640 -640 426 -428 640 -640 480 -640 480 -640 480 -640 427 -640 480 -500 375 -612 612 -640 427 -640 480 -640 426 -640 449 -427 640 -640 427 -333 500 -640 427 -480 640 -500 375 -434 640 -640 463 -640 426 -480 640 -640 288 -640 425 -640 426 -640 480 -640 427 -640 425 -640 469 -359 640 -480 640 -640 480 -362 500 -427 640 -640 480 -640 426 -427 640 -640 425 -427 640 -640 480 -375 500 -640 468 -640 480 -500 375 -640 427 -500 410 -640 427 -500 374 -640 426 -640 480 -612 612 -480 360 -500 414 -640 480 -500 333 -640 426 -640 427 -640 425 -640 480 -640 480 -640 427 -640 425 -500 375 -640 473 -427 640 -640 426 -640 427 -640 396 -640 427 -640 488 -500 341 -612 612 -640 360 -640 425 -640 480 -426 640 -640 403 -640 427 -640 427 -640 428 -640 427 -332 500 -500 375 -480 640 -640 480 -480 640 -640 426 -640 427 -640 360 -427 640 -612 612 -640 480 -640 424 -640 416 -640 480 -640 480 -640 480 -500 375 -500 333 -640 427 -640 427 -427 640 -500 375 -640 480 -480 640 -508 640 -612 612 -500 375 -640 419 -429 640 -640 427 -500 375 -640 480 -500 332 -640 480 -640 426 -469 640 -427 640 -427 640 -640 480 -408 640 -480 640 -500 500 -425 640 -512 640 -640 455 -640 425 -640 480 -640 425 -640 364 -640 480 -427 640 -640 416 -640 480 -640 296 -640 427 -640 426 -640 480 -640 480 -640 480 -640 427 -640 480 -500 309 -640 465 -640 513 -640 426 -640 480 -640 556 -640 480 -426 640 -427 640 -640 640 -640 427 -640 427 -480 640 -480 640 -640 427 -425 640 -640 640 -427 640 -640 426 -640 429 -640 480 -640 481 -510 640 -640 480 -640 480 -604 453 -424 640 -640 427 -480 640 -640 480 -640 427 -640 427 -640 426 -640 480 -640 480 -375 500 -640 480 -640 426 -500 281 -640 480 -500 332 -640 480 -638 640 -640 457 -544 640 -612 612 -640 427 -612 612 -371 500 -640 324 -640 480 -640 427 -427 640 -365 500 -640 427 -483 640 -640 427 -500 500 -640 284 -640 479 -640 426 -640 427 -640 480 -359 640 -640 480 -469 640 -640 640 -640 428 -480 640 -640 426 -640 345 -640 422 -640 427 -427 640 -640 480 -640 425 -640 480 -640 480 -455 640 -640 480 -640 480 -640 480 -640 480 -333 500 -640 427 -640 480 -640 480 -500 375 -427 640 -640 480 -640 429 -480 640 -640 480 -640 369 -500 378 -640 619 -640 480 -427 640 -426 640 -640 426 -640 489 -640 307 -640 640 -640 424 -640 480 -500 404 -640 428 -426 640 -478 640 -640 426 -426 640 -500 357 -640 427 -480 640 -427 640 -640 333 -500 332 -592 576 -640 480 -640 480 -640 427 -640 339 -640 358 -500 375 -640 480 -480 640 -427 640 -427 640 -500 294 -640 286 -500 375 -500 375 -640 427 -640 264 -640 426 -640 427 -640 391 -433 640 -640 474 -426 640 -640 640 -640 423 -640 480 -500 333 -332 500 -640 428 -640 427 -427 640 -640 487 -640 427 -640 427 -500 377 -640 480 -640 478 -640 470 -500 362 -640 480 -640 507 -640 456 -640 427 -640 427 -333 640 -640 427 -640 397 -640 470 -640 480 -480 640 -640 427 -640 427 -428 640 -640 427 -640 402 -612 612 -640 427 -640 360 -500 375 -640 427 -640 427 -640 640 -640 480 -640 427 -480 640 -640 640 -497 640 -640 480 -612 612 -640 425 -500 348 -640 427 -333 500 -640 480 -640 428 -427 640 -640 428 -378 500 -640 360 -640 480 -640 426 -500 345 -477 640 -640 480 -640 480 -640 480 -640 480 -640 425 -640 427 -640 429 -640 428 -620 319 -427 640 -500 332 -500 375 -640 509 -640 426 -640 480 -640 457 -640 480 -640 424 -473 640 -432 324 -640 428 -640 469 -640 343 -640 427 -333 500 -640 474 -640 427 -640 480 -544 640 -640 480 -333 500 -500 375 -640 427 -500 454 -640 426 -640 640 -340 500 -616 640 -640 427 -380 500 -640 427 -640 427 -500 400 -640 425 -640 480 -640 399 -640 317 -640 480 -500 375 -640 480 -500 500 -500 375 -640 424 -640 480 -640 480 -640 427 -640 427 -640 480 -640 480 -640 453 -405 336 -640 395 -640 426 -640 480 -640 480 -640 482 -640 431 -480 640 -640 480 -427 640 -640 320 -478 640 -640 418 -500 375 -427 640 -424 640 -640 424 -640 482 -640 426 -375 500 -640 338 -425 640 -640 294 -640 426 -500 333 -640 427 -640 428 -640 480 -612 612 -640 480 -429 640 -640 355 -640 435 -376 500 -640 478 -640 480 -640 425 -640 480 -427 640 -480 640 -640 480 -640 428 -640 427 -640 427 -640 429 -400 300 -640 303 -500 500 -333 500 -640 438 -640 480 -480 640 -457 640 -640 426 -640 490 -640 427 -640 428 -640 425 -640 429 -640 462 -640 480 -478 640 -500 367 -640 428 -425 640 -640 480 -640 480 -500 375 -480 640 -320 240 -640 478 -640 480 -640 480 -500 500 -640 425 -640 480 -640 425 -640 427 -640 480 -640 480 -480 640 -640 428 -640 426 -427 640 -640 480 -640 480 -480 640 -500 375 -640 425 -427 640 -427 640 -640 427 -640 459 -500 335 -640 427 -427 640 -640 480 -500 333 -640 360 -429 640 -424 640 -640 480 -640 426 -640 464 -640 414 -480 640 -640 462 -640 640 -640 413 -640 480 -640 480 -640 432 -640 480 -640 480 -427 640 -640 480 -500 481 -640 427 -612 612 -640 479 -300 400 -612 612 -640 424 -600 428 -640 480 -467 276 -640 427 -640 428 -640 360 -427 640 -530 640 -640 392 -640 480 -640 480 -640 427 -460 500 -640 426 -640 427 -640 480 -500 500 -612 612 -640 480 -640 427 -640 427 -500 375 -579 640 -640 427 -480 640 -480 640 -480 640 -640 480 -500 375 -427 640 -640 427 -640 427 -360 640 -640 480 -640 427 -500 499 -640 501 -480 640 -640 410 -478 640 -500 375 -457 640 -640 480 -335 500 -612 612 -640 427 -640 480 -640 480 -364 640 -640 237 -640 400 -640 480 -500 375 -354 640 -640 427 -480 640 -375 500 -640 427 -640 427 -480 640 -612 612 -640 480 -640 427 -480 640 -640 425 -526 640 -480 640 -640 473 -500 375 -640 426 -640 471 -500 335 -640 426 -640 433 -480 640 -640 489 -640 340 -404 640 -640 428 -640 428 -640 427 -503 640 -426 640 -640 428 -640 360 -500 375 -640 427 -640 427 -640 427 -480 640 -640 433 -640 423 -640 480 -640 424 -640 480 -500 331 -640 480 -640 426 -640 454 -640 425 -640 427 -640 300 -466 640 -480 640 -500 375 -374 500 -640 640 -640 480 -640 480 -320 240 -640 508 -640 428 -500 375 -500 375 -640 480 -640 426 -640 480 -640 425 -478 640 -640 506 -640 426 -640 427 -480 640 -480 640 -640 427 -640 427 -640 428 -640 426 -640 426 -500 375 -640 480 -640 426 -640 425 -640 427 -612 612 -640 480 -640 441 -640 424 -640 425 -480 360 -640 417 -640 426 -640 427 -640 512 -640 426 -640 480 -640 480 -460 500 -640 520 -640 361 -640 512 -426 640 -640 427 -427 640 -500 375 -640 428 -480 640 -640 480 -640 480 -480 640 -612 612 -640 480 -332 500 -180 240 -329 500 -640 427 -427 640 -640 473 -640 480 -640 558 -375 500 -640 505 -480 640 -640 424 -375 500 -500 377 -640 480 -640 405 -640 480 -480 640 -640 427 -640 423 -480 640 -640 233 -335 500 -330 640 -500 334 -640 427 -640 588 -500 375 -426 640 -640 425 -640 480 -480 640 -640 480 -480 640 -640 480 -640 427 -640 480 -612 612 -612 612 -640 428 -427 640 -640 427 -640 480 -640 427 -640 237 -436 640 -640 424 -640 428 -427 640 -612 612 -490 640 -640 480 -480 640 -480 640 -640 558 -500 335 -640 417 -640 480 -640 427 -640 360 -640 425 -640 370 -640 481 -640 480 -640 480 -640 480 -374 500 -640 454 -640 480 -640 425 -640 426 -640 448 -640 426 -640 640 -500 429 -640 427 -431 640 -480 640 -512 640 -300 450 -640 483 -480 640 -425 640 -640 427 -640 412 -640 359 -640 556 -640 339 -640 480 -640 430 -640 421 -640 429 -640 480 -428 640 -640 428 -640 394 -480 640 -640 514 -411 640 -640 427 -640 428 -640 427 -640 429 -640 480 -640 430 -640 480 -500 332 -640 427 -640 480 -640 424 -500 263 -640 527 -640 480 -439 640 -480 640 -640 480 -640 480 -640 478 -640 480 -640 429 -640 427 -640 480 -640 411 -640 426 -640 480 -640 480 -480 640 -429 640 -640 480 -640 427 -427 640 -463 640 -640 427 -640 480 -640 480 -427 640 -431 640 -338 450 -640 427 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 603 -640 480 -640 480 -640 512 -640 427 -427 640 -612 612 -640 480 -640 480 -333 500 -640 480 -640 424 -480 640 -500 375 -640 480 -640 480 -333 500 -640 429 -640 480 -640 480 -640 547 -396 640 -640 427 -640 480 -640 427 -640 424 -640 427 -500 375 -640 640 -640 427 -480 640 -640 429 -640 480 -640 424 -640 413 -640 478 -640 426 -640 426 -427 640 -332 500 -640 425 -640 427 -640 305 -425 640 -640 584 -640 480 -640 480 -640 425 -480 640 -480 640 -640 480 -500 375 -612 612 -640 427 -640 431 -500 375 -315 640 -427 640 -500 375 -640 480 -515 640 -640 480 -640 480 -500 333 -450 390 -640 427 -640 480 -640 480 -480 640 -640 427 -640 480 -640 480 -480 640 -480 640 -500 305 -627 640 -640 480 -640 569 -640 480 -375 500 -640 427 -640 427 -427 640 -640 589 -640 428 -640 439 -640 427 -480 640 -480 640 -640 427 -640 427 -640 480 -500 326 -640 426 -640 426 -640 480 -424 640 -640 618 -612 612 -640 427 -640 426 -500 500 -640 624 -426 640 -612 612 -579 326 -640 480 -640 480 -640 383 -627 640 -640 421 -479 500 -506 640 -640 480 -640 281 -640 427 -427 640 -500 375 -640 445 -640 427 -640 480 -640 480 -640 480 -640 471 -500 500 -640 360 -500 400 -640 480 -640 449 -452 640 -640 480 -640 424 -640 480 -427 640 -640 480 -640 427 -640 426 -640 461 -480 640 -640 480 -480 640 -636 640 -640 480 -500 375 -375 500 -640 428 -480 640 -640 421 -640 427 -480 640 -640 429 -640 425 -640 427 -640 471 -427 640 -431 640 -640 427 -640 431 -640 480 -640 480 -640 480 -640 480 -640 510 -640 480 -640 480 -640 512 -640 480 -501 640 -640 427 -640 427 -640 640 -640 480 -640 360 -640 426 -640 480 -427 640 -375 500 -640 640 -640 480 -640 427 -640 428 -640 427 -640 480 -640 426 -640 480 -427 640 -640 426 -500 325 -402 640 -640 432 -640 480 -480 640 -640 438 -640 512 -500 333 -500 333 -640 540 -640 426 -640 427 -640 480 -500 341 -500 375 -640 428 -301 640 -640 512 -640 480 -426 640 -350 467 -375 500 -640 360 -427 640 -640 360 -640 480 -640 480 -640 426 -480 640 -640 480 -640 441 -640 426 -375 500 -640 435 -640 427 -640 480 -500 375 -428 640 -453 500 -640 427 -640 480 -640 406 -494 640 -640 360 -640 480 -640 480 -640 427 -640 426 -489 640 -640 480 -500 375 -640 478 -640 427 -640 427 -640 429 -427 640 -640 427 -640 425 -640 463 -640 360 -640 480 -640 427 -640 480 -375 500 -640 427 -640 431 -640 480 -640 376 -640 640 -427 640 -640 426 -640 487 -640 428 -426 640 -640 480 -458 640 -640 427 -640 427 -640 629 -480 640 -640 513 -428 640 -425 640 -512 640 -640 480 -640 480 -640 427 -640 480 -640 480 -480 640 -640 428 -506 640 -640 480 -500 335 -640 480 -500 375 -640 426 -640 427 -480 640 -640 427 -640 477 -640 480 -640 427 -640 406 -480 640 -638 425 -640 426 -640 480 -480 640 -640 427 -640 640 -640 423 -640 457 -640 512 -640 427 -426 640 -640 480 -500 338 -640 520 -640 424 -640 398 -640 563 -640 428 -640 464 -640 401 -640 427 -354 640 -552 640 -500 375 -640 427 -640 512 -640 428 -500 375 -640 429 -500 435 -640 425 -600 400 -480 640 -640 427 -427 640 -120 160 -640 426 -500 375 -480 640 -428 640 -640 427 -640 480 -640 480 -640 480 -640 512 -640 480 -640 480 -512 640 -640 428 -640 427 -640 454 -640 480 -640 427 -486 640 -640 488 -500 375 -480 640 -346 640 -640 428 -640 376 -640 427 -640 539 -640 427 -640 371 -640 427 -612 612 -640 480 -640 480 -640 480 -612 612 -640 429 -640 512 -428 640 -500 192 -640 360 -640 449 -640 480 -640 480 -427 640 -640 620 -383 640 -336 447 -640 427 -480 640 -640 423 -640 427 -640 480 -640 427 -427 640 -640 351 -640 363 -640 444 -456 640 -427 640 -640 640 -640 610 -425 640 -612 612 -640 504 -333 500 -640 320 -640 426 -640 480 -640 423 -640 424 -640 480 -640 480 -640 480 -464 640 -640 427 -640 480 -640 360 -427 640 -640 480 -640 427 -500 375 -640 426 -640 427 -640 480 -640 427 -534 640 -480 640 -409 500 -640 480 -640 480 -640 427 -500 359 -640 480 -640 480 -640 480 -612 612 -640 428 -640 480 -640 496 -500 320 -640 525 -427 640 -640 480 -375 500 -640 480 -500 375 -500 375 -640 427 -500 375 -640 428 -480 640 -478 640 -640 427 -640 427 -640 632 -500 339 -416 640 -640 428 -640 428 -640 427 -640 428 -640 480 -640 479 -639 640 -480 640 -640 424 -640 480 -640 426 -500 333 -640 427 -640 480 -375 500 -640 352 -640 480 -640 425 -640 424 -640 480 -640 428 -640 426 -250 150 -640 481 -500 332 -385 640 -640 480 -500 332 -612 612 -640 480 -375 500 -640 419 -424 640 -640 426 -424 640 -640 480 -426 640 -640 480 -640 426 -500 357 -640 480 -640 480 -640 480 -612 612 -640 480 -640 480 -612 612 -640 480 -640 429 -427 640 -340 640 -500 333 -640 480 -640 480 -453 640 -640 428 -640 478 -480 640 -640 480 -375 500 -640 480 -640 480 -640 480 -640 457 -640 424 -640 425 -640 480 -640 480 -640 436 -640 414 -427 640 -500 400 -480 640 -640 500 -640 341 -640 428 -500 399 -427 640 -640 480 -640 480 -640 480 -640 481 -519 640 -640 426 -500 221 -640 631 -500 425 -640 427 -640 480 -640 480 -480 640 -640 460 -640 479 -640 427 -427 640 -640 429 -375 500 -640 480 -640 480 -640 427 -640 426 -480 360 -495 500 -640 432 -640 480 -566 640 -426 640 -640 478 -640 427 -640 428 -640 480 -640 480 -480 640 -375 500 -614 640 -640 480 -640 480 -640 404 -480 640 -640 427 -333 500 -640 480 -640 425 -428 640 -427 640 -500 500 -500 374 -640 526 -640 384 -640 427 -640 480 -640 480 -640 480 -375 500 -640 480 -640 426 -640 421 -428 640 -443 567 -640 480 -640 425 -640 480 -640 509 -640 360 -480 640 -640 480 -640 426 -640 427 -446 640 -640 427 -640 480 -640 428 -640 480 -599 400 -640 425 -427 640 -427 640 -640 427 -640 480 -640 427 -536 640 -500 333 -640 427 -427 640 -375 500 -640 480 -427 640 -640 478 -640 353 -500 375 -640 480 -640 480 -640 480 -640 427 -500 369 -640 480 -480 360 -488 640 -640 480 -640 480 -640 429 -500 334 -640 427 -640 427 -640 480 -426 640 -640 480 -640 346 -640 544 -375 500 -478 640 -640 480 -640 429 -640 541 -640 426 -427 640 -640 427 -500 333 -640 426 -375 500 -454 640 -640 480 -640 427 -640 427 -640 435 -427 640 -640 428 -640 480 -628 484 -640 510 -375 500 -640 433 -640 480 -640 395 -500 375 -640 426 -640 427 -640 478 -612 612 -480 640 -640 480 -640 480 -480 640 -500 375 -640 427 -427 640 -640 360 -480 640 -640 480 -640 432 -640 480 -640 480 -640 426 -640 480 -640 480 -500 332 -640 480 -640 424 -417 500 -640 480 -640 503 -640 480 -640 628 -640 426 -640 480 -480 640 -640 501 -640 480 -640 480 -640 598 -640 480 -640 480 -640 427 -640 428 -640 428 -640 481 -480 640 -640 427 -500 375 -640 640 -640 428 -640 480 -640 480 -640 522 -427 640 -480 640 -640 635 -640 480 -640 480 -640 480 -640 488 -426 640 -640 480 -481 640 -640 425 -640 426 -640 426 -429 640 -281 500 -640 427 -426 640 -480 640 -640 428 -640 480 -640 427 -328 500 -419 304 -480 640 -425 640 -640 640 -640 404 -640 480 -640 480 -640 426 -469 500 -393 640 -480 320 -640 426 -640 640 -427 640 -640 426 -427 640 -640 425 -640 427 -500 335 -640 458 -640 446 -640 359 -424 640 -640 480 -480 640 -640 480 -640 512 -640 319 -640 360 -640 427 -640 480 -427 640 -640 478 -604 640 -480 640 -640 427 -640 523 -640 478 -640 506 -500 375 -640 557 -427 640 -640 478 -640 480 -478 640 -480 640 -640 427 -640 427 -480 640 -477 640 -640 439 -640 623 -640 428 -427 640 -640 481 -640 356 -426 640 -640 426 -500 333 -640 429 -640 490 -640 427 -640 427 -640 527 -480 640 -427 640 -640 426 -640 426 -640 480 -640 463 -500 375 -640 474 -640 427 -500 333 -640 480 -640 480 -612 612 -427 640 -640 427 -640 433 -427 640 -640 416 -427 640 -640 480 -427 640 -640 480 -640 427 -640 427 -640 478 -640 480 -640 360 -640 480 -500 333 -640 427 -640 426 -600 640 -640 427 -640 426 -640 425 -640 480 -457 640 -428 640 -640 573 -640 392 -640 371 -480 640 -600 400 -640 480 -640 428 -640 480 -500 375 -640 480 -640 480 -640 425 -640 480 -640 480 -640 425 -640 425 -640 480 -640 480 -640 480 -640 480 -640 480 -375 500 -500 375 -375 500 -640 480 -568 320 -640 426 -640 428 -640 427 -640 428 -640 383 -640 487 -640 427 -375 500 -640 482 -640 427 -375 500 -640 480 -399 640 -640 427 -200 315 -480 640 -427 640 -427 640 -478 640 -500 410 -640 401 -375 500 -409 640 -640 424 -640 431 -640 426 -612 612 -362 500 -640 427 -640 427 -640 480 -640 360 -480 640 -640 427 -374 500 -640 478 -375 500 -640 480 -640 480 -428 640 -427 640 -500 375 -640 427 -360 640 -640 424 -640 425 -640 480 -427 640 -427 640 -500 400 -425 640 -500 357 -640 480 -640 499 -640 480 -480 640 -460 300 -640 480 -332 500 -640 427 -568 320 -640 424 -500 333 -640 461 -640 480 -427 640 -640 480 -640 429 -640 480 -500 375 -424 640 -640 480 -640 427 -500 333 -612 612 -500 352 -640 438 -500 375 -424 640 -480 640 -400 300 -640 480 -640 478 -640 583 -500 375 -400 300 -640 427 -425 640 -640 428 -640 480 -640 427 -612 612 -640 427 -640 480 -640 480 -640 428 -640 426 -640 424 -640 425 -383 640 -640 481 -640 640 -640 376 -640 480 -500 334 -640 436 -640 427 -427 640 -640 480 -640 480 -427 640 -640 556 -450 640 -426 640 -640 425 -640 480 -640 480 -640 480 -640 480 -640 480 -256 192 -640 427 -640 474 -640 480 -640 480 -640 480 -640 480 -640 296 -443 500 -640 427 -640 480 -640 547 -483 640 -494 640 -480 640 -640 480 -640 480 -640 428 -640 458 -561 640 -640 427 -640 483 -480 640 -640 479 -640 480 -640 480 -640 481 -640 427 -640 425 -640 427 -640 512 -640 348 -640 640 -640 425 -640 427 -480 640 -640 427 -640 427 -640 480 -503 640 -640 424 -640 427 -640 427 -480 640 -640 426 -640 480 -500 375 -640 427 -640 427 -640 474 -300 450 -640 480 -640 424 -640 480 -335 500 -640 427 -640 399 -640 512 -259 500 -500 347 -640 480 -640 480 -500 480 -640 427 -640 383 -640 424 -640 480 -640 427 -640 284 -640 427 -640 427 -640 376 -334 500 -640 480 -640 480 -640 425 -500 375 -640 427 -640 480 -640 396 -640 480 -375 500 -640 480 -500 332 -640 427 -640 480 -640 480 -500 375 -640 425 -520 368 -640 427 -640 427 -640 428 -612 612 -494 640 -640 442 -640 480 -640 425 -434 640 -457 640 -426 640 -500 375 -640 480 -640 427 -640 489 -480 640 -640 428 -640 586 -640 480 -640 480 -640 480 -640 360 -612 612 -640 480 -640 427 -640 480 -640 427 -640 613 -480 640 -640 394 -640 427 -640 427 -640 427 -640 433 -640 425 -500 375 -480 640 -537 640 -427 640 -640 383 -480 640 -640 414 -427 640 -480 640 -480 640 -640 480 -640 480 -426 640 -640 427 -375 500 -427 640 -480 640 -640 426 -640 480 -640 480 -640 426 -640 480 -375 500 -604 453 -375 500 -640 480 -640 480 -640 437 -500 333 -640 480 -640 480 -480 640 -333 500 -640 368 -640 640 -427 640 -640 425 -488 640 -500 334 -427 640 -640 485 -640 480 -488 640 -640 424 -480 640 -640 478 -640 427 -640 431 -481 640 -640 480 -640 426 -392 640 -500 440 -640 478 -426 640 -640 429 -612 612 -640 426 -640 427 -640 480 -500 375 -640 480 -640 428 -640 427 -486 640 -640 478 -640 426 -431 640 -640 425 -375 500 -640 427 -478 640 -640 427 -640 429 -640 480 -480 640 -640 511 -640 427 -500 400 -640 480 -640 361 -500 375 -333 500 -428 640 -640 411 -428 640 -640 347 -640 480 -640 427 -640 426 -640 480 -640 480 -640 534 -640 429 -480 640 -640 426 -640 480 -640 480 -640 480 -640 428 -640 298 -640 428 -640 428 -640 427 -640 480 -640 480 -500 376 -640 480 -640 480 -448 298 -640 329 -640 427 -640 401 -478 640 -481 640 -387 500 -640 480 -640 427 -368 500 -480 640 -640 480 -500 408 -427 640 -480 640 -640 426 -640 427 -640 480 -640 427 -480 640 -640 423 -640 320 -500 332 -375 500 -480 640 -640 427 -640 515 -640 480 -480 640 -433 640 -500 375 -640 426 -640 451 -427 640 -612 612 -640 480 -640 482 -425 640 -640 480 -640 360 -640 478 -640 480 -631 640 -500 333 -640 401 -640 480 -561 640 -640 428 -640 478 -640 480 -640 427 -640 480 -255 600 -500 375 -640 512 -500 500 -640 480 -640 640 -640 463 -640 425 -427 640 -640 426 -427 640 -640 473 -640 480 -612 612 -640 518 -480 640 -640 478 -500 375 -640 480 -480 640 -640 425 -640 359 -500 319 -480 480 -427 640 -480 640 -640 407 -427 640 -640 480 -640 640 -386 500 -640 300 -600 600 -426 640 -640 480 -480 640 -640 427 -640 480 -640 480 -640 427 -640 480 -427 640 -640 427 -640 426 -640 425 -500 375 -640 470 -640 427 -640 413 -409 640 -612 612 -640 480 -500 375 -640 424 -640 480 -640 480 -640 480 -640 480 -640 480 -640 404 -640 427 -640 480 -640 481 -480 640 -500 375 -640 434 -500 333 -294 400 -640 427 -640 474 -500 337 -333 500 -640 428 -640 427 -640 425 -500 500 -427 640 -640 457 -640 425 -640 480 -480 640 -640 480 -640 457 -640 474 -640 480 -640 424 -640 428 -640 480 -640 425 -361 640 -457 640 -640 427 -612 612 -640 480 -640 427 -640 427 -640 427 -640 480 -640 427 -500 333 -640 427 -424 640 -500 375 -640 512 -427 640 -500 333 -500 359 -640 427 -640 428 -640 480 -428 640 -640 372 -480 640 -427 640 -640 480 -640 427 -457 640 -500 333 -343 500 -640 425 -640 480 -640 480 -480 640 -500 334 -640 480 -480 640 -640 480 -640 427 -640 427 -640 480 -640 426 -640 427 -500 375 -480 640 -640 427 -640 480 -640 640 -640 360 -640 634 -640 427 -640 430 -640 427 -472 640 -640 640 -428 640 -612 612 -640 360 -338 500 -640 480 -320 212 -500 375 -500 333 -640 480 -640 426 -640 530 -427 640 -523 640 -640 384 -426 640 -425 640 -480 640 -640 480 -500 332 -640 524 -480 640 -640 480 -500 375 -640 419 -640 480 -640 478 -640 426 -640 480 -640 427 -640 480 -640 426 -640 428 -333 500 -640 480 -640 427 -500 333 -426 640 -640 426 -363 640 -640 349 -640 426 -500 375 -640 608 -375 500 -640 480 -640 426 -500 375 -640 428 -640 457 -480 640 -612 612 -640 480 -490 640 -640 461 -640 480 -640 480 -640 470 -426 640 -508 640 -480 640 -640 427 -640 480 -395 500 -640 480 -640 480 -640 480 -640 427 -640 480 -640 546 -640 480 -359 500 -640 428 -640 457 -640 427 -627 640 -480 640 -427 640 -640 427 -640 480 -640 482 -640 480 -640 427 -427 640 -640 640 -640 480 -500 331 -640 480 -640 427 -359 640 -480 640 -640 427 -640 425 -640 480 -640 425 -500 332 -640 364 -640 427 -500 375 -500 375 -640 427 -640 428 -461 640 -640 480 -640 480 -500 375 -427 640 -640 427 -640 466 -512 512 -347 500 -640 480 -480 640 -500 302 -640 480 -640 425 -640 428 -640 418 -640 480 -640 426 -640 480 -640 480 -500 478 -640 440 -500 375 -500 375 -612 612 -427 640 -640 427 -600 450 -640 480 -483 640 -640 480 -640 480 -640 427 -424 640 -426 640 -465 640 -640 480 -640 431 -640 427 -640 561 -640 413 -427 640 -640 427 -480 640 -612 612 -640 480 -457 640 -640 360 -640 480 -612 612 -480 640 -640 427 -612 612 -640 427 -640 426 -640 480 -640 429 -640 427 -640 480 -640 480 -640 426 -640 444 -640 424 -640 370 -640 480 -427 640 -640 480 -431 356 -640 424 -640 480 -426 640 -640 427 -640 427 -640 478 -640 428 -375 500 -500 315 -425 640 -640 480 -640 480 -640 480 -480 640 -640 478 -478 500 -640 480 -640 480 -426 640 -640 480 -640 419 -640 430 -361 640 -640 428 -500 332 -640 480 -427 640 -640 427 -500 375 -640 424 -640 425 -640 430 -500 375 -640 425 -640 480 -480 640 -500 333 -427 640 -427 640 -449 640 -431 640 -386 640 -640 480 -640 428 -640 480 -500 333 -456 640 -478 640 -428 640 -640 483 -640 427 -640 428 -480 640 -640 480 -480 640 -640 478 -640 480 -640 426 -427 640 -640 427 -640 213 -640 640 -612 612 -640 425 -500 414 -427 640 -640 480 -640 361 -500 333 -523 640 -480 640 -640 480 -612 612 -640 425 -612 612 -640 400 -480 640 -640 479 -500 400 -640 426 -640 401 -478 640 -428 640 -640 423 -640 425 -640 480 -640 480 -612 612 -640 480 -426 640 -480 640 -640 373 -640 480 -640 296 -500 375 -500 375 -640 480 -640 387 -427 640 -500 375 -453 640 -640 426 -640 480 -640 426 -426 640 -480 640 -500 374 -480 640 -640 427 -640 427 -640 427 -565 640 -640 431 -640 427 -640 480 -500 375 -640 325 -640 427 -500 500 -486 640 -640 480 -500 333 -500 375 -640 406 -640 427 -640 426 -640 480 -640 480 -480 640 -640 480 -640 427 -640 480 -375 500 -640 480 -500 375 -426 640 -333 500 -640 427 -612 612 -395 640 -640 373 -640 360 -640 480 -640 480 -640 480 -640 424 -500 375 -612 612 -640 424 -640 425 -640 480 -640 480 -640 427 -640 426 -640 480 -640 478 -491 500 -640 480 -480 640 -640 378 -366 500 -640 427 -640 428 -640 454 -640 512 -500 357 -480 640 -480 640 -457 640 -333 500 -640 480 -500 310 -640 480 -500 559 -428 640 -640 427 -500 375 -640 463 -640 425 -640 480 -375 500 -337 640 -640 480 -640 480 -640 480 -640 199 -371 500 -640 480 -640 476 -640 480 -428 640 -640 427 -640 428 -423 640 -640 480 -640 427 -640 427 -640 480 -500 375 -640 427 -240 320 -640 427 -640 398 -427 640 -423 640 -612 612 -500 375 -640 427 -640 480 -427 640 -640 440 -500 375 -480 640 -500 376 -640 427 -427 640 -480 640 -500 375 -500 307 -640 480 -428 640 -612 612 -640 480 -640 425 -384 288 -640 348 -640 427 -640 480 -640 480 -640 480 -480 640 -427 640 -640 427 -640 428 -640 480 -640 480 -640 511 -500 364 -640 359 -500 332 -500 375 -640 429 -640 480 -640 480 -640 427 -640 427 -500 345 -640 480 -640 427 -640 427 -640 478 -640 480 -500 500 -640 427 -640 427 -640 480 -640 512 -640 427 -640 480 -640 480 -640 427 -383 640 -640 426 -640 427 -640 480 -427 640 -500 375 -640 480 -375 500 -480 640 -427 640 -640 425 -640 640 -640 463 -338 500 -640 487 -640 480 -500 375 -640 474 -640 480 -640 412 -640 367 -640 427 -640 427 -375 500 -640 426 -640 427 -364 500 -640 439 -353 500 -640 480 -640 476 -640 640 -640 480 -640 425 -333 500 -640 425 -640 424 -640 360 -500 368 -640 426 -640 427 -640 480 -500 375 -640 461 -640 457 -640 321 -480 640 -640 427 -640 427 -640 427 -640 480 -271 640 -375 500 -640 427 -640 427 -360 640 -480 640 -640 418 -480 640 -480 640 -640 427 -375 500 -480 640 -640 480 -640 572 -640 428 -640 640 -640 427 -640 480 -640 478 -633 640 -640 425 -640 427 -640 422 -640 480 -640 451 -640 480 -640 427 -640 480 -478 640 -640 427 -640 640 -640 427 -640 480 -500 375 -640 428 -480 640 -640 443 -640 427 -640 427 -431 640 -640 425 -400 500 -640 426 -640 640 -640 480 -640 480 -375 500 -640 401 -640 483 -640 480 -640 427 -640 459 -640 481 -640 480 -640 259 -640 428 -500 375 -640 418 -480 640 -427 640 -640 546 -612 612 -320 240 -640 427 -640 360 -500 477 -500 375 -427 640 -640 428 -640 426 -640 427 -640 438 -640 480 -640 480 -640 428 -500 356 -478 640 -640 426 -640 428 -640 427 -480 640 -424 640 -612 612 -640 426 -640 429 -427 640 -640 360 -640 480 -640 591 -640 428 -640 495 -480 640 -640 480 -480 640 -640 480 -640 640 -640 346 -640 427 -640 427 -640 480 -640 480 -480 640 -640 427 -640 376 -640 424 -640 480 -500 375 -640 427 -640 480 -427 640 -640 428 -640 425 -500 309 -494 500 -640 480 -640 475 -500 375 -375 500 -640 427 -640 480 -640 480 -640 359 -640 512 -488 640 -640 426 -640 426 -420 640 -480 640 -640 427 -640 428 -415 500 -500 375 -500 273 -427 640 -640 480 -640 427 -640 427 -640 428 -640 426 -480 640 -640 427 -640 470 -640 427 -640 522 -640 427 -640 480 -640 428 -640 427 -500 375 -640 480 -500 333 -640 480 -347 500 -480 640 -640 428 -640 480 -500 375 -640 428 -500 334 -640 478 -640 428 -640 480 -640 479 -348 500 -500 375 -640 480 -500 339 -640 481 -640 640 -600 450 -426 640 -480 640 -640 427 -500 375 -640 424 -640 427 -640 478 -640 480 -480 640 -640 426 -640 427 -480 640 -640 434 -640 480 -480 640 -500 375 -640 480 -640 480 -427 640 -640 428 -424 640 -640 480 -640 480 -640 426 -640 427 -500 333 -640 480 -640 442 -640 388 -500 375 -640 480 -640 432 -333 500 -640 480 -640 427 -640 408 -377 500 -640 425 -640 381 -640 509 -640 480 -426 640 -640 371 -640 480 -640 424 -640 503 -640 212 -640 426 -640 480 -512 640 -500 400 -480 640 -500 375 -640 425 -640 427 -640 360 -640 426 -360 640 -431 640 -640 443 -640 480 -640 493 -480 640 -640 566 -640 427 -640 421 -640 480 -640 427 -640 425 -480 640 -640 480 -622 640 -640 427 -324 432 -640 427 -640 427 -640 480 -640 425 -640 480 -640 319 -640 427 -427 640 -640 480 -640 480 -612 612 -640 428 -612 612 -456 640 -500 375 -500 325 -480 640 -480 640 -480 640 -500 375 -612 612 -500 375 -640 480 -480 640 -640 408 -640 427 -640 408 -640 426 -640 427 -640 427 -480 320 -640 284 -640 427 -556 640 -640 427 -640 480 -640 400 -640 421 -500 375 -640 427 -640 480 -640 427 -640 480 -640 481 -561 640 -640 480 -640 468 -640 480 -640 425 -640 425 -500 375 -640 480 -426 640 -640 480 -640 427 -640 511 -640 565 -640 480 -375 500 -640 640 -429 640 -500 375 -480 640 -500 375 -480 640 -640 360 -640 480 -640 427 -500 333 -567 378 -480 640 -480 640 -427 640 -640 360 -500 400 -500 375 -640 428 -600 400 -640 427 -640 480 -640 480 -640 427 -500 375 -480 640 -375 500 -640 424 -640 640 -640 427 -375 500 -640 426 -500 375 -513 640 -640 429 -640 401 -540 407 -480 640 -640 426 -640 426 -640 480 -362 500 -640 480 -640 412 -640 425 -500 375 -640 480 -640 426 -426 640 -494 500 -500 375 -640 480 -640 480 -640 512 -480 640 -640 432 -375 500 -640 480 -478 640 -640 480 -640 459 -640 480 -426 640 -426 640 -640 512 -640 299 -640 427 -424 640 -480 640 -640 427 -640 427 -478 640 -640 480 -640 480 -640 480 -640 480 -500 375 -640 429 -640 480 -640 427 -640 426 -640 427 -640 426 -640 467 -640 426 -480 640 -640 458 -640 428 -640 480 -640 427 -424 640 -640 480 -480 640 -640 427 -640 480 -640 494 -427 640 -640 480 -640 432 -450 337 -640 427 -640 427 -480 640 -640 441 -480 640 -640 428 -640 425 -640 433 -384 512 -500 375 -640 427 -640 584 -500 333 -424 640 -427 640 -640 426 -480 640 -640 480 -444 640 -640 408 -427 640 -640 353 -640 480 -640 480 -640 428 -640 359 -480 640 -428 640 -500 400 -343 500 -640 480 -640 478 -640 427 -480 640 -500 375 -640 427 -480 316 -640 424 -425 640 -640 480 -640 480 -500 333 -640 480 -640 427 -626 640 -640 426 -640 480 -640 480 -427 640 -428 640 -423 640 -500 375 -500 307 -434 640 -480 640 -425 640 -320 240 -500 333 -640 427 -500 375 -480 640 -558 234 -640 515 -640 611 -480 640 -640 425 -427 640 -427 640 -640 427 -640 479 -640 480 -426 640 -428 640 -333 500 -640 430 -427 640 -640 480 -429 640 -425 640 -500 375 -640 488 -640 425 -640 406 -640 457 -640 480 -640 427 -640 480 -640 427 -640 480 -500 394 -640 464 -640 599 -427 640 -640 480 -640 513 -427 640 -640 480 -640 427 -640 479 -640 359 -640 429 -500 333 -500 333 -500 333 -640 427 -640 424 -640 426 -640 428 -640 427 -500 375 -500 375 -500 375 -640 480 -640 427 -640 478 -640 360 -640 427 -454 604 -500 375 -640 427 -640 427 -500 375 -640 360 -640 457 -640 420 -640 480 -640 427 -640 427 -640 480 -640 432 -640 480 -480 640 -640 427 -427 640 -640 480 -426 640 -640 480 -640 480 -640 480 -640 480 -428 640 -640 425 -480 640 -640 429 -640 480 -640 179 -640 480 -640 360 -640 463 -640 427 -480 640 -640 480 -640 459 -480 640 -640 426 -500 375 -425 640 -640 606 -500 375 -500 375 -640 354 -451 640 -414 640 -640 480 -500 281 -500 375 -640 427 -640 405 -640 512 -640 480 -612 612 -640 480 -447 640 -640 427 -640 480 -640 529 -640 317 -480 640 -234 500 -640 480 -480 640 -500 333 -481 640 -460 640 -640 480 -640 360 -500 375 -375 500 -640 480 -640 425 -640 480 -640 426 -476 640 -640 512 -427 640 -500 375 -478 640 -228 296 -640 480 -500 375 -406 640 -427 640 -603 640 -640 428 -640 480 -640 268 -426 640 -640 480 -425 640 -640 409 -427 640 -360 640 -361 640 -640 427 -437 640 -384 568 -500 332 -640 421 -640 360 -640 480 -640 427 -640 480 -428 640 -640 383 -507 619 -427 640 -480 640 -640 426 -480 640 -640 426 -640 480 -640 480 -640 423 -640 424 -640 428 -640 448 -640 427 -640 391 -480 640 -640 425 -640 480 -640 427 -500 335 -480 640 -500 334 -612 612 -427 640 -640 427 -500 355 -640 480 -512 640 -640 532 -640 427 -424 640 -640 453 -640 427 -640 480 -640 428 -640 424 -640 480 -640 480 -640 480 -500 375 -640 480 -480 640 -640 480 -640 428 -500 375 -640 428 -640 391 -480 640 -640 480 -640 480 -500 333 -640 554 -640 480 -640 480 -480 640 -640 427 -480 640 -640 461 -640 480 -640 427 -640 479 -640 427 -640 427 -640 480 -640 427 -640 427 -480 640 -480 640 -500 332 -500 375 -640 480 -640 429 -640 480 -640 427 -640 427 -482 640 -640 426 -500 375 -640 428 -640 426 -640 427 -640 427 -640 301 -640 480 -640 426 -640 428 -640 364 -500 375 -640 426 -640 426 -640 480 -640 424 -640 480 -480 640 -640 353 -640 429 -480 640 -640 480 -427 640 -426 640 -640 427 -640 427 -635 640 -640 480 -426 640 -640 480 -640 480 -640 426 -640 427 -640 426 -640 184 -500 333 -500 475 -640 408 -425 640 -500 375 -640 406 -640 471 -640 426 -640 411 -480 640 -333 500 -640 427 -640 480 -427 640 -640 428 -640 370 -640 414 -640 429 -640 438 -640 426 -480 640 -640 480 -640 427 -640 480 -640 426 -480 640 -640 427 -388 500 -640 425 -333 500 -640 428 -640 480 -640 424 -640 427 -640 424 -500 375 -640 480 -640 426 -640 427 -640 480 -640 640 -500 334 -640 425 -335 500 -640 516 -640 384 -640 425 -640 427 -640 427 -640 428 -640 480 -640 404 -500 375 -640 480 -480 640 -500 334 -640 319 -640 428 -640 480 -640 480 -640 359 -640 480 -640 425 -640 425 -612 612 -640 428 -640 480 -640 424 -500 375 -500 332 -640 426 -640 360 -640 425 -480 640 -640 427 -493 640 -425 640 -640 640 -500 375 -471 640 -640 480 -400 382 -640 427 -640 379 -640 424 -480 640 -640 480 -640 427 -640 428 -426 640 -640 425 -640 427 -640 432 -612 612 -500 375 -640 425 -640 480 -427 640 -640 427 -640 428 -640 480 -640 640 -500 375 -427 640 -640 524 -640 270 -640 424 -640 480 -500 333 -640 427 -640 318 -640 480 -612 612 -640 427 -480 640 -450 338 -343 500 -640 480 -428 640 -500 346 -640 465 -640 459 -480 640 -640 426 -640 427 -640 360 -640 458 -480 640 -640 404 -640 427 -475 389 -640 480 -500 375 -640 360 -427 640 -640 478 -640 427 -640 480 -640 480 -640 409 -500 375 -640 480 -640 480 -640 480 -489 640 -640 427 -640 480 -640 427 -640 480 -640 480 -640 529 -480 640 -640 360 -640 480 -480 640 -640 480 -640 480 -640 428 -640 425 -423 640 -500 281 -640 480 -640 480 -640 428 -640 428 -500 375 -640 378 -640 480 -640 371 -640 480 -640 480 -640 426 -640 480 -640 448 -640 427 -640 501 -480 640 -333 500 -640 480 -640 425 -640 480 -640 429 -640 480 -373 640 -426 640 -640 480 -640 427 -640 480 -640 424 -640 371 -612 612 -500 375 -640 457 -640 480 -640 427 -640 427 -640 480 -640 427 -640 429 -640 427 -375 500 -640 389 -333 500 -500 375 -500 375 -480 640 -612 612 -640 480 -500 375 -640 426 -640 426 -500 333 -640 480 -425 640 -427 640 -626 640 -640 428 -500 375 -640 495 -500 375 -640 424 -640 480 -640 480 -375 500 -640 533 -640 425 -640 424 -640 480 -640 399 -640 427 -640 426 -640 428 -640 425 -480 640 -500 375 -640 426 -640 480 -640 360 -640 427 -480 640 -480 640 -640 432 -500 471 -640 400 -640 427 -500 375 -640 425 -375 500 -640 480 -640 480 -640 496 -323 500 -584 640 -480 640 -640 424 -640 428 -480 640 -640 425 -478 640 -500 334 -480 640 -640 456 -640 458 -640 480 -480 640 -640 425 -480 640 -640 480 -640 424 -480 640 -640 640 -640 480 -640 480 -640 428 -500 375 -640 457 -375 500 -427 640 -640 427 -427 640 -282 500 -371 500 -150 200 -480 640 -640 480 -500 372 -640 480 -640 430 -640 480 -640 480 -640 480 -480 640 -640 427 -640 427 -500 375 -640 427 -425 640 -512 640 -640 427 -640 426 -640 218 -640 427 -640 427 -640 427 -640 427 -640 480 -640 382 -640 480 -484 289 -640 480 -640 461 -427 640 -640 480 -640 428 -375 500 -640 427 -427 640 -500 332 -640 427 -500 430 -640 439 -351 640 -427 640 -426 640 -333 500 -428 640 -640 480 -640 480 -427 640 -640 480 -500 375 -427 640 -640 480 -640 270 -640 473 -426 640 -640 427 -640 480 -640 480 -480 640 -640 480 -640 480 -352 500 -640 480 -480 640 -612 612 -640 427 -640 431 -640 329 -640 427 -640 426 -640 480 -640 480 -640 478 -640 427 -428 640 -394 406 -640 480 -640 480 -640 480 -640 359 -637 640 -640 482 -480 640 -480 640 -640 439 -427 640 -487 500 -640 480 -640 480 -640 426 -480 640 -640 341 -427 640 -427 640 -640 418 -640 374 -640 427 -640 480 -640 480 -640 433 -498 640 -640 427 -640 494 -500 333 -640 427 -480 640 -640 426 -640 426 -640 411 -511 640 -640 427 -640 426 -640 479 -640 427 -426 640 -500 375 -640 428 -375 500 -480 640 -640 482 -500 375 -640 427 -640 497 -600 400 -640 480 -640 385 -640 480 -640 640 -640 480 -640 426 -375 500 -640 429 -500 334 -375 500 -640 427 -640 427 -640 426 -640 424 -480 640 -571 640 -640 535 -640 428 -427 640 -640 480 -640 425 -640 480 -640 425 -640 480 -640 427 -640 424 -640 427 -640 480 -640 480 -640 400 -640 428 -640 425 -480 640 -640 480 -640 376 -640 440 -640 428 -375 500 -640 626 -640 427 -487 496 -500 483 -375 500 -640 359 -640 427 -640 480 -427 640 -640 480 -640 480 -640 427 -640 480 -640 429 -640 427 -640 480 -546 366 -500 375 -439 640 -640 425 -640 400 -480 640 -640 480 -425 640 -640 480 -427 640 -640 480 -500 375 -640 427 -640 427 -640 426 -426 640 -428 640 -640 473 -360 640 -640 480 -640 480 -420 640 -640 480 -640 427 -450 600 -427 640 -640 496 -640 480 -640 432 -577 640 -640 480 -640 514 -640 427 -375 500 -333 500 -640 480 -375 500 -640 427 -500 333 -640 444 -427 640 -640 426 -640 478 -427 640 -640 403 -500 500 -640 480 -640 426 -427 640 -500 334 -640 428 -425 640 -500 375 -640 480 -493 640 -640 640 -512 640 -640 427 -640 480 -612 612 -640 390 -640 424 -640 480 -640 427 -640 480 -640 513 -499 640 -640 359 -640 480 -640 427 -427 640 -640 425 -640 427 -640 427 -640 480 -640 427 -640 480 -640 373 -640 480 -640 480 -640 427 -640 427 -427 640 -640 360 -427 640 -640 424 -612 612 -640 425 -359 640 -427 640 -480 640 -640 426 -640 427 -640 427 -640 427 -640 460 -640 480 -612 612 -640 480 -512 640 -333 500 -640 480 -500 349 -427 640 -640 480 -640 424 -640 448 -480 640 -640 426 -480 640 -640 480 -640 426 -640 427 -640 427 -640 480 -640 427 -480 640 -480 640 -500 333 -479 640 -640 479 -640 550 -640 426 -640 480 -640 426 -640 478 -500 375 -640 424 -640 427 -640 425 -428 640 -640 427 -640 480 -640 426 -640 424 -640 480 -480 640 -640 427 -640 427 -640 426 -480 640 -640 480 -550 366 -640 427 -500 333 -640 480 -288 432 -640 480 -360 640 -640 429 -480 640 -640 427 -640 566 -427 640 -640 480 -500 375 -640 425 -640 640 -640 512 -428 640 -333 500 -500 500 -500 375 -640 425 -640 480 -640 480 -640 427 -640 461 -500 375 -600 450 -640 480 -640 480 -640 427 -500 375 -640 426 -295 175 -427 640 -640 425 -640 427 -640 480 -640 425 -640 427 -640 480 -640 457 -640 419 -640 443 -500 332 -500 375 -500 375 -612 612 -640 457 -612 612 -375 500 -640 427 -640 473 -640 513 -640 426 -612 612 -640 480 -600 600 -640 480 -640 425 -612 612 -640 427 -500 333 -640 428 -640 484 -640 480 -480 640 -640 360 -326 500 -500 401 -480 640 -640 468 -480 640 -640 480 -640 366 -640 480 -426 640 -640 425 -640 425 -427 640 -328 640 -500 298 -500 288 -480 640 -640 427 -425 640 -640 480 -640 480 -640 480 -500 375 -640 424 -640 427 -640 427 -640 426 -478 640 -640 480 -500 375 -480 640 -480 640 -640 428 -640 480 -480 640 -640 478 -640 416 -640 480 -640 360 -640 427 -640 427 -640 480 -639 640 -500 375 -640 457 -640 427 -375 500 -640 480 -480 640 -640 480 -640 481 -480 640 -511 640 -426 640 -640 640 -500 333 -640 480 -640 425 -632 640 -480 640 -640 480 -640 426 -383 640 -640 428 -640 428 -500 375 -400 500 -640 427 -612 612 -640 427 -640 483 -640 480 -640 489 -640 640 -640 480 -640 480 -640 480 -640 480 -640 426 -640 360 -480 640 -449 640 -375 500 -640 425 -640 457 -640 480 -640 427 -640 480 -640 377 -640 480 -640 427 -640 480 -420 640 -451 299 -640 478 -500 375 -640 426 -640 480 -640 361 -480 640 -640 481 -640 427 -640 480 -488 640 -640 427 -640 427 -640 400 -640 509 -423 640 -640 458 -640 480 -427 640 -640 480 -640 360 -640 480 -640 480 -640 426 -640 426 -640 480 -427 640 -483 500 -640 480 -640 427 -480 640 -480 640 -640 426 -400 300 -640 514 -500 328 -640 478 -640 480 -640 427 -640 480 -640 425 -375 500 -640 524 -640 376 -640 397 -640 427 -640 587 -640 480 -500 375 -640 373 -640 480 -640 481 -640 425 -640 443 -640 366 -640 426 -426 640 -424 640 -640 427 -426 640 -640 480 -640 426 -640 480 -640 480 -467 500 -424 640 -640 483 -640 478 -640 480 -640 424 -500 481 -640 426 -325 500 -500 333 -640 481 -480 640 -640 434 -480 384 -640 480 -640 480 -612 612 -640 427 -640 480 -640 425 -640 480 -640 480 -478 640 -640 252 -479 640 -640 480 -335 500 -375 500 -640 426 -427 640 -402 640 -640 640 -500 376 -480 640 -640 480 -640 409 -640 427 -640 481 -640 480 -640 360 -640 480 -500 334 -640 427 -480 640 -640 478 -480 640 -368 500 -640 425 -640 480 -375 500 -640 360 -640 480 -640 427 -640 480 -480 640 -426 640 -640 426 -640 427 -640 480 -640 622 -640 514 -480 360 -640 427 -640 428 -640 421 -640 380 -333 500 -640 480 -640 480 -640 480 -427 640 -640 360 -640 330 -640 425 -640 384 -640 480 -640 480 -640 429 -640 480 -640 480 -425 640 -427 640 -640 424 -640 480 -640 425 -640 480 -640 480 -640 454 -640 427 -500 374 -640 426 -640 480 -500 333 -640 458 -500 375 -640 427 -640 640 -640 427 -640 444 -640 426 -640 480 -640 480 -640 480 -427 640 -640 450 -461 640 -640 406 -612 612 -480 640 -640 480 -640 480 -640 634 -640 427 -640 480 -480 640 -640 424 -640 478 -552 640 -640 426 -640 480 -500 333 -640 426 -480 640 -499 640 -640 428 -374 500 -640 480 -640 480 -375 500 -480 640 -640 425 -640 478 -640 533 -640 427 -640 427 -480 640 -640 480 -457 500 -640 480 -500 375 -640 384 -500 375 -640 480 -640 480 -640 514 -640 427 -480 640 -640 480 -640 428 -640 424 -500 375 -375 500 -427 640 -640 427 -575 457 -640 426 -640 598 -640 427 -640 426 -640 478 -640 316 -640 481 -512 640 -494 640 -640 432 -413 550 -452 640 -500 333 -640 427 -640 480 -640 425 -640 480 -640 377 -480 640 -427 640 -640 426 -640 428 -419 500 -640 427 -480 640 -288 432 -426 640 -640 424 -640 427 -640 427 -640 426 -640 480 -640 480 -640 427 -427 640 -640 427 -500 375 -612 612 -427 640 -640 480 -640 313 -426 640 -640 426 -500 375 -480 640 -427 640 -640 480 -499 640 -500 333 -640 360 -500 375 -640 389 -612 612 -480 640 -640 478 -640 480 -640 427 -640 512 -640 424 -640 480 -427 640 -640 427 -417 640 -640 480 -640 640 -640 533 -640 480 -640 360 -426 640 -480 640 -640 480 -427 640 -426 640 -480 640 -640 480 -640 397 -640 511 -480 640 -426 640 -640 480 -640 427 -640 427 -640 480 -426 640 -427 640 -640 427 -640 427 -427 640 -442 500 -427 640 -640 427 -563 640 -500 375 -640 427 -612 612 -640 361 -640 479 -500 499 -640 424 -640 426 -640 433 -640 428 -640 441 -640 491 -640 639 -612 612 -500 333 -640 480 -640 424 -333 500 -375 500 -640 480 -640 427 -640 595 -640 554 -640 480 -640 427 -640 480 -640 543 -640 428 -640 426 -640 369 -494 640 -640 427 -640 425 -480 640 -425 640 -640 427 -640 427 -480 640 -500 334 -480 360 -612 612 -400 241 -640 480 -640 480 -640 427 -640 480 -333 640 -640 480 -640 426 -640 426 -640 480 -640 480 -640 439 -640 421 -640 426 -480 640 -500 357 -360 640 -427 640 -478 640 -480 640 -640 360 -512 640 -640 480 -640 480 -427 640 -500 375 -640 480 -426 640 -640 495 -584 640 -640 480 -640 427 -640 480 -640 361 -640 480 -423 564 -500 375 -640 425 -500 375 -612 612 -640 605 -640 427 -640 426 -640 480 -640 480 -640 427 -640 427 -640 428 -640 374 -640 426 -640 479 -640 478 -640 359 -480 640 -640 428 -640 425 -640 380 -480 640 -640 427 -640 480 -640 480 -640 480 -640 400 -640 425 -307 500 -640 376 -640 428 -640 427 -640 480 -640 480 -427 640 -640 480 -640 480 -500 375 -640 426 -375 500 -640 486 -500 341 -640 426 -640 498 -640 426 -426 640 -640 426 -640 427 -550 541 -640 480 -640 360 -640 427 -480 640 -640 480 -500 375 -640 426 -375 500 -480 640 -500 375 -452 640 -640 428 -640 478 -640 541 -375 500 -426 640 -640 480 -331 500 -640 427 -640 427 -640 425 -640 480 -640 427 -640 480 -640 265 -624 640 -640 480 -333 500 -640 480 -640 480 -640 425 -424 500 -640 427 -640 480 -640 426 -640 480 -640 426 -640 480 -640 432 -640 480 -640 519 -640 428 -640 543 -500 430 -640 480 -640 480 -640 427 -640 427 -640 480 -640 480 -640 425 -640 480 -406 640 -640 427 -640 480 -640 427 -640 480 -640 426 -640 360 -640 427 -640 480 -500 333 -640 480 -640 426 -640 480 -640 427 -640 427 -500 358 -640 480 -640 464 -500 333 -640 480 -549 640 -640 480 -367 500 -640 427 -640 423 -640 444 -640 428 -640 480 -500 500 -640 480 -640 480 -640 426 -640 428 -427 640 -480 640 -575 408 -500 375 -500 333 -640 427 -640 414 -640 296 -640 427 -480 640 -640 480 -640 431 -640 425 -640 480 -427 640 -448 640 -640 481 -428 640 -640 480 -640 480 -640 480 -640 427 -612 612 -429 640 -500 377 -640 480 -480 640 -640 423 -640 480 -640 427 -640 427 -427 640 -640 428 -640 428 -640 480 -640 427 -480 640 -640 427 -383 640 -640 360 -640 480 -640 397 -640 425 -427 640 -375 500 -500 375 -640 441 -640 427 -640 480 -427 640 -640 427 -480 640 -640 515 -640 404 -640 426 -640 480 -481 640 -640 427 -500 375 -640 428 -640 480 -640 480 -640 458 -640 424 -640 474 -400 467 -431 640 -640 305 -427 640 -425 640 -480 640 -640 427 -640 447 -640 480 -640 427 -640 427 -500 332 -640 480 -480 640 -480 640 -640 432 -640 427 -640 424 -640 480 -500 375 -640 426 -610 635 -640 426 -500 332 -480 640 -500 333 -640 512 -500 375 -640 427 -427 640 -640 427 -640 640 -640 427 -640 426 -480 640 -640 480 -612 612 -640 480 -424 640 -640 427 -500 375 -480 640 -640 480 -640 428 -640 427 -640 510 -480 640 -640 480 -640 427 -640 427 -429 640 -640 480 -640 444 -427 640 -640 640 -640 480 -640 427 -640 512 -375 500 -640 480 -640 480 -612 612 -423 640 -425 640 -640 359 -428 640 -343 640 -424 640 -640 427 -461 640 -640 640 -640 480 -640 515 -640 425 -640 427 -640 615 -640 480 -427 640 -640 426 -640 480 -640 429 -612 612 -640 430 -640 425 -640 480 -500 375 -640 480 -426 640 -640 480 -640 427 -640 427 -640 428 -427 640 -525 525 -640 480 -640 480 -640 480 -640 513 -640 383 -612 612 -620 640 -640 360 -500 375 -640 428 -640 640 -640 427 -640 427 -640 427 -333 500 -640 207 -640 615 -640 395 -480 640 -640 563 -612 612 -640 392 -640 480 -640 478 -640 427 -622 640 -640 427 -640 480 -640 480 -640 480 -500 375 -640 482 -640 478 -640 427 -480 640 -640 426 -332 500 -640 480 -640 480 -640 457 -640 480 -640 480 -368 640 -500 375 -612 612 -640 442 -640 480 -640 480 -427 640 -640 427 -612 612 -480 640 -375 500 -375 500 -640 360 -640 398 -640 409 -640 427 -427 640 -640 428 -514 640 -640 512 -640 480 -640 480 -500 329 -640 480 -640 476 -640 426 -500 375 -640 480 -500 375 -480 640 -500 375 -584 640 -640 480 -640 429 -640 425 -500 332 -640 424 -500 334 -640 427 -640 427 -640 344 -495 500 -640 427 -640 458 -640 533 -500 385 -640 480 -640 426 -640 639 -428 640 -640 427 -357 500 -640 425 -640 480 -640 480 -640 480 -640 361 -500 333 -480 640 -200 240 -427 640 -640 427 -640 481 -640 481 -640 480 -640 480 -640 381 -425 640 -640 428 -640 480 -640 426 -640 427 -640 480 -640 428 -640 414 -640 542 -640 480 -640 480 -640 480 -478 640 -640 410 -500 348 -640 480 -500 375 -640 425 -427 640 -640 427 -640 480 -640 427 -500 375 -640 428 -640 480 -640 480 -480 640 -428 640 -640 640 -640 426 -500 375 -640 429 -612 612 -640 456 -640 480 -396 640 -640 429 -640 480 -640 480 -612 612 -640 480 -640 427 -640 548 -640 532 -640 424 -640 640 -640 453 -640 427 -640 243 -612 612 -640 467 -640 425 -640 408 -333 500 -640 480 -640 480 -332 500 -333 500 -640 480 -640 480 -640 480 -640 480 -640 481 -500 375 -640 431 -640 427 -640 360 -500 358 -640 430 -640 613 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -640 420 -640 360 -640 437 -640 527 -640 427 -640 438 -500 375 -461 640 -640 427 -640 427 -427 640 -427 640 -640 480 -426 640 -640 350 -426 640 -640 427 -500 333 -640 480 -640 461 -640 480 -640 427 -640 480 -640 426 -640 480 -640 379 -427 640 -640 461 -640 480 -640 426 -640 480 -640 480 -640 427 -640 359 -640 427 -480 640 -640 516 -640 432 -640 480 -640 480 -640 258 -500 375 -640 403 -500 375 -480 640 -640 433 -640 360 -640 349 -478 640 -640 427 -480 640 -640 480 -563 640 -445 640 -640 437 -640 428 -640 360 -640 480 -640 480 -424 640 -640 513 -640 480 -450 350 -640 427 -640 427 -640 398 -480 640 -400 300 -640 483 -640 428 -175 230 -427 640 -640 480 -640 428 -480 480 -640 513 -640 426 -427 640 -640 457 -427 640 -640 360 -640 360 -427 640 -480 640 -640 433 -640 426 -640 480 -640 383 -640 424 -500 375 -500 375 -604 452 -640 427 -500 375 -333 500 -640 318 -640 480 -640 427 -480 640 -640 640 -640 428 -640 427 -500 375 -640 425 -427 640 -640 431 -480 640 -463 640 -640 429 -428 640 -640 480 -640 640 -640 480 -612 612 -640 414 -640 427 -427 640 -485 640 -360 640 -461 500 -482 640 -640 480 -428 640 -479 640 -640 396 -640 426 -640 433 -640 390 -445 418 -640 427 -500 375 -511 640 -640 480 -640 480 -640 426 -640 427 -375 500 -500 375 -427 640 -640 480 -640 427 -640 480 -640 427 -640 427 -640 480 -640 420 -425 640 -333 500 -640 457 -640 427 -640 426 -640 513 -480 640 -480 640 -478 640 -640 427 -500 335 -640 426 -640 489 -640 480 -618 394 -640 480 -332 500 -640 508 -640 427 -640 480 -640 480 -640 427 -640 480 -425 640 -612 612 -640 421 -640 426 -480 640 -640 480 -640 480 -640 425 -640 237 -427 640 -640 360 -640 428 -640 480 -640 427 -426 640 -640 480 -480 640 -480 640 -640 427 -429 640 -640 424 -427 640 -640 480 -427 640 -640 479 -640 492 -479 640 -640 480 -640 427 -640 427 -500 375 -640 427 -640 480 -500 375 -640 640 -500 375 -426 640 -582 640 -640 480 -333 500 -427 640 -640 617 -500 375 -640 480 -480 640 -640 480 -334 500 -640 480 -640 426 -480 640 -500 333 -480 640 -356 640 -500 333 -426 640 -640 480 -640 425 -640 480 -640 640 -376 500 -640 480 -640 480 -360 640 -480 640 -640 480 -640 480 -640 368 -640 478 -640 426 -640 480 -500 375 -428 640 -640 480 -640 480 -480 640 -483 640 -500 375 -500 333 -424 640 -427 640 -640 480 -640 480 -640 428 -640 480 -480 640 -477 500 -480 640 -427 640 -640 436 -640 480 -640 480 -640 480 -500 332 -500 333 -480 640 -640 480 -640 428 -640 640 -640 620 -480 640 -640 427 -500 247 -640 480 -640 360 -633 640 -640 480 -640 426 -640 427 -640 320 -640 480 -640 480 -480 640 -640 480 -333 500 -433 500 -518 640 -640 424 -612 612 -500 375 -640 400 -640 480 -640 480 -640 415 -480 640 -640 427 -427 640 -640 480 -497 640 -640 480 -427 640 -612 612 -640 427 -640 513 -640 425 -640 625 -640 480 -640 425 -500 296 -640 426 -640 427 -478 640 -640 427 -500 375 -640 640 -640 480 -425 640 -640 428 -640 480 -427 640 -640 427 -640 428 -640 480 -640 427 -640 420 -426 640 -640 426 -640 480 -426 640 -640 427 -640 427 -612 612 -640 360 -640 281 -500 375 -640 379 -640 429 -500 378 -427 640 -640 427 -640 392 -500 375 -479 640 -500 375 -640 480 -608 640 -474 640 -640 480 -640 427 -500 375 -640 429 -640 480 -640 515 -640 480 -640 640 -640 480 -640 426 -640 442 -427 640 -480 640 -640 427 -640 426 -427 640 -500 374 -640 425 -640 425 -640 427 -640 480 -423 640 -640 480 -640 581 -640 427 -426 640 -640 491 -640 425 -612 612 -640 427 -640 426 -640 480 -500 375 -640 640 -640 424 -640 427 -500 375 -640 427 -640 427 -640 480 -640 480 -640 480 -640 426 -500 281 -500 375 -640 427 -640 480 -480 360 -640 410 -640 403 -478 640 -480 640 -640 478 -457 640 -640 427 -375 500 -334 500 -500 332 -640 394 -640 371 -640 426 -640 426 -425 640 -640 480 -640 480 -427 640 -640 427 -640 462 -640 191 -480 640 -640 480 -640 394 -640 438 -640 360 -640 640 -431 640 -640 427 -500 375 -640 398 -640 426 -427 640 -640 428 -383 640 -640 427 -640 424 -640 480 -426 640 -500 375 -480 640 -640 428 -640 427 -500 375 -640 425 -640 480 -375 500 -640 480 -640 428 -640 427 -640 419 -479 640 -427 640 -640 427 -480 640 -640 480 -455 500 -640 432 -640 478 -640 426 -426 640 -640 502 -640 427 -640 480 -640 331 -640 528 -640 480 -480 640 -640 427 -480 640 -640 399 -640 427 -640 424 -640 386 -640 480 -640 427 -413 640 -500 375 -640 480 -640 480 -480 640 -375 500 -640 427 -640 512 -640 480 -427 640 -640 425 -640 424 -640 426 -640 429 -640 428 -640 427 -640 480 -480 640 -640 424 -640 427 -480 640 -640 304 -612 612 -640 427 -640 346 -427 640 -640 427 -640 480 -272 408 -640 480 -480 360 -357 500 -612 612 -640 480 -640 427 -427 640 -375 500 -640 363 -500 375 -640 480 -640 480 -640 480 -400 500 -375 500 -640 479 -640 429 -640 366 -480 640 -480 640 -640 425 -640 401 -478 640 -375 500 -640 427 -640 458 -640 512 -640 480 -612 612 -640 498 -640 480 -480 640 -640 427 -640 480 -640 480 -480 640 -640 478 -427 640 -640 480 -480 640 -500 375 -640 480 -640 480 -640 480 -640 425 -640 427 -478 640 -640 361 -640 635 -500 375 -640 516 -427 640 -640 480 -640 368 -612 612 -640 427 -640 421 -427 640 -640 426 -375 500 -480 640 -640 460 -640 448 -640 303 -640 616 -500 281 -640 480 -640 426 -640 369 -640 429 -640 427 -640 640 -375 500 -640 480 -640 508 -640 427 -640 412 -500 375 -640 480 -640 480 -640 512 -375 500 -640 480 -640 427 -640 480 -640 458 -500 375 -640 457 -640 427 -351 500 -640 428 -640 480 -640 376 -500 333 -500 375 -612 612 -640 480 -640 427 -640 427 -640 426 -479 640 -600 400 -640 640 -640 428 -500 335 -574 640 -640 480 -372 558 -640 427 -640 408 -427 640 -640 471 -640 524 -640 360 -640 480 -640 424 -500 389 -640 480 -640 425 -480 640 -640 424 -640 361 -640 512 -640 480 -640 427 -640 463 -640 480 -640 426 -612 612 -500 375 -375 500 -640 360 -640 612 -640 480 -640 416 -640 408 -640 427 -640 606 -640 539 -640 480 -425 640 -640 425 -640 480 -332 500 -375 500 -375 500 -640 427 -375 500 -640 427 -640 425 -640 427 -640 427 -500 460 -640 480 -427 640 -640 428 -640 480 -500 375 -640 480 -640 265 -640 457 -640 480 -640 480 -640 512 -640 393 -640 428 -426 640 -500 375 -640 427 -640 480 -500 375 -640 429 -640 427 -480 640 -640 459 -612 612 -574 640 -640 480 -415 500 -400 597 -500 333 -640 427 -640 360 -640 480 -500 376 -640 480 -480 640 -427 640 -640 426 -640 426 -640 360 -640 427 -640 480 -640 427 -640 480 -640 480 -612 612 -640 480 -426 640 -640 480 -428 640 -360 640 -640 480 -428 640 -500 375 -640 480 -640 480 -640 424 -499 500 -612 612 -640 480 -640 487 -640 382 -640 430 -640 427 -640 427 -640 427 -640 426 -480 640 -640 425 -480 640 -640 437 -427 640 -640 426 -640 508 -534 640 -640 480 -375 500 -480 640 -640 480 -640 427 -612 612 -640 457 -640 427 -192 564 -500 335 -640 480 -640 480 -640 456 -453 640 -478 640 -640 640 -640 427 -640 485 -640 480 -333 500 -640 427 -640 358 -640 480 -640 426 -640 425 -470 640 -640 480 -640 426 -640 480 -640 427 -500 375 -500 416 -640 427 -640 429 -315 210 -640 480 -640 512 -480 640 -480 640 -500 500 -454 500 -478 640 -640 480 -640 426 -640 480 -640 429 -500 371 -640 410 -640 427 -640 448 -640 426 -640 453 -640 468 -640 425 -511 640 -640 480 -480 640 -427 640 -640 480 -478 640 -450 640 -500 401 -640 480 -640 383 -500 380 -640 425 -375 500 -640 427 -640 582 -640 480 -480 640 -500 375 -640 480 -640 480 -500 375 -534 640 -640 480 -640 417 -640 427 -640 480 -640 480 -640 427 -350 215 -640 426 -427 640 -640 427 -640 480 -500 328 -612 612 -640 426 -640 480 -640 480 -473 640 -435 640 -640 253 -427 640 -475 640 -640 368 -612 612 -640 478 -640 428 -640 426 -427 640 -612 612 -320 240 -427 640 -640 427 -640 480 -640 427 -500 333 -640 480 -640 426 -640 480 -426 640 -427 640 -640 360 -640 427 -640 516 -640 478 -426 640 -500 375 -640 481 -480 640 -640 427 -375 500 -640 427 -500 336 -640 400 -640 434 -640 480 -427 640 -333 500 -425 640 -480 640 -640 480 -640 427 -500 375 -480 360 -640 427 -640 425 -500 333 -640 383 -640 480 -640 427 -320 286 -640 480 -427 640 -640 426 -640 480 -480 640 -640 424 -640 241 -640 480 -600 450 -640 444 -375 500 -512 640 -640 427 -480 640 -640 480 -640 424 -640 405 -479 640 -640 497 -640 388 -640 401 -640 444 -640 427 -640 480 -640 426 -500 375 -640 427 -398 224 -640 480 -640 426 -640 409 -429 640 -640 482 -640 480 -640 427 -640 480 -426 640 -423 640 -425 640 -640 480 -612 612 -640 480 -427 640 -640 513 -640 424 -480 640 -640 367 -640 480 -640 577 -640 427 -640 480 -427 640 -383 640 -480 640 -427 640 -640 427 -640 425 -640 427 -612 612 -640 480 -500 332 -500 333 -480 640 -640 480 -640 480 -640 480 -427 640 -640 425 -428 640 -375 500 -431 640 -451 640 -640 480 -480 640 -640 480 -640 427 -640 424 -640 424 -640 480 -640 428 -480 640 -500 375 -640 427 -500 375 -640 427 -612 612 -640 428 -640 480 -640 480 -640 640 -612 612 -640 469 -640 426 -640 480 -640 427 -500 375 -640 427 -640 480 -427 640 -500 343 -600 407 -640 425 -640 480 -426 640 -640 457 -480 640 -640 427 -500 375 -428 640 -640 427 -640 427 -368 500 -640 441 -640 480 -640 480 -640 427 -640 480 -640 458 -427 640 -500 419 -640 425 -640 480 -640 334 -640 428 -480 640 -640 304 -640 361 -480 640 -427 640 -480 640 -640 540 -640 428 -640 480 -480 640 -427 640 -640 426 -612 612 -640 480 -640 570 -427 640 -334 500 -640 480 -640 459 -640 480 -375 500 -640 427 -640 425 -640 424 -500 375 -640 480 -500 333 -480 640 -640 498 -396 640 -640 431 -640 400 -640 480 -640 427 -640 426 -427 640 -640 480 -640 427 -640 480 -500 335 -640 480 -640 480 -500 358 -640 480 -640 425 -640 579 -425 640 -500 375 -640 428 -325 640 -640 480 -640 425 -480 640 -375 500 -640 426 -640 480 -640 359 -375 500 -320 240 -640 386 -640 480 -640 480 -640 480 -600 399 -375 500 -640 428 -640 481 -640 480 -640 480 -640 480 -640 427 -640 480 -640 283 -427 640 -424 640 -640 480 -480 640 -640 640 -640 359 -640 480 -640 400 -500 333 -640 518 -640 480 -640 458 -640 487 -640 360 -640 480 -480 640 -640 427 -640 420 -424 640 -640 563 -500 357 -640 480 -640 426 -640 470 -640 426 -480 640 -640 427 -640 447 -428 640 -640 480 -640 425 -640 480 -427 640 -430 640 -640 383 -640 429 -640 480 -640 316 -640 426 -640 480 -500 375 -480 640 -640 427 -640 447 -640 426 -640 425 -640 427 -640 509 -640 427 -480 640 -640 359 -480 640 -640 480 -640 480 -640 478 -640 426 -335 500 -501 640 -640 640 -500 417 -640 478 -640 480 -500 444 -640 360 -640 480 -480 640 -640 480 -640 427 -640 427 -500 473 -640 381 -640 480 -640 427 -640 425 -480 640 -640 481 -640 480 -640 480 -480 640 -500 376 -640 480 -640 427 -640 427 -640 480 -334 500 -640 366 -640 220 -428 640 -640 640 -640 426 -640 640 -640 480 -640 503 -640 480 -640 480 -640 427 -640 427 -512 384 -640 428 -640 480 -500 393 -640 480 -500 375 -640 480 -640 480 -640 426 -427 640 -480 640 -640 427 -640 480 -375 500 -427 640 -640 427 -640 422 -640 427 -640 446 -612 612 -480 640 -640 427 -480 640 -480 640 -426 640 -488 500 -480 640 -640 463 -640 480 -500 333 -612 612 -640 480 -640 427 -640 426 -640 480 -640 480 -500 375 -640 427 -640 371 -640 427 -640 427 -640 480 -640 480 -640 360 -640 421 -640 358 -640 360 -500 332 -640 480 -640 425 -640 424 -640 629 -428 640 -640 427 -640 569 -398 640 -640 424 -640 425 -640 427 -500 375 -640 425 -640 480 -640 427 -640 424 -375 500 -640 480 -640 480 -365 500 -640 250 -427 640 -500 375 -612 612 -417 600 -500 375 -640 480 -640 348 -640 427 -640 423 -612 612 -640 427 -515 640 -640 461 -640 427 -375 500 -640 494 -640 480 -640 426 -427 640 -500 375 -640 480 -640 427 -640 427 -500 333 -640 427 -640 480 -640 427 -640 640 -427 640 -480 640 -463 640 -427 640 -509 640 -427 640 -640 427 -640 480 -640 480 -640 480 -640 427 -612 612 -640 480 -640 480 -640 480 -540 403 -640 442 -640 425 -640 427 -640 427 -640 384 -640 481 -640 480 -640 309 -640 480 -640 480 -640 388 -640 480 -640 480 -640 480 -640 360 -640 640 -500 375 -640 427 -640 480 -640 480 -640 427 -640 480 -426 640 -640 425 -640 480 -640 424 -432 591 -640 439 -640 431 -425 640 -427 640 -640 480 -556 640 -640 428 -640 480 -640 427 -640 480 -640 480 -500 375 -640 427 -640 427 -480 640 -640 428 -640 359 -640 480 -640 480 -480 384 -640 571 -640 429 -640 427 -640 415 -640 424 -640 427 -640 480 -640 480 -640 427 -333 500 -480 640 -640 426 -500 375 -640 428 -480 640 -605 640 -640 427 -640 480 -640 360 -383 640 -640 427 -640 480 -462 640 -640 480 -427 640 -480 640 -640 427 -640 425 -285 309 -386 640 -500 375 -640 480 -640 446 -640 480 -640 480 -412 640 -640 480 -480 640 -640 473 -640 427 -427 640 -640 480 -480 640 -427 640 -333 500 -640 457 -640 424 -450 607 -640 427 -640 480 -640 480 -640 427 -640 480 -640 574 -640 427 -436 640 -640 384 -640 480 -640 428 -640 480 -640 332 -640 480 -640 589 -500 375 -640 427 -640 480 -640 414 -427 640 -640 503 -640 360 -375 500 -360 238 -425 640 -480 640 -426 640 -640 479 -480 640 -612 612 -361 640 -640 457 -640 480 -427 640 -640 427 -640 387 -640 431 -640 566 -640 480 -480 640 -359 640 -500 375 -500 332 -375 500 -640 480 -640 427 -480 640 -640 428 -480 640 -640 427 -375 500 -480 640 -612 612 -640 480 -640 426 -375 500 -427 640 -553 640 -640 480 -640 569 -640 427 -640 426 -640 480 -640 478 -640 480 -640 512 -500 375 -640 406 -640 427 -640 480 -640 427 -640 408 -500 333 -584 640 -480 640 -640 480 -640 480 -427 640 -480 640 -375 500 -640 426 -480 640 -640 563 -640 297 -640 476 -396 576 -640 425 -640 480 -640 480 -640 480 -640 427 -640 427 -640 426 -640 400 -500 375 -640 480 -640 427 -640 427 -640 427 -514 640 -427 640 -640 427 -640 480 -480 640 -640 636 -640 480 -640 541 -640 360 -640 353 -424 640 -640 427 -480 640 -640 427 -480 640 -324 319 -640 426 -480 640 -640 427 -640 427 -375 500 -640 480 -478 640 -640 451 -640 480 -500 375 -429 640 -334 500 -480 640 -416 640 -640 427 -640 478 -640 479 -640 480 -640 480 -640 480 -640 384 -640 416 -640 457 -640 424 -428 640 -640 427 -640 433 -640 480 -491 640 -640 426 -500 333 -640 427 -640 427 -640 480 -640 464 -500 382 -640 433 -640 428 -640 427 -384 640 -640 424 -640 480 -333 500 -426 640 -427 640 -640 427 -640 360 -640 484 -640 480 -500 375 -425 640 -427 640 -640 427 -640 480 -640 530 -640 428 -500 500 -469 640 -640 428 -480 640 -640 427 -480 640 -640 489 -375 500 -640 425 -640 480 -640 457 -640 428 -463 640 -500 375 -640 449 -640 480 -640 427 -640 426 -480 640 -640 429 -640 427 -640 480 -640 480 -640 429 -640 543 -500 374 -480 640 -640 427 -500 375 -640 427 -640 360 -640 480 -500 375 -612 612 -640 426 -640 427 -480 640 -640 469 -487 500 -640 426 -640 425 -640 425 -255 640 -640 480 -482 500 -640 361 -640 427 -640 424 -521 640 -640 480 -375 500 -640 640 -375 500 -431 640 -640 480 -640 458 -640 480 -640 427 -640 480 -427 640 -378 640 -640 427 -640 480 -640 640 -640 428 -640 427 -640 480 -640 480 -640 480 -463 640 -640 426 -640 427 -640 426 -640 640 -640 480 -640 480 -480 640 -612 612 -640 379 -427 640 -640 480 -640 424 -640 240 -640 480 -640 480 -640 480 -341 640 -425 640 -612 612 -480 640 -480 640 -640 428 -640 480 -640 480 -640 427 -640 427 -640 420 -480 640 -640 427 -427 640 -640 480 -640 428 -640 427 -500 375 -256 192 -640 417 -480 640 -612 612 -375 500 -640 480 -640 458 -375 500 -640 425 -500 375 -640 518 -478 640 -640 480 -640 361 -480 640 -427 640 -480 640 -640 427 -425 640 -640 427 -500 375 -640 427 -640 344 -480 640 -640 480 -500 375 -640 401 -480 640 -450 350 -443 640 -427 640 -640 366 -640 429 -640 480 -640 426 -640 453 -500 375 -640 480 -640 427 -640 427 -640 478 -500 325 -640 360 -640 480 -640 480 -640 427 -640 425 -500 469 -640 388 -640 480 -640 471 -473 640 -640 480 -428 640 -640 481 -640 480 -640 426 -640 425 -500 333 -500 375 -640 427 -640 480 -640 431 -640 533 -640 428 -480 640 -640 465 -480 640 -640 480 -341 500 -567 567 -640 427 -640 640 -640 425 -480 640 -375 500 -640 458 -597 640 -640 441 -500 387 -400 366 -640 426 -427 640 -612 612 -640 371 -500 375 -640 468 -480 640 -640 480 -640 426 -640 425 -640 353 -427 640 -640 480 -640 480 -640 426 -640 424 -640 428 -333 500 -640 480 -640 593 -640 425 -375 500 -640 478 -500 375 -640 424 -480 640 -640 424 -480 640 -640 311 -640 480 -640 480 -640 426 -640 428 -493 640 -640 480 -640 427 -640 480 -383 640 -500 375 -640 480 -640 427 -640 480 -640 478 -640 508 -640 427 -480 319 -500 375 -640 480 -640 426 -500 375 -640 480 -500 375 -640 426 -640 480 -480 640 -640 480 -480 640 -640 480 -640 447 -480 640 -640 633 -640 427 -640 427 -640 480 -640 504 -471 640 -640 288 -480 640 -427 640 -497 640 -640 480 -640 480 -640 480 -391 500 -640 427 -640 480 -640 480 -377 500 -375 500 -640 480 -640 427 -640 480 -500 375 -640 480 -640 478 -428 640 -640 428 -640 470 -480 640 -640 480 -640 427 -640 480 -640 427 -640 426 -640 480 -640 428 -640 425 -640 428 -640 427 -375 500 -640 425 -640 427 -640 515 -438 640 -640 480 -640 480 -426 640 -640 483 -640 425 -640 427 -640 478 -640 427 -640 427 -640 427 -640 510 -640 427 -500 375 -640 425 -612 612 -640 514 -640 453 -500 330 -480 640 -640 508 -640 427 -640 426 -640 480 -640 480 -640 479 -640 480 -640 480 -375 500 -640 427 -612 612 -441 640 -640 427 -640 480 -640 427 -500 375 -640 461 -640 360 -500 332 -426 640 -500 373 -480 640 -500 333 -500 331 -640 480 -640 360 -612 612 -640 480 -480 640 -640 457 -640 425 -640 427 -640 427 -375 500 -512 640 -375 500 -640 426 -640 478 -640 640 -640 480 -640 480 -500 375 -640 427 -500 375 -640 427 -640 480 -640 527 -480 640 -640 480 -427 640 -500 376 -612 612 -640 425 -334 500 -640 480 -640 480 -500 375 -640 458 -463 547 -480 640 -640 512 -640 480 -640 426 -640 424 -500 333 -640 481 -640 640 -612 612 -640 480 -640 360 -640 415 -640 426 -481 640 -640 434 -375 500 -452 640 -640 353 -640 480 -500 337 -640 480 -640 426 -480 640 -500 336 -640 401 -640 426 -640 558 -640 425 -640 424 -640 480 -640 428 -425 640 -640 427 -640 427 -640 425 -640 408 -640 427 -500 333 -640 480 -640 540 -640 480 -640 480 -640 480 -640 427 -640 397 -640 390 -640 640 -640 427 -640 395 -640 364 -640 480 -640 426 -500 333 -426 640 -640 480 -640 294 -640 427 -640 498 -640 424 -640 425 -500 375 -640 426 -640 421 -375 500 -364 640 -640 427 -640 428 -640 480 -480 640 -480 640 -640 480 -640 480 -640 429 -640 480 -640 480 -427 640 -640 427 -640 425 -640 428 -331 640 -640 480 -427 640 -640 426 -640 480 -530 640 -500 332 -640 339 -640 428 -500 433 -450 640 -429 640 -640 480 -640 480 -640 480 -640 425 -428 640 -640 427 -558 640 -640 480 -640 480 -640 427 -640 485 -500 375 -640 573 -640 640 -640 440 -500 343 -480 640 -640 480 -500 320 -480 640 -612 612 -640 473 -428 285 -640 427 -640 423 -480 640 -640 427 -640 640 -640 426 -640 375 -640 427 -500 332 -640 480 -640 640 -220 293 -640 537 -480 640 -200 305 -640 427 -640 492 -335 500 -640 353 -640 428 -500 375 -640 480 -640 427 -500 375 -640 428 -640 427 -640 480 -640 480 -640 360 -640 480 -640 480 -640 427 -429 640 -640 438 -640 426 -427 640 -640 480 -500 375 -640 480 -480 640 -640 427 -612 612 -640 410 -480 640 -427 640 -428 640 -640 480 -640 480 -640 480 -480 640 -464 640 -425 640 -640 419 -375 500 -500 375 -640 359 -500 333 -427 640 -640 446 -640 480 -640 353 -428 640 -640 425 -500 500 -480 640 -640 480 -640 478 -640 480 -640 424 -640 360 -480 640 -409 640 -640 427 -426 640 -640 428 -640 424 -640 425 -489 640 -375 500 -640 448 -640 427 -462 640 -640 425 -640 426 -640 480 -426 640 -640 480 -640 480 -640 427 -640 427 -480 640 -427 640 -480 640 -327 482 -427 640 -500 400 -640 396 -500 375 -375 500 -640 427 -640 428 -500 375 -640 427 -333 500 -640 427 -640 426 -640 428 -500 375 -479 640 -503 640 -640 489 -640 480 -640 379 -640 426 -640 480 -640 480 -480 640 -500 334 -640 480 -427 640 -500 375 -480 640 -640 426 -640 436 -640 480 -500 332 -500 375 -640 480 -612 612 -427 640 -500 375 -640 448 -640 480 -640 427 -640 438 -640 594 -640 480 -640 536 -640 427 -480 640 -640 480 -621 640 -640 480 -640 425 -640 464 -640 480 -481 640 -640 427 -480 640 -500 375 -640 427 -640 480 -640 480 -612 612 -640 480 -425 640 -640 427 -500 333 -640 480 -493 640 -448 336 -640 427 -640 480 -500 371 -427 640 -640 480 -640 424 -640 480 -640 427 -640 480 -625 640 -480 640 -640 427 -640 427 -640 425 -500 331 -640 553 -640 388 -640 480 -480 640 -640 426 -480 640 -640 427 -426 640 -480 640 -425 640 -640 427 -480 640 -640 428 -299 500 -640 480 -640 480 -640 424 -512 640 -640 427 -640 428 -478 640 -612 612 -640 456 -480 640 -640 426 -640 427 -640 455 -640 429 -640 430 -640 480 -640 360 -426 640 -640 480 -240 320 -375 500 -426 640 -500 333 -640 373 -640 434 -480 640 -480 640 -640 423 -640 427 -640 427 -500 334 -480 640 -640 478 -640 439 -500 419 -480 640 -640 480 -640 426 -500 375 -640 640 -640 548 -421 640 -640 428 -500 375 -640 427 -640 455 -463 640 -640 480 -500 331 -640 426 -500 333 -640 478 -640 428 -640 480 -480 640 -480 640 -640 480 -640 480 -640 480 -426 640 -640 441 -640 469 -640 480 -640 426 -640 480 -640 426 -640 454 -640 425 -640 480 -640 480 -640 427 -640 480 -640 480 -640 368 -640 480 -640 464 -640 428 -640 480 -640 428 -640 480 -640 480 -640 428 -640 480 -480 640 -480 640 -640 428 -640 428 -612 612 -640 427 -640 480 -500 336 -640 427 -480 640 -500 375 -480 640 -640 480 -400 500 -640 427 -640 474 -453 640 -640 303 -640 480 -640 514 -640 427 -640 568 -480 640 -640 359 -640 457 -640 480 -640 360 -640 427 -640 466 -640 339 -426 640 -640 478 -640 359 -640 427 -640 425 -480 640 -480 640 -640 480 -480 640 -640 482 -640 480 -640 360 -640 531 -640 480 -492 640 -640 483 -640 419 -363 640 -640 478 -640 426 -640 480 -480 640 -640 427 -640 480 -500 375 -640 426 -640 480 -427 640 -640 434 -640 428 -480 640 -640 428 -640 480 -500 375 -640 426 -640 480 -640 424 -357 500 -640 480 -375 500 -640 425 -374 500 -640 480 -640 360 -375 500 -640 427 -640 480 -500 334 -640 480 -640 427 -640 501 -427 640 -640 427 -640 427 -640 480 -640 427 -640 427 -480 640 -640 427 -640 427 -640 427 -640 480 -640 480 -500 333 -640 480 -640 428 -640 480 -640 310 -427 640 -640 512 -361 640 -640 427 -425 640 -417 640 -640 457 -640 424 -640 640 -612 612 -640 426 -480 640 -640 427 -640 424 -640 425 -500 334 -640 480 -480 640 -480 640 -375 500 -500 276 -640 360 -640 480 -640 480 -480 640 -640 480 -640 480 -640 444 -480 640 -640 429 -640 479 -640 400 -640 480 -425 640 -640 427 -480 640 -640 480 -640 425 -640 480 -480 640 -500 375 -446 640 -640 480 -640 374 -375 500 -640 427 -352 288 -371 500 -640 426 -640 427 -640 400 -500 333 -480 640 -640 418 -500 333 -375 500 -500 375 -640 487 -640 427 -474 640 -600 397 -640 480 -640 480 -640 151 -640 480 -640 480 -612 612 -480 320 -500 333 -640 480 -480 640 -549 640 -500 343 -375 500 -640 426 -480 640 -640 427 -476 640 -640 427 -640 426 -640 459 -640 423 -426 640 -640 424 -640 480 -640 429 -640 478 -640 424 -640 428 -480 640 -640 429 -480 640 -480 640 -640 408 -640 480 -640 480 -640 427 -640 425 -640 512 -640 426 -640 478 -612 612 -640 498 -640 480 -640 426 -494 640 -640 480 -480 640 -640 481 -640 508 -640 393 -640 386 -640 480 -480 640 -640 480 -640 458 -640 480 -640 427 -500 375 -500 375 -640 480 -320 240 -640 401 -640 390 -463 640 -640 478 -427 640 -640 480 -500 375 -640 480 -640 428 -480 640 -640 428 -640 424 -640 428 -640 426 -640 480 -640 480 -480 640 -640 480 -480 640 -640 501 -640 424 -640 480 -640 427 -640 426 -375 500 -640 414 -640 468 -640 427 -640 428 -640 480 -640 426 -640 480 -640 480 -398 640 -640 443 -640 425 -612 612 -640 425 -640 480 -375 500 -640 424 -480 298 -346 407 -640 428 -600 441 -500 375 -427 640 -640 425 -640 480 -500 375 -480 640 -480 640 -640 480 -640 426 -640 480 -640 480 -480 640 -500 333 -427 640 -500 356 -640 480 -640 480 -640 427 -426 640 -640 427 -427 640 -640 189 -640 427 -640 427 -640 480 -480 640 -612 612 -640 446 -640 425 -640 425 -480 360 -640 428 -640 428 -640 426 -333 500 -640 425 -500 308 -640 426 -480 640 -612 612 -640 425 -480 640 -640 427 -640 469 -612 612 -612 612 -640 416 -426 640 -500 332 -480 640 -500 338 -375 500 -360 640 -640 427 -640 428 -640 427 -640 428 -640 427 -500 332 -640 426 -640 425 -500 375 -640 427 -640 427 -640 425 -640 480 -427 640 -640 360 -373 496 -640 427 -640 607 -375 500 -640 480 -427 640 -640 480 -640 427 -526 640 -426 640 -333 500 -640 428 -478 500 -425 640 -640 428 -350 325 -640 458 -640 480 -640 427 -640 324 -640 480 -640 426 -640 427 -640 425 -500 320 -426 640 -427 640 -640 427 -640 426 -640 480 -640 477 -480 640 -640 429 -640 480 -640 484 -360 500 -375 500 -640 427 -640 581 -384 500 -640 427 -640 424 -496 640 -640 342 -500 375 -640 480 -427 640 -640 480 -500 332 -640 469 -451 500 -640 426 -500 374 -640 480 -640 360 -640 360 -480 640 -640 418 -427 640 -480 640 -640 480 -640 360 -640 377 -480 640 -640 427 -640 458 -640 424 -640 425 -480 640 -640 480 -640 426 -640 443 -640 480 -575 640 -500 375 -640 640 -640 402 -640 427 -640 480 -612 612 -640 396 -352 288 -480 640 -640 480 -640 431 -640 427 -640 359 -640 427 -640 480 -640 539 -500 333 -545 640 -640 428 -500 375 -640 640 -426 640 -640 624 -500 382 -640 480 -640 427 -640 428 -375 500 -640 359 -640 431 -640 491 -640 426 -500 333 -640 479 -566 640 -640 359 -333 500 -640 640 -640 480 -640 480 -425 640 -612 612 -480 640 -640 480 -640 478 -640 478 -480 640 -640 360 -640 458 -640 428 -500 371 -640 426 -500 375 -640 426 -640 480 -640 428 -640 426 -640 485 -640 426 -426 640 -640 427 -640 426 -375 500 -640 480 -480 640 -640 361 -640 512 -640 480 -426 640 -640 427 -640 640 -640 480 -385 500 -640 480 -640 480 -640 480 -640 480 -640 480 -640 425 -500 473 -500 374 -640 480 -640 426 -500 330 -640 445 -640 480 -640 449 -512 640 -479 640 -640 480 -500 375 -640 480 -640 425 -640 480 -640 427 -480 640 -640 478 -640 480 -500 375 -427 640 -512 640 -640 428 -640 480 -640 424 -457 640 -640 480 -375 500 -427 640 -640 426 -500 375 -640 480 -640 427 -640 480 -500 375 -640 424 -640 426 -640 427 -640 360 -640 408 -424 640 -612 612 -640 426 -640 522 -640 427 -640 425 -640 428 -640 427 -500 375 -640 480 -640 480 -640 480 -640 408 -640 480 -640 480 -640 348 -640 427 -640 480 -640 480 -500 332 -500 332 -383 640 -640 464 -640 426 -640 480 -640 480 -640 480 -640 480 -640 430 -640 426 -640 480 -640 480 -640 427 -427 640 -640 427 -640 360 -344 500 -640 427 -640 512 -640 426 -427 640 -640 360 -640 427 -640 480 -640 383 -640 480 -640 453 -640 428 -297 500 -640 480 -500 640 -640 480 -363 484 -427 640 -500 335 -640 425 -640 424 -480 640 -640 480 -640 586 -612 612 -640 480 -640 427 -640 480 -480 640 -375 500 -500 375 -640 424 -640 480 -640 426 -356 640 -640 427 -640 480 -480 640 -640 480 -480 640 -640 480 -640 480 -424 640 -640 415 -500 375 -478 640 -640 426 -480 640 -640 427 -480 640 -500 344 -640 493 -480 640 -640 582 -640 427 -640 480 -640 426 -500 375 -500 331 -480 640 -500 375 -640 398 -640 480 -640 480 -640 427 -640 508 -640 433 -640 480 -640 425 -640 480 -640 427 -640 554 -500 375 -640 480 -640 515 -338 500 -640 574 -426 640 -427 640 -500 375 -640 425 -640 428 -500 333 -640 425 -500 375 -640 480 -640 427 -578 640 -640 478 -640 480 -640 336 -500 335 -640 360 -333 500 -500 333 -480 640 -640 480 -500 375 -320 213 -640 480 -640 480 -485 640 -640 480 -428 640 -500 333 -427 640 -640 427 -640 480 -640 360 -612 612 -640 424 -640 480 -640 469 -640 480 -640 427 -640 480 -640 640 -335 500 -640 426 -640 480 -640 427 -423 640 -640 427 -640 480 -640 427 -612 612 -640 396 -640 427 -480 640 -640 480 -640 409 -640 427 -640 480 -612 612 -640 480 -640 480 -640 375 -640 459 -480 640 -640 458 -640 480 -427 640 -640 378 -640 480 -640 427 -480 640 -320 500 -640 428 -500 375 -640 543 -640 441 -431 640 -640 399 -640 480 -640 582 -640 431 -640 417 -427 640 -640 427 -640 480 -640 480 -640 480 -640 428 -640 360 -640 426 -640 427 -640 480 -640 459 -480 640 -640 556 -480 640 -640 294 -500 375 -640 308 -640 480 -640 425 -500 310 -332 500 -640 480 -640 480 -480 640 -640 429 -640 480 -500 375 -335 500 -640 310 -640 427 -640 526 -640 427 -640 426 -640 454 -500 375 -640 566 -640 481 -640 480 -226 640 -640 480 -640 360 -500 333 -640 328 -640 425 -480 640 -640 427 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -640 640 -640 426 -640 424 -640 480 -640 480 -640 482 -467 640 -640 457 -640 480 -480 640 -640 480 -600 399 -640 364 -640 428 -640 427 -640 428 -500 375 -500 375 -640 453 -640 427 -640 359 -426 640 -640 480 -640 480 -375 500 -640 427 -480 640 -640 480 -640 427 -640 190 -640 482 -640 428 -640 427 -640 428 -425 640 -500 375 -640 360 -640 424 -640 427 -640 456 -640 480 -640 480 -640 480 -640 480 -640 480 -375 500 -640 425 -640 427 -640 438 -640 446 -640 427 -612 612 -475 500 -480 640 -407 640 -640 481 -640 427 -424 640 -640 480 -640 480 -640 480 -426 640 -640 427 -640 480 -640 425 -640 480 -480 640 -640 429 -500 375 -640 480 -612 612 -640 427 -500 375 -500 400 -640 216 -640 480 -640 480 -628 640 -640 453 -427 640 -640 428 -640 427 -612 612 -640 427 -640 480 -480 640 -640 425 -640 480 -612 612 -640 487 -640 425 -640 428 -640 266 -640 361 -640 480 -480 640 -640 428 -640 426 -640 640 -281 640 -640 454 -612 612 -640 478 -640 426 -424 640 -478 640 -480 640 -640 473 -500 375 -375 500 -640 424 -375 500 -612 612 -612 612 -640 480 -640 360 -640 431 -640 480 -640 393 -478 640 -500 301 -375 500 -640 426 -640 427 -640 480 -640 480 -375 500 -640 424 -480 640 -640 480 -640 427 -640 480 -640 427 -426 640 -480 640 -480 640 -640 480 -640 478 -640 426 -478 640 -640 428 -640 427 -480 640 -480 640 -404 640 -543 640 -425 640 -640 360 -640 480 -640 464 -612 612 -500 400 -640 607 -478 640 -640 427 -640 426 -640 479 -640 480 -640 480 -640 480 -640 428 -640 425 -640 359 -640 426 -640 359 -640 359 -640 462 -480 640 -640 640 -640 425 -640 400 -640 480 -640 428 -640 480 -640 478 -640 426 -480 640 -640 480 -640 576 -375 500 -426 640 -640 509 -427 640 -640 480 -640 480 -640 427 -500 375 -480 640 -640 406 -640 427 -593 640 -427 640 -612 612 -640 426 -375 500 -640 480 -512 640 -612 640 -640 316 -500 375 -640 427 -427 640 -500 333 -333 500 -500 375 -640 413 -375 500 -480 640 -640 480 -568 320 -500 375 -640 480 -640 421 -640 480 -427 640 -500 375 -427 640 -428 640 -320 240 -500 368 -640 480 -480 640 -640 428 -425 640 -640 480 -640 480 -640 640 -427 640 -640 480 -640 480 -640 427 -640 427 -480 640 -640 480 -480 640 -500 375 -640 480 -640 427 -570 640 -612 612 -640 513 -640 480 -640 480 -640 427 -640 480 -640 427 -640 360 -640 427 -640 426 -640 480 -640 422 -640 425 -612 612 -457 640 -500 334 -640 512 -640 338 -640 425 -480 640 -640 480 -640 476 -480 640 -612 612 -640 480 -640 319 -500 333 -360 302 -640 482 -427 640 -640 427 -640 426 -482 640 -480 640 -427 640 -428 640 -640 427 -640 428 -401 640 -640 398 -640 512 -640 458 -426 640 -640 501 -640 427 -357 500 -450 640 -480 640 -640 481 -264 400 -640 480 -640 480 -375 500 -640 429 -640 360 -640 427 -640 427 -640 480 -479 640 -640 425 -640 427 -640 480 -640 480 -640 427 -480 640 -426 640 -500 313 -500 375 -640 640 -640 429 -640 480 -500 333 -457 640 -352 500 -640 480 -640 480 -640 427 -400 500 -640 480 -500 375 -480 640 -480 640 -378 640 -209 500 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -640 433 -640 428 -426 640 -640 480 -640 457 -640 422 -640 475 -640 480 -640 427 -640 512 -640 427 -640 480 -640 429 -640 429 -640 427 -640 480 -640 480 -426 640 -640 428 -640 413 -640 480 -640 480 -640 427 -427 640 -640 426 -640 632 -640 427 -640 359 -480 640 -640 426 -640 427 -500 333 -640 427 -640 510 -640 479 -640 428 -500 333 -480 640 -612 612 -640 427 -640 433 -640 424 -500 333 -640 427 -640 426 -640 457 -640 427 -426 640 -500 375 -640 480 -640 480 -640 435 -640 480 -640 360 -478 640 -640 427 -640 480 -612 612 -426 640 -640 426 -640 425 -640 427 -480 640 -640 361 -640 480 -640 426 -640 453 -640 480 -480 640 -640 480 -480 640 -480 640 -425 640 -640 428 -640 427 -640 425 -640 428 -500 318 -640 399 -500 375 -631 640 -640 427 -640 480 -480 640 -480 640 -640 480 -427 640 -640 480 -640 451 -640 480 -500 375 -512 640 -640 480 -500 500 -640 448 -480 640 -640 383 -480 640 -500 414 -640 480 -500 375 -640 427 -500 375 -425 640 -640 510 -500 421 -640 427 -640 480 -480 640 -480 640 -400 500 -640 427 -640 426 -640 427 -500 375 -640 428 -438 640 -500 333 -640 428 -640 480 -480 640 -375 500 -640 480 -480 640 -640 429 -640 480 -640 429 -640 480 -640 480 -640 427 -480 640 -640 480 -640 618 -421 640 -640 383 -600 450 -528 360 -640 427 -640 480 -640 425 -427 640 -427 640 -640 428 -640 480 -640 481 -439 640 -640 427 -427 640 -480 640 -457 640 -640 342 -480 640 -640 427 -500 375 -480 640 -640 426 -640 424 -640 427 -510 640 -281 500 -640 481 -640 480 -375 500 -640 480 -640 383 -640 480 -612 612 -425 640 -640 480 -640 427 -640 425 -500 347 -640 427 -500 375 -640 480 -640 427 -483 640 -640 480 -640 480 -640 425 -640 480 -500 379 -480 640 -640 466 -640 483 -640 480 -640 640 -640 640 -640 480 -324 640 -640 422 -640 427 -550 400 -640 480 -640 416 -640 480 -640 520 -640 426 -500 332 -428 640 -640 480 -640 424 -640 427 -640 480 -640 480 -640 480 -640 427 -640 480 -640 462 -640 427 -427 640 -640 427 -500 400 -500 332 -640 357 -640 427 -640 480 -640 427 -640 424 -640 440 -500 375 -640 428 -640 480 -640 378 -640 411 -640 480 -640 480 -640 427 -640 411 -640 480 -640 480 -640 459 -640 480 -640 480 -480 640 -640 480 -640 480 -640 427 -640 480 -640 426 -640 480 -427 640 -640 427 -427 640 -640 512 -379 640 -640 480 -640 428 -427 640 -427 640 -640 430 -436 640 -640 427 -500 375 -640 480 -500 375 -640 480 -640 480 -500 333 -640 424 -640 427 -500 375 -640 426 -640 381 -640 480 -640 406 -333 500 -640 480 -500 333 -418 640 -425 640 -640 360 -640 425 -640 640 -640 480 -640 427 -500 175 -640 427 -640 423 -640 480 -640 400 -640 224 -640 400 -640 474 -480 640 -640 389 -640 392 -640 433 -500 375 -640 480 -640 429 -432 640 -640 480 -640 428 -500 333 -640 427 -640 480 -480 640 -640 480 -424 640 -640 480 -640 442 -500 375 -640 480 -640 427 -500 334 -480 640 -500 354 -612 612 -333 500 -640 427 -640 554 -480 640 -640 479 -640 480 -427 640 -640 480 -461 640 -640 427 -640 513 -640 458 -640 480 -480 640 -375 500 -640 517 -640 480 -480 640 -640 426 -427 640 -640 480 -500 375 -640 509 -640 480 -640 477 -426 640 -640 427 -640 482 -640 427 -500 333 -424 640 -640 480 -640 480 -480 640 -640 480 -361 640 -426 640 -640 427 -640 427 -640 480 -500 499 -640 544 -640 640 -640 478 -612 612 -400 500 -640 480 -640 421 -640 480 -640 426 -640 337 -640 427 -640 429 -500 334 -640 484 -640 480 -425 640 -411 640 -480 640 -640 428 -640 427 -640 460 -640 427 -446 500 -370 500 -500 375 -500 377 -480 640 -640 429 -640 458 -640 480 -480 640 -640 371 -640 480 -480 640 -500 375 -640 426 -640 640 -640 512 -640 480 -640 424 -640 428 -480 640 -500 375 -640 480 -500 375 -444 500 -454 640 -500 375 -640 360 -640 480 -500 375 -640 480 -640 640 -640 322 -640 426 -640 479 -220 155 -375 500 -640 457 -640 427 -640 480 -640 427 -500 375 -640 640 -479 640 -640 428 -428 640 -640 434 -375 500 -640 480 -640 399 -616 640 -640 480 -480 640 -640 640 -427 640 -640 427 -480 640 -640 427 -640 480 -640 625 -500 375 -640 425 -640 426 -640 432 -640 480 -640 427 -509 640 -546 640 -640 428 -640 480 -640 426 -640 428 -640 426 -640 470 -640 480 -640 495 -640 338 -640 428 -500 326 -480 640 -427 640 -480 640 -640 363 -640 439 -375 500 -640 544 -500 375 -424 640 -511 640 -640 427 -427 640 -640 427 -640 478 -640 397 -640 480 -478 640 -480 640 -480 360 -500 333 -640 427 -425 640 -427 640 -511 640 -640 480 -375 500 -640 480 -478 640 -640 427 -640 427 -427 640 -640 480 -375 500 -480 640 -640 427 -640 455 -640 426 -640 427 -599 640 -480 640 -640 312 -640 427 -640 427 -427 640 -427 640 -604 453 -640 427 -640 480 -427 640 -500 375 -640 427 -500 335 -427 640 -500 333 -640 427 -640 426 -500 375 -640 463 -427 640 -640 428 -640 429 -640 427 -640 426 -640 426 -640 480 -640 480 -385 640 -640 439 -640 480 -500 375 -640 480 -427 640 -640 480 -640 435 -493 640 -640 480 -640 480 -640 480 -640 427 -640 427 -467 640 -640 426 -384 576 -500 375 -640 480 -640 453 -640 239 -600 387 -640 426 -482 640 -640 426 -640 428 -640 480 -640 427 -640 427 -500 375 -546 640 -480 640 -640 480 -426 640 -640 480 -640 480 -640 427 -640 480 -640 428 -543 640 -640 480 -500 375 -640 480 -640 423 -640 480 -640 626 -640 428 -480 640 -640 480 -640 425 -640 429 -479 640 -427 640 -480 640 -640 426 -563 640 -640 480 -333 500 -480 640 -640 427 -526 640 -640 424 -640 640 -640 480 -429 640 -500 309 -640 427 -640 427 -640 151 -640 428 -640 480 -640 480 -640 427 -640 351 -640 424 -640 426 -483 640 -640 360 -500 356 -640 480 -640 360 -640 427 -500 333 -640 424 -640 427 -640 480 -640 432 -640 480 -612 612 -640 413 -640 427 -640 480 -640 427 -427 640 -640 427 -640 427 -640 480 -375 500 -424 640 -640 425 -640 425 -640 480 -480 640 -500 383 -640 480 -640 480 -429 640 -480 640 -500 375 -640 480 -500 360 -640 479 -640 427 -480 640 -640 429 -375 500 -500 375 -640 400 -640 480 -640 478 -640 455 -640 427 -489 640 -640 343 -640 480 -332 500 -640 640 -640 427 -480 640 -640 480 -480 640 -640 427 -640 480 -500 375 -427 640 -640 428 -640 568 -640 426 -640 425 -640 480 -612 612 -640 512 -640 425 -480 640 -640 480 -640 425 -640 427 -640 427 -500 375 -640 480 -640 446 -640 548 -640 480 -317 500 -640 426 -640 529 -640 426 -640 429 -640 475 -556 640 -458 640 -640 480 -338 500 -640 480 -640 427 -500 500 -640 427 -333 500 -426 640 -640 640 -500 375 -480 640 -640 640 -640 427 -640 438 -640 640 -640 538 -640 425 -640 480 -375 500 -640 426 -640 427 -640 476 -640 400 -640 480 -480 640 -640 427 -425 640 -640 428 -640 390 -640 450 -640 426 -640 480 -500 375 -640 429 -640 429 -500 375 -640 427 -640 480 -500 500 -640 482 -640 428 -640 444 -640 480 -428 640 -480 640 -640 501 -640 480 -640 351 -640 480 -480 640 -429 640 -612 612 -640 480 -640 426 -640 480 -640 427 -640 480 -640 428 -500 375 -640 480 -640 480 -640 425 -413 640 -640 478 -500 500 -640 480 -640 481 -577 640 -480 640 -500 500 -640 480 -640 640 -640 480 -640 454 -640 363 -640 480 -640 368 -640 480 -640 480 -640 479 -640 409 -640 480 -426 640 -480 640 -640 425 -480 640 -427 640 -640 476 -640 425 -477 323 -480 640 -480 640 -640 480 -640 480 -640 480 -640 479 -640 425 -480 640 -640 480 -640 427 -640 426 -640 480 -640 480 -428 640 -640 480 -640 427 -640 480 -640 432 -426 640 -424 640 -500 375 -184 200 -640 425 -640 480 -640 480 -640 427 -640 426 -480 360 -640 480 -640 480 -640 480 -640 449 -426 640 -640 427 -640 480 -640 480 -640 400 -640 427 -425 640 -640 427 -640 480 -640 480 -640 426 -333 500 -640 428 -640 480 -428 640 -500 375 -480 640 -612 612 -450 338 -480 640 -640 425 -640 411 -457 640 -640 480 -640 427 -640 424 -480 640 -500 375 -426 640 -427 640 -480 640 -640 480 -480 640 -640 439 -640 480 -640 427 -425 640 -640 390 -640 640 -428 640 -640 480 -640 478 -375 500 -600 450 -640 480 -500 422 -640 480 -640 480 -640 431 -640 480 -473 640 -529 640 -640 427 -640 480 -550 400 -640 480 -612 612 -500 375 -426 640 -380 640 -375 500 -640 480 -640 429 -640 427 -640 427 -500 376 -383 640 -640 426 -640 480 -640 480 -427 640 -640 480 -500 375 -612 612 -640 480 -480 640 -640 416 -640 480 -480 640 -640 427 -500 400 -640 480 -640 427 -500 375 -640 640 -500 375 -623 640 -375 500 -640 359 -480 640 -640 480 -480 640 -480 640 -640 427 -640 428 -640 640 -640 512 -375 500 -640 480 -640 426 -640 428 -480 360 -489 640 -500 333 -480 640 -640 428 -375 500 -442 330 -640 428 -640 480 -612 612 -360 640 -500 375 -640 497 -640 427 -640 359 -640 427 -500 375 -640 512 -320 238 -425 640 -640 480 -640 480 -640 426 -640 427 -640 444 -612 612 -375 500 -478 640 -640 555 -640 426 -480 640 -640 480 -640 480 -640 426 -640 480 -640 426 -640 427 -640 426 -640 419 -640 427 -480 640 -427 640 -640 480 -640 480 -640 427 -640 480 -640 427 -480 640 -640 480 -640 360 -480 640 -500 375 -504 379 -473 500 -500 375 -480 640 -640 427 -427 640 -640 427 -448 296 -640 424 -640 480 -640 427 -640 384 -640 425 -640 424 -639 640 -640 426 -640 427 -640 480 -294 500 -640 427 -640 427 -640 457 -426 640 -640 512 -640 480 -640 480 -640 467 -640 423 -500 232 -640 480 -361 640 -433 640 -640 427 -446 640 -640 427 -640 480 -640 427 -640 480 -640 480 -612 612 -435 640 -640 478 -426 640 -640 425 -640 424 -640 427 -640 480 -640 426 -640 446 -640 480 -640 428 -352 500 -480 640 -500 375 -406 640 -640 480 -456 640 -640 427 -640 427 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -640 359 -480 640 -640 465 -362 640 -640 480 -640 426 -640 640 -640 426 -640 480 -426 640 -640 480 -640 424 -480 640 -640 480 -640 480 -453 640 -534 640 -427 640 -381 640 -640 427 -640 478 -640 574 -427 640 -500 406 -640 154 -481 640 -612 612 -640 361 -640 480 -640 426 -640 353 -480 640 -640 480 -640 428 -640 480 -640 427 -480 640 -640 480 -640 419 -640 481 -640 427 -500 375 -500 375 -612 612 -640 426 -640 480 -480 640 -374 500 -640 454 -457 640 -640 451 -640 480 -640 427 -640 480 -640 380 -413 640 -320 240 -640 427 -640 424 -500 333 -600 410 -333 500 -480 640 -640 427 -640 480 -640 405 -640 427 -640 480 -427 640 -640 480 -640 428 -480 640 -640 478 -640 441 -480 640 -640 480 -429 640 -640 427 -500 500 -640 427 -450 640 -426 640 -640 273 -640 430 -640 503 -612 612 -640 428 -640 428 -640 427 -640 427 -640 480 -640 453 -640 640 -640 480 -480 640 -640 480 -640 480 -640 424 -426 640 -640 499 -640 480 -640 427 -640 485 -640 428 -640 480 -640 480 -640 427 -640 480 -480 480 -424 640 -640 480 -480 640 -500 400 -640 425 -500 333 -640 427 -640 480 -640 427 -640 435 -480 640 -500 333 -500 375 -612 612 -640 427 -640 480 -640 419 -500 333 -640 480 -640 427 -640 603 -640 427 -640 429 -640 405 -640 427 -640 427 -640 480 -500 400 -480 640 -500 333 -640 425 -640 435 -333 500 -640 426 -640 476 -480 640 -640 427 -634 401 -425 640 -640 427 -481 640 -640 480 -375 500 -640 427 -640 421 -640 425 -640 426 -640 426 -640 480 -640 480 -640 427 -419 640 -500 333 -640 480 -500 333 -640 480 -480 464 -640 427 -480 640 -640 539 -640 426 -640 480 -640 425 -500 332 -427 640 -429 640 -640 429 -640 424 -640 427 -640 480 -500 375 -640 429 -640 426 -427 640 -500 374 -640 426 -480 640 -375 500 -640 480 -375 500 -480 640 -389 640 -640 425 -427 640 -612 612 -640 480 -640 427 -640 480 -640 427 -640 340 -612 612 -640 427 -640 429 -640 451 -640 481 -640 512 -500 497 -480 640 -640 472 -640 480 -640 480 -640 480 -640 427 -640 480 -640 458 -640 425 -640 427 -640 444 -640 480 -425 640 -640 440 -640 425 -640 480 -478 640 -640 360 -640 480 -640 480 -640 640 -426 640 -640 427 -640 457 -427 640 -640 480 -640 480 -480 640 -640 480 -480 640 -480 640 -480 640 -640 426 -640 426 -640 480 -500 332 -500 375 -500 334 -640 463 -480 640 -640 425 -482 640 -501 640 -640 403 -640 433 -640 457 -640 427 -640 427 -640 480 -500 373 -640 488 -640 478 -640 480 -640 480 -454 640 -328 500 -640 494 -640 480 -640 426 -640 441 -640 427 -428 640 -478 640 -640 471 -480 640 -425 640 -640 426 -640 425 -640 480 -640 360 -375 500 -640 480 -640 480 -640 640 -640 512 -427 640 -640 427 -640 640 -500 375 -600 600 -640 426 -640 449 -478 640 -640 427 -480 640 -375 500 -480 640 -640 480 -640 426 -640 480 -640 480 -612 612 -640 480 -542 640 -425 640 -537 640 -500 375 -640 426 -640 427 -389 500 -640 359 -640 426 -640 425 -640 427 -640 424 -500 375 -640 402 -640 480 -306 640 -640 426 -640 424 -533 640 -640 423 -640 427 -640 480 -640 427 -640 427 -427 640 -640 428 -500 415 -640 427 -500 437 -640 428 -360 500 -640 480 -612 612 -480 640 -640 425 -640 427 -612 612 -426 640 -452 500 -640 503 -424 640 -612 612 -640 480 -500 333 -640 426 -414 640 -640 414 -640 396 -640 480 -640 480 -640 480 -640 480 -640 604 -640 427 -500 362 -640 426 -640 480 -333 500 -427 640 -480 640 -640 414 -640 480 -640 424 -640 427 -640 427 -640 480 -640 400 -640 640 -612 612 -612 612 -422 640 -426 640 -640 426 -500 375 -640 425 -640 428 -640 416 -640 480 -640 480 -427 640 -640 480 -640 640 -640 427 -640 364 -640 427 -431 500 -480 640 -640 480 -427 640 -640 462 -640 518 -427 640 -640 479 -640 426 -640 480 -640 486 -640 427 -640 360 -640 426 -612 612 -640 480 -640 427 -640 480 -640 427 -640 281 -640 353 -640 480 -640 640 -640 427 -640 480 -426 640 -523 640 -640 640 -640 427 -426 640 -640 428 -640 480 -640 427 -640 448 -640 427 -640 427 -640 444 -500 375 -480 640 -480 640 -640 425 -640 480 -427 640 -410 500 -429 640 -640 427 -640 640 -333 500 -640 433 -640 480 -640 424 -427 640 -640 426 -640 480 -640 425 -500 334 -640 480 -640 427 -500 400 -640 480 -640 427 -640 480 -640 426 -640 427 -640 427 -640 524 -640 426 -500 375 -640 610 -640 425 -427 640 -426 640 -640 553 -427 640 -640 425 -640 480 -427 640 -640 427 -640 427 -640 427 -640 359 -500 209 -640 480 -403 640 -612 612 -631 640 -640 426 -426 640 -640 394 -428 640 -425 640 -640 480 -640 476 -375 500 -640 479 -480 640 -612 612 -640 509 -500 335 -480 640 -640 427 -640 425 -640 457 -480 640 -640 480 -500 337 -640 635 -640 480 -640 427 -640 480 -640 427 -640 640 -640 640 -640 480 -421 640 -640 427 -480 640 -612 612 -640 480 -640 426 -426 640 -640 478 -640 339 -640 480 -500 377 -640 425 -612 612 -427 640 -640 427 -640 428 -640 481 -640 480 -500 467 -640 426 -478 640 -478 640 -640 426 -329 500 -640 468 -428 640 -480 640 -640 427 -640 360 -427 640 -500 333 -480 640 -640 556 -500 375 -640 480 -640 427 -500 332 -500 400 -427 640 -640 427 -612 612 -640 480 -500 334 -640 451 -640 425 -640 426 -427 640 -640 406 -480 640 -640 480 -640 503 -640 480 -640 480 -640 429 -500 375 -427 640 -640 480 -640 426 -612 612 -640 426 -640 480 -500 375 -640 429 -640 360 -480 640 -640 480 -640 428 -640 480 -500 375 -640 480 -640 424 -500 375 -640 424 -640 427 -480 640 -640 480 -640 427 -500 375 -640 480 -640 480 -640 480 -640 480 -640 480 -640 435 -480 640 -640 428 -640 480 -640 478 -640 427 -640 480 -500 336 -640 480 -640 480 -640 480 -640 428 -500 375 -489 640 -640 426 -500 375 -640 480 -640 428 -640 427 -248 640 -640 480 -640 427 -640 322 -640 512 -640 480 -426 640 -640 425 -640 480 -640 427 -640 449 -640 509 -640 480 -640 480 -519 640 -480 640 -427 640 -640 457 -640 480 -640 480 -500 375 -425 640 -640 457 -640 426 -426 640 -480 640 -640 425 -640 427 -334 500 -500 375 -640 471 -500 375 -640 480 -500 305 -436 640 -640 428 -640 480 -640 426 -640 480 -640 426 -640 480 -427 640 -612 612 -502 640 -480 640 -640 480 -480 640 -640 478 -640 420 -640 458 -500 375 -478 640 -427 640 -640 427 -640 427 -640 458 -640 566 -640 555 -640 480 -640 480 -640 416 -640 404 -603 452 -480 640 -640 361 -640 396 -640 480 -640 479 -640 480 -425 640 -640 427 -500 390 -640 640 -640 480 -318 480 -640 360 -500 375 -512 640 -427 640 -480 640 -480 640 -640 480 -640 427 -478 640 -640 478 -640 640 -640 423 -640 480 -318 640 -640 480 -640 421 -640 480 -640 427 -640 480 -480 640 -500 283 -425 640 -320 240 -640 450 -640 480 -640 426 -480 640 -640 427 -640 427 -640 496 -640 426 -640 426 -640 480 -640 427 -640 499 -640 427 -425 640 -428 640 -640 480 -356 500 -640 427 -640 480 -640 479 -640 439 -640 360 -640 480 -500 500 -640 423 -640 479 -640 427 -640 439 -640 480 -640 427 -640 427 -640 457 -640 428 -640 320 -500 375 -640 480 -426 640 -640 480 -424 640 -480 640 -640 480 -640 480 -640 480 -640 427 -640 480 -640 640 -427 640 -500 375 -640 426 -640 427 -640 480 -640 383 -640 427 -640 427 -640 129 -640 480 -640 427 -640 427 -640 299 -640 437 -640 480 -640 428 -640 476 -332 500 -640 476 -500 335 -300 225 -640 359 -500 375 -640 427 -640 427 -640 480 -640 426 -640 428 -331 640 -427 640 -355 500 -640 406 -500 375 -640 480 -480 640 -640 425 -640 480 -500 375 -427 640 -612 612 -480 640 -480 640 -640 480 -500 375 -640 423 -425 640 -640 480 -500 337 -640 480 -612 612 -640 426 -500 375 -480 640 -640 480 -500 333 -640 480 -500 375 -500 375 -640 480 -640 480 -640 426 -500 377 -640 426 -640 480 -500 333 -640 480 -428 640 -640 637 -289 640 -500 375 -640 569 -640 427 -640 362 -640 540 -640 429 -640 402 -640 480 -480 640 -640 427 -425 640 -640 400 -640 640 -640 449 -375 500 -427 640 -353 500 -640 427 -640 640 -424 640 -640 480 -500 450 -640 501 -640 505 -640 480 -640 427 -640 427 -640 480 -500 286 -427 640 -640 404 -640 480 -375 500 -375 500 -640 249 -640 430 -640 488 -640 434 -640 480 -640 480 -640 480 -640 480 -640 480 -640 438 -640 481 -640 214 -640 427 -640 427 -612 612 -640 480 -640 480 -640 480 -640 424 -348 640 -500 338 -360 640 -640 480 -640 480 -479 640 -640 480 -640 384 -640 498 -640 478 -640 480 -424 640 -640 499 -375 500 -375 500 -640 424 -333 500 -640 553 -640 397 -640 480 -583 640 -424 640 -640 480 -640 427 -640 480 -640 360 -612 612 -640 480 -612 612 -500 333 -640 425 -640 480 -640 363 -640 480 -640 480 -640 404 -640 480 -500 335 -640 427 -640 362 -640 427 -427 640 -478 640 -500 291 -476 640 -424 640 -425 640 -500 333 -640 488 -640 501 -480 640 -640 480 -640 480 -640 480 -335 500 -640 480 -382 640 -640 358 -640 373 -640 427 -640 480 -640 481 -640 480 -640 424 -500 335 -640 480 -462 640 -480 640 -640 480 -480 640 -500 333 -480 640 -640 527 -480 640 -427 640 -640 480 -640 426 -375 500 -640 425 -640 427 -640 480 -640 640 -640 480 -640 427 -333 500 -480 640 -640 480 -640 480 -640 427 -640 428 -457 640 -492 640 -640 483 -347 500 -640 449 -480 640 -640 428 -500 375 -640 436 -640 427 -640 383 -640 426 -640 426 -640 458 -640 426 -640 429 -640 427 -640 640 -640 478 -640 428 -640 600 -383 640 -640 480 -480 640 -500 436 -640 480 -612 612 -640 480 -500 375 -640 427 -640 425 -640 428 -500 375 -640 480 -640 427 -640 480 -640 480 -640 427 -485 640 -500 333 -500 333 -640 480 -612 612 -640 610 -640 427 -480 640 -428 640 -640 480 -640 480 -640 480 -333 500 -640 426 -640 427 -640 435 -640 427 -500 313 -640 480 -640 427 -537 640 -640 427 -640 480 -640 317 -426 640 -480 640 -354 400 -640 353 -640 480 -640 427 -270 640 -640 480 -640 480 -640 480 -500 333 -640 428 -640 480 -640 457 -640 480 -640 360 -500 375 -500 385 -640 480 -640 480 -428 640 -480 640 -333 500 -510 640 -640 359 -480 640 -640 448 -640 359 -640 480 -640 427 -640 480 -640 480 -640 427 -640 428 -640 480 -640 426 -480 640 -640 427 -640 428 -640 480 -640 480 -640 424 -463 640 -640 480 -427 640 -640 478 -410 640 -334 500 -640 428 -480 640 -640 426 -640 640 -480 640 -396 640 -640 480 -640 427 -640 480 -500 334 -640 429 -500 301 -640 478 -640 478 -500 375 -640 427 -640 480 -336 448 -514 640 -640 480 -480 640 -640 415 -478 640 -640 426 -480 640 -640 480 -640 480 -640 480 -426 640 -428 640 -427 640 -640 451 -640 466 -480 360 -488 640 -640 360 -426 640 -640 396 -640 480 -523 640 -640 480 -500 375 -640 427 -426 640 -640 480 -500 334 -640 480 -500 375 -640 480 -640 480 -331 500 -640 468 -640 427 -640 480 -640 427 -640 427 -640 427 -441 640 -640 480 -640 419 -500 375 -640 536 -442 640 -640 480 -612 612 -640 427 -500 375 -640 480 -500 333 -640 480 -375 500 -500 332 -640 427 -640 427 -640 427 -480 640 -480 636 -426 640 -640 426 -640 480 -427 640 -406 640 -640 427 -640 480 -640 427 -478 640 -640 427 -500 500 -462 640 -519 640 -640 383 -640 444 -500 333 -514 640 -640 424 -360 221 -480 640 -450 338 -518 640 -477 640 -640 427 -640 480 -640 480 -612 612 -640 427 -640 480 -500 375 -640 427 -640 480 -640 436 -640 480 -428 640 -427 640 -427 640 -640 427 -480 640 -640 368 -640 428 -640 480 -640 327 -640 640 -500 371 -640 480 -640 427 -500 375 -640 529 -640 427 -640 427 -640 479 -640 425 -640 427 -427 640 -640 640 -480 640 -640 480 -427 640 -500 375 -640 480 -640 426 -640 480 -640 424 -640 428 -478 640 -640 480 -428 640 -640 427 -640 480 -427 640 -640 399 -640 427 -428 640 -640 544 -640 480 -640 427 -640 480 -640 480 -640 535 -640 426 -500 375 -500 375 -640 427 -640 480 -640 425 -500 375 -536 640 -640 427 -500 333 -480 640 -640 491 -640 427 -640 429 -640 333 -640 480 -500 375 -640 480 -640 359 -640 420 -640 360 -640 480 -500 349 -640 427 -375 500 -640 146 -640 426 -640 480 -640 480 -500 367 -640 480 -480 640 -640 426 -640 480 -640 425 -640 425 -640 426 -640 419 -425 640 -427 640 -640 426 -640 480 -640 427 -640 480 -640 424 -339 500 -640 428 -640 480 -640 480 -640 483 -640 328 -600 401 -500 375 -500 375 -300 225 -640 480 -640 427 -500 375 -612 612 -640 480 -640 480 -640 426 -640 640 -640 480 -640 428 -500 375 -640 640 -640 465 -640 640 -640 427 -500 375 -640 473 -500 378 -640 481 -640 424 -640 480 -612 612 -425 640 -427 640 -640 480 -640 427 -640 480 -375 500 -640 512 -640 427 -426 640 -640 425 -428 640 -400 500 -383 640 -640 427 -500 374 -500 373 -500 365 -640 480 -600 399 -640 480 -640 426 -640 360 -640 427 -500 375 -640 425 -640 427 -640 640 -640 480 -640 426 -640 406 -640 408 -480 640 -425 640 -640 480 -640 480 -427 640 -500 350 -480 640 -640 427 -480 640 -428 640 -640 360 -640 341 -640 425 -640 523 -640 480 -427 640 -640 427 -425 640 -640 425 -500 333 -640 425 -500 333 -640 461 -500 375 -640 427 -512 640 -640 426 -635 591 -640 433 -640 427 -640 480 -427 640 -640 446 -640 480 -640 427 -640 360 -640 425 -420 640 -429 640 -624 624 -500 375 -640 480 -640 480 -570 640 -640 640 -640 427 -640 441 -425 640 -375 500 -640 366 -480 640 -640 403 -360 640 -640 381 -640 360 -640 480 -640 480 -640 427 -640 480 -640 433 -640 480 -425 640 -439 640 -480 640 -488 640 -500 375 -640 480 -640 466 -427 640 -640 302 -640 480 -640 480 -640 351 -640 480 -640 480 -333 500 -640 427 -299 409 -640 480 -500 333 -500 375 -640 473 -426 640 -640 425 -640 428 -640 427 -640 427 -426 640 -640 477 -640 480 -339 500 -640 449 -426 640 -612 612 -480 640 -640 478 -612 612 -640 426 -613 640 -640 480 -640 480 -640 361 -640 383 -640 410 -640 480 -640 427 -640 563 -425 640 -640 480 -640 480 -480 640 -640 480 -500 348 -640 427 -500 376 -640 488 -640 480 -480 640 -640 427 -640 427 -350 263 -640 428 -640 367 -500 332 -640 428 -480 640 -480 640 -640 480 -640 425 -640 480 -480 640 -500 375 -359 640 -640 480 -500 375 -640 567 -640 360 -500 375 -640 477 -426 640 -640 480 -640 427 -640 425 -500 392 -640 480 -640 482 -640 500 -640 480 -333 500 -640 427 -500 357 -640 424 -640 426 -480 640 -640 480 -640 426 -640 450 -640 360 -480 640 -480 640 -640 427 -640 393 -640 448 -640 480 -640 480 -480 640 -640 480 -427 640 -640 424 -640 557 -640 360 -640 480 -640 405 -640 480 -640 481 -500 495 -640 428 -640 428 -450 338 -640 408 -640 470 -640 480 -425 640 -640 480 -640 428 -640 480 -480 640 -500 334 -500 375 -640 488 -612 612 -640 379 -640 427 -640 480 -640 613 -489 640 -500 500 -480 640 -640 419 -476 640 -367 640 -640 480 -425 640 -640 427 -640 427 -640 480 -640 427 -640 426 -640 389 -500 332 -640 405 -640 480 -640 480 -500 377 -640 493 -640 480 -640 397 -480 640 -640 427 -640 426 -480 640 -640 360 -622 640 -640 426 -640 427 -640 427 -640 426 -544 640 -640 480 -640 427 -500 377 -640 427 -640 640 -640 480 -640 427 -640 480 -640 464 -612 612 -640 480 -640 522 -640 426 -640 427 -425 640 -500 375 -480 640 -640 377 -640 522 -568 320 -423 640 -500 375 -424 283 -428 640 -425 640 -640 479 -640 480 -640 420 -640 428 -640 480 -480 640 -612 612 -500 333 -640 640 -511 640 -640 429 -640 427 -640 640 -640 425 -640 360 -640 480 -630 640 -640 480 -640 428 -500 375 -640 431 -640 426 -612 612 -568 320 -427 640 -640 426 -640 426 -640 569 -339 500 -480 640 -640 480 -427 640 -640 426 -435 640 -640 536 -640 391 -640 480 -427 640 -640 480 -640 640 -640 427 -480 640 -640 490 -640 613 -640 427 -640 480 -640 427 -640 410 -640 428 -640 428 -640 444 -640 429 -640 480 -500 374 -640 426 -480 640 -640 427 -640 359 -427 640 -640 480 -640 427 -640 473 -500 375 -640 360 -500 375 -474 640 -427 640 -480 640 -640 480 -640 480 -640 480 -405 640 -640 428 -640 360 -414 640 -640 425 -640 269 -640 480 -640 480 -640 426 -640 480 -640 426 -640 400 -640 480 -640 480 -427 640 -640 480 -640 480 -640 480 -640 494 -640 411 -640 480 -375 500 -640 480 -640 461 -640 429 -640 480 -500 500 -500 333 -500 375 -640 427 -640 480 -640 480 -640 421 -640 426 -428 640 -640 481 -640 426 -640 480 -640 427 -627 640 -428 640 -640 414 -640 638 -500 375 -428 640 -161 240 -374 500 -480 640 -640 486 -500 375 -480 640 -640 141 -480 640 -640 424 -612 612 -500 333 -480 640 -428 640 -501 640 -480 640 -640 431 -500 334 -640 426 -640 427 -500 500 -640 480 -640 426 -447 640 -500 375 -640 478 -640 573 -640 427 -640 480 -640 419 -500 375 -640 480 -640 480 -543 640 -612 612 -640 480 -500 334 -500 334 -640 427 -640 427 -640 590 -612 612 -480 360 -640 541 -640 495 -640 480 -480 640 -640 425 -500 375 -640 427 -640 428 -640 480 -633 640 -376 500 -478 640 -640 425 -640 480 -640 480 -640 426 -375 500 -640 427 -640 427 -480 640 -375 500 -640 443 -640 425 -640 640 -375 500 -640 521 -640 521 -500 375 -500 375 -640 406 -640 427 -640 427 -640 429 -640 480 -640 480 -427 640 -640 429 -480 640 -640 428 -640 393 -640 480 -640 606 -612 612 -480 640 -500 333 -480 640 -480 640 -334 500 -640 427 -480 640 -640 427 -640 401 -426 640 -500 332 -640 428 -640 480 -500 327 -640 480 -640 480 -612 612 -375 500 -640 427 -640 426 -640 480 -427 640 -640 427 -640 427 -640 480 -640 518 -640 480 -500 464 -375 500 -640 480 -640 480 -500 500 -564 640 -500 375 -427 640 -427 640 -640 427 -640 480 -640 376 -640 480 -640 480 -500 375 -500 336 -640 433 -640 480 -640 425 -425 640 -640 480 -427 640 -640 480 -640 480 -640 359 -640 480 -480 640 -612 612 -640 427 -640 427 -640 480 -640 426 -640 425 -640 480 -640 480 -382 640 -640 427 -640 480 -375 500 -640 480 -640 411 -350 500 -640 640 -640 426 -640 429 -426 640 -640 480 -640 425 -640 480 -500 269 -640 412 -640 427 -640 427 -493 500 -640 428 -640 480 -640 427 -500 461 -640 427 -500 333 -640 480 -640 480 -426 640 -640 427 -640 480 -640 480 -640 427 -498 640 -640 457 -640 436 -640 640 -640 480 -500 375 -640 427 -640 480 -500 375 -500 334 -640 427 -640 299 -480 640 -428 640 -640 426 -382 640 -427 640 -640 428 -640 640 -640 427 -640 426 -320 480 -640 424 -640 346 -500 375 -640 480 -640 480 -640 427 -640 431 -424 284 -640 480 -640 500 -640 480 -640 400 -427 640 -427 640 -426 640 -640 428 -640 480 -480 640 -500 333 -488 640 -640 426 -333 500 -640 469 -640 480 -500 333 -640 638 -500 375 -640 426 -640 427 -640 360 -350 500 -480 640 -375 500 -480 640 -640 480 -640 602 -640 427 -640 480 -640 480 -640 402 -640 427 -640 392 -612 612 -640 480 -640 480 -598 397 -640 480 -640 480 -332 500 -640 480 -640 480 -640 425 -426 640 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -500 487 -640 480 -500 375 -640 427 -480 640 -640 478 -500 375 -640 480 -640 478 -427 640 -640 480 -640 473 -640 478 -480 640 -427 640 -640 480 -640 576 -640 427 -640 424 -640 407 -301 388 -331 500 -375 500 -640 480 -640 424 -640 400 -640 480 -640 427 -640 427 -640 426 -500 375 -640 481 -510 640 -640 480 -640 427 -640 427 -500 363 -500 333 -640 349 -640 401 -375 500 -571 640 -640 428 -500 400 -640 478 -640 480 -640 480 -640 483 -640 426 -640 480 -640 457 -640 425 -480 640 -612 612 -640 444 -500 416 -480 640 -640 486 -640 427 -640 480 -480 640 -640 480 -479 640 -448 640 -640 428 -640 480 -500 333 -640 480 -640 426 -640 480 -640 426 -640 480 -450 300 -640 459 -500 334 -640 424 -500 375 -640 429 -640 426 -640 442 -333 500 -640 480 -500 369 -640 480 -640 427 -640 480 -640 480 -480 640 -500 400 -640 480 -640 427 -640 428 -640 426 -640 457 -640 331 -640 427 -640 425 -640 480 -640 480 -640 480 -640 425 -340 500 -640 480 -640 624 -427 640 -640 430 -640 360 -640 480 -326 500 -640 426 -640 427 -640 427 -640 451 -640 427 -640 512 -640 361 -640 480 -640 299 -375 500 -427 640 -384 640 -640 480 -640 480 -375 500 -640 480 -500 332 -640 428 -640 410 -480 640 -640 427 -640 427 -640 480 -640 426 -640 427 -640 380 -428 640 -500 375 -500 333 -640 427 -480 640 -426 640 -640 427 -640 424 -640 426 -640 314 -640 424 -640 439 -640 399 -640 480 -428 640 -480 640 -427 640 -640 480 -500 375 -640 426 -640 427 -640 429 -500 454 -640 480 -640 480 -640 480 -390 640 -320 239 -640 425 -640 427 -640 426 -640 429 -451 500 -480 640 -480 640 -375 500 -413 640 -640 444 -480 640 -640 256 -640 480 -431 640 -640 480 -640 426 -640 480 -335 500 -640 423 -640 374 -427 640 -427 640 -640 355 -480 640 -480 640 -640 426 -640 427 -640 427 -640 480 -480 360 -640 480 -640 488 -500 375 -425 640 -640 480 -480 640 -640 425 -640 360 -640 480 -640 640 -640 470 -640 427 -500 375 -500 333 -640 480 -640 430 -500 375 -480 640 -500 286 -640 417 -612 612 -480 640 -640 427 -640 480 -498 640 -545 640 -640 353 -428 640 -427 640 -640 423 -500 375 -640 466 -640 561 -640 480 -640 480 -513 640 -640 480 -438 608 -640 480 -640 479 -527 640 -375 500 -479 640 -480 640 -640 576 -500 334 -640 421 -640 427 -375 500 -640 427 -333 500 -480 640 -640 427 -640 480 -640 427 -640 480 -640 426 -640 480 -640 427 -640 426 -640 432 -640 426 -640 480 -480 640 -427 640 -640 480 -640 480 -600 600 -360 480 -640 480 -640 427 -640 428 -608 640 -640 424 -640 480 -640 429 -555 640 -640 428 -640 427 -500 375 -478 640 -640 480 -640 481 -640 480 -640 480 -335 500 -500 447 -640 509 -640 457 -640 425 -640 480 -640 480 -640 428 -640 480 -640 425 -500 334 -640 427 -640 426 -380 500 -640 425 -640 480 -480 640 -640 480 -640 498 -640 480 -640 480 -493 640 -640 426 -640 480 -612 612 -500 375 -640 480 -640 426 -640 433 -640 480 -640 480 -640 480 -640 427 -640 360 -500 375 -640 428 -480 640 -640 480 -548 640 -640 426 -640 480 -640 480 -640 481 -640 476 -480 640 -500 333 -640 360 -640 480 -640 429 -640 426 -640 480 -612 612 -500 375 -481 640 -480 640 -375 500 -640 427 -640 510 -500 375 -640 458 -480 640 -640 480 -640 427 -600 600 -480 640 -640 429 -233 311 -551 640 -640 640 -640 428 -640 481 -640 480 -478 640 -500 333 -640 427 -438 640 -640 424 -640 420 -640 480 -640 480 -426 640 -640 478 -480 640 -425 640 -640 366 -500 385 -640 360 -640 480 -480 640 -550 378 -640 480 -640 428 -640 480 -640 424 -640 480 -480 640 -428 640 -427 640 -640 480 -640 480 -640 449 -500 467 -640 480 -640 480 -500 333 -640 480 -640 428 -640 480 -640 426 -480 640 -640 480 -640 479 -640 428 -640 427 -640 620 -640 480 -480 640 -640 480 -632 640 -640 427 -640 480 -640 426 -426 640 -640 480 -640 428 -469 640 -375 500 -640 480 -640 427 -640 480 -640 425 -375 500 -640 521 -333 500 -640 480 -640 360 -640 480 -500 375 -500 375 -640 426 -640 480 -640 426 -640 480 -427 640 -640 480 -500 347 -640 480 -640 427 -640 425 -375 500 -640 480 -480 640 -500 488 -375 500 -640 441 -500 333 -640 424 -480 640 -333 500 -629 640 -640 618 -478 640 -500 375 -640 480 -612 612 -640 360 -480 640 -500 375 -640 431 -640 427 -640 427 -640 612 -448 336 -640 427 -640 427 -640 408 -640 427 -640 427 -640 428 -640 480 -640 428 -640 480 -640 459 -640 360 -425 640 -480 640 -424 640 -500 375 -640 480 -333 500 -640 480 -640 397 -480 640 -640 480 -640 480 -640 425 -427 640 -640 427 -357 500 -640 480 -480 640 -480 640 -500 375 -500 375 -640 640 -640 429 -640 426 -640 480 -640 480 -427 640 -640 360 -640 480 -640 434 -640 427 -538 640 -640 428 -640 480 -640 480 -640 480 -480 640 -640 427 -500 474 -406 640 -423 640 -640 480 -640 423 -640 480 -640 427 -640 430 -500 383 -455 640 -600 400 -640 428 -640 480 -500 429 -640 426 -640 480 -426 640 -640 457 -640 390 -500 321 -640 480 -640 391 -479 640 -640 427 -640 429 -500 375 -640 480 -640 480 -640 640 -640 492 -640 480 -640 424 -640 360 -375 500 -500 239 -640 480 -375 500 -640 387 -480 640 -640 406 -640 427 -640 441 -640 409 -640 480 -640 480 -640 480 -424 640 -640 360 -640 427 -500 335 -500 375 -640 480 -640 480 -640 491 -640 428 -640 426 -640 256 -640 476 -640 403 -427 640 -640 480 -640 480 -427 640 -500 374 -427 640 -500 375 -438 640 -640 425 -478 640 -640 463 -640 346 -445 640 -620 413 -640 427 -500 375 -524 640 -640 478 -640 480 -640 480 -612 612 -640 480 -640 480 -640 428 -500 333 -640 569 -640 480 -640 480 -480 640 -407 640 -640 426 -612 612 -640 427 -415 640 -488 640 -640 480 -640 480 -640 480 -640 360 -640 502 -640 640 -640 480 -640 427 -640 438 -640 480 -428 640 -640 480 -640 640 -640 480 -640 536 -596 391 -640 427 -411 640 -640 427 -427 640 -640 480 -500 375 -640 300 -640 480 -500 333 -612 612 -640 480 -425 640 -500 334 -500 375 -640 480 -640 480 -640 359 -426 640 -500 375 -640 424 -640 427 -640 427 -640 426 -640 480 -640 480 -640 480 -640 424 -500 375 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -640 432 -640 427 -640 427 -640 480 -640 170 -500 364 -640 480 -640 480 -459 500 -333 500 -640 426 -480 640 -640 427 -640 427 -640 424 -640 480 -640 427 -640 427 -394 640 -640 427 -640 480 -640 427 -640 457 -640 513 -500 375 -640 480 -640 480 -424 640 -640 426 -640 429 -500 375 -640 428 -640 485 -480 640 -640 428 -500 375 -332 500 -640 400 -640 448 -500 375 -640 480 -640 427 -480 640 -640 420 -518 640 -640 426 -500 335 -640 480 -640 427 -500 375 -333 500 -640 480 -640 569 -480 640 -640 427 -640 433 -640 426 -320 400 -640 480 -640 427 -640 429 -640 480 -640 478 -640 480 -640 480 -640 480 -640 480 -472 640 -640 451 -640 425 -640 452 -612 612 -500 329 -640 480 -480 640 -640 480 -640 480 -640 478 -640 427 -334 500 -640 426 -428 640 -640 428 -640 427 -640 429 -640 434 -640 640 -640 480 -640 424 -640 427 -448 640 -480 640 -480 640 -480 640 -640 480 -500 370 -427 640 -640 424 -640 480 -569 640 -259 387 -640 480 -640 426 -640 425 -500 420 -640 427 -640 428 -640 427 -640 457 -640 359 -640 360 -389 500 -640 428 -640 427 -421 640 -640 480 -640 401 -480 640 -640 426 -360 640 -480 640 -480 640 -640 480 -640 480 -640 480 -375 500 -640 480 -479 640 -640 533 -640 428 -640 480 -640 426 -640 509 -426 640 -480 640 -640 480 -640 480 -640 427 -426 640 -640 425 -640 427 -500 375 -640 480 -423 640 -640 427 -640 428 -479 640 -480 640 -640 423 -426 640 -500 374 -428 640 -640 424 -640 428 -640 424 -640 480 -612 612 -500 333 -640 640 -500 345 -480 640 -640 464 -640 426 -640 480 -640 427 -640 374 -427 640 -640 428 -640 360 -640 640 -640 428 -640 481 -640 360 -640 480 -609 530 -428 640 -640 480 -640 427 -640 425 -640 480 -640 427 -480 640 -640 426 -640 389 -500 375 -640 427 -427 640 -640 480 -640 480 -332 500 -336 500 -640 427 -640 480 -640 316 -640 483 -425 640 -399 640 -640 480 -480 640 -640 640 -480 640 -640 427 -640 428 -640 423 -160 120 -640 480 -640 360 -640 480 -640 427 -500 421 -480 640 -425 640 -640 594 -640 480 -640 512 -500 243 -640 480 -500 375 -640 480 -640 427 -480 640 -640 426 -640 424 -639 640 -518 640 -640 479 -426 640 -640 430 -640 427 -640 466 -640 480 -640 480 -640 427 -427 640 -612 612 -480 640 -640 474 -500 375 -640 480 -640 480 -640 375 -640 473 -350 262 -640 427 -432 640 -472 640 -640 478 -640 427 -640 436 -640 427 -640 480 -640 428 -500 375 -427 640 -640 360 -427 640 -604 640 -640 480 -480 640 -640 427 -640 640 -478 640 -640 480 -640 426 -640 484 -640 427 -640 431 -640 477 -500 375 -640 480 -500 333 -500 375 -640 414 -480 640 -426 640 -427 640 -640 480 -500 333 -640 480 -500 333 -640 427 -640 480 -640 357 -428 640 -640 427 -640 480 -427 640 -640 427 -640 573 -640 427 -500 375 -490 500 -640 319 -640 480 -478 640 -640 469 -640 480 -500 313 -640 480 -480 640 -500 375 -640 218 -480 640 -640 426 -640 427 -640 427 -640 480 -480 640 -640 479 -640 428 -640 480 -480 640 -640 499 -427 640 -457 640 -640 361 -500 375 -640 417 -500 324 -640 480 -640 480 -640 427 -640 427 -640 425 -640 480 -364 500 -640 480 -640 640 -640 427 -640 425 -279 640 -480 640 -640 451 -640 331 -640 427 -478 640 -503 640 -640 480 -640 485 -426 640 -335 500 -640 479 -640 480 -640 480 -640 494 -640 474 -640 480 -640 359 -640 425 -480 640 -480 640 -640 526 -640 482 -640 480 -640 480 -640 427 -458 640 -640 404 -500 375 -640 427 -640 480 -500 356 -640 426 -640 480 -640 426 -500 375 -640 417 -640 435 -640 495 -640 427 -500 333 -640 480 -283 640 -640 480 -425 640 -640 425 -640 427 -640 398 -640 480 -640 480 -640 480 -640 424 -375 500 -500 341 -640 480 -480 640 -640 480 -640 427 -640 360 -640 426 -640 427 -640 360 -640 413 -640 480 -640 437 -640 480 -427 640 -513 640 -640 480 -640 480 -640 480 -640 425 -640 427 -404 342 -640 490 -640 426 -426 640 -392 640 -612 612 -333 500 -640 427 -640 429 -640 427 -640 480 -640 480 -640 424 -500 500 -480 640 -426 640 -640 425 -480 640 -640 427 -640 480 -480 640 -640 640 -640 480 -640 408 -500 334 -640 425 -480 640 -640 640 -448 640 -480 640 -500 375 -640 427 -640 427 -640 427 -640 480 -500 375 -640 480 -640 480 -640 427 -640 427 -640 425 -640 426 -640 425 -480 640 -640 480 -640 428 -640 480 -612 612 -523 640 -640 427 -612 612 -640 427 -500 332 -640 510 -640 424 -640 427 -480 640 -612 612 -480 640 -500 369 -427 640 -640 424 -640 427 -640 384 -427 640 -640 427 -640 480 -640 424 -640 480 -640 480 -500 333 -500 333 -640 480 -347 500 -500 375 -426 640 -500 375 -640 480 -476 376 -500 345 -375 500 -640 480 -480 640 -383 588 -640 427 -640 480 -452 640 -640 427 -640 480 -640 427 -640 480 -480 640 -640 480 -640 480 -427 640 -640 480 -640 480 -640 427 -640 564 -427 640 -426 640 -427 640 -640 392 -427 640 -640 425 -640 427 -640 427 -640 384 -640 427 -426 640 -640 427 -640 427 -640 584 -612 612 -480 640 -640 427 -640 480 -640 418 -453 640 -640 427 -640 480 -500 375 -427 640 -640 480 -640 360 -640 427 -640 427 -612 612 -640 427 -463 640 -500 375 -640 427 -640 480 -640 427 -640 359 -640 426 -480 640 -640 480 -640 480 -640 427 -464 640 -640 426 -640 427 -640 427 -640 424 -640 303 -640 419 -640 480 -640 480 -640 425 -500 375 -640 481 -640 476 -640 301 -480 640 -500 376 -640 480 -640 428 -640 428 -640 427 -640 480 -640 426 -383 640 -427 640 -640 426 -640 463 -500 375 -640 480 -480 640 -500 318 -640 583 -480 640 -640 427 -480 640 -427 640 -640 427 -640 425 -640 480 -500 375 -640 480 -480 640 -640 426 -640 360 -640 512 -640 428 -640 480 -500 375 -640 360 -640 480 -640 427 -340 500 -500 333 -427 640 -640 480 -640 480 -640 480 -427 640 -480 640 -640 396 -600 393 -640 427 -612 612 -480 640 -640 427 -640 480 -640 448 -640 427 -640 480 -640 478 -640 428 -640 188 -640 428 -500 426 -640 427 -480 640 -640 480 -640 426 -640 457 -640 480 -480 640 -640 481 -480 640 -640 427 -640 503 -640 427 -640 449 -640 480 -640 480 -640 469 -500 389 -640 426 -500 375 -640 427 -426 640 -480 640 -640 383 -640 425 -565 640 -640 480 -640 559 -640 480 -460 640 -640 480 -640 480 -640 480 -480 640 -640 428 -640 480 -640 427 -500 248 -357 500 -640 480 -640 480 -333 500 -480 360 -500 333 -640 564 -640 426 -480 640 -640 480 -640 480 -640 427 -640 426 -640 480 -426 640 -640 427 -425 640 -640 438 -640 427 -640 480 -640 480 -640 480 -480 640 -438 640 -426 640 -640 426 -640 411 -640 363 -500 375 -640 400 -640 509 -500 489 -640 427 -640 480 -500 333 -640 360 -500 332 -640 480 -640 396 -640 426 -640 480 -640 427 -640 427 -640 480 -500 375 -640 361 -640 427 -612 612 -213 640 -640 427 -427 640 -640 480 -640 480 -640 427 -375 500 -375 500 -640 480 -485 640 -640 388 -640 480 -500 375 -480 640 -480 640 -640 427 -640 427 -500 333 -612 612 -640 480 -640 427 -500 400 -640 426 -640 419 -640 426 -359 640 -500 332 -640 426 -640 480 -640 429 -640 360 -640 427 -640 426 -426 640 -427 640 -640 480 -640 480 -335 500 -640 486 -480 640 -427 640 -480 640 -640 424 -640 480 -640 480 -640 480 -640 548 -425 640 -640 480 -500 375 -640 426 -640 426 -640 426 -480 640 -640 426 -375 500 -640 427 -640 462 -640 451 -640 480 -640 480 -640 425 -612 612 -640 427 -640 426 -427 640 -640 426 -640 427 -640 610 -640 480 -480 640 -640 426 -640 480 -640 426 -480 640 -640 427 -640 477 -640 480 -640 480 -500 338 -640 458 -640 480 -640 359 -120 160 -640 481 -500 375 -426 640 -427 640 -500 400 -500 335 -640 427 -500 334 -640 425 -640 480 -640 480 -500 375 -640 480 -640 424 -400 500 -375 500 -480 640 -515 640 -480 640 -480 640 -640 480 -640 480 -640 480 -640 480 -640 480 -375 500 -480 640 -640 479 -200 189 -457 640 -640 480 -640 439 -500 322 -500 375 -480 640 -640 480 -640 480 -640 480 -427 640 -640 427 -640 480 -427 640 -500 324 -640 480 -640 480 -434 640 -640 265 -640 480 -640 425 -427 640 -640 427 -640 480 -640 480 -640 573 -640 480 -375 500 -640 428 -500 375 -640 480 -640 427 -473 640 -640 428 -480 640 -640 426 -640 306 -640 478 -640 427 -640 427 -427 640 -640 424 -512 640 -640 427 -579 640 -449 640 -427 640 -640 468 -640 480 -640 480 -640 425 -480 640 -640 480 -640 427 -640 640 -375 500 -640 428 -640 427 -640 480 -640 361 -640 480 -500 370 -640 428 -427 640 -640 480 -375 500 -640 480 -640 427 -640 478 -640 480 -640 427 -640 480 -640 425 -500 335 -640 493 -500 375 -640 426 -500 333 -640 480 -461 640 -500 375 -640 480 -640 480 -640 480 -640 480 -612 612 -640 480 -640 424 -640 427 -640 480 -500 375 -640 324 -640 429 -427 640 -528 363 -500 333 -640 512 -480 640 -640 480 -500 375 -640 480 -480 640 -640 480 -480 640 -640 480 -640 427 -640 450 -640 424 -640 480 -482 640 -640 480 -480 640 -640 427 -338 450 -640 425 -640 544 -640 427 -640 428 -640 480 -640 478 -500 375 -640 480 -640 427 -640 480 -640 480 -500 375 -480 640 -640 428 -640 479 -480 640 -375 500 -500 388 -480 640 -640 480 -640 427 -640 360 -640 480 -640 424 -640 396 -640 427 -120 160 -640 457 -640 480 -458 640 -640 425 -640 480 -640 480 -640 360 -640 480 -480 640 -480 640 -640 434 -640 480 -480 640 -640 429 -640 427 -464 500 -640 543 -640 428 -640 411 -640 427 -640 360 -640 528 -640 443 -640 480 -640 480 -640 424 -640 410 -500 333 -512 640 -500 346 -640 480 -640 480 -428 640 -640 429 -640 427 -640 480 -640 439 -500 375 -640 426 -640 480 -640 480 -640 427 -500 423 -640 427 -640 427 -640 424 -640 480 -640 360 -500 333 -640 480 -640 427 -640 384 -425 640 -640 480 -640 480 -640 481 -640 426 -426 640 -480 640 -427 640 -640 427 -478 640 -640 341 -640 395 -640 480 -500 333 -640 427 -500 436 -640 360 -480 640 -500 428 -640 427 -640 560 -640 427 -640 480 -640 481 -640 427 -640 481 -612 612 -427 640 -640 480 -640 394 -640 360 -640 427 -427 640 -640 480 -360 640 -375 500 -640 429 -640 426 -640 480 -640 360 -480 640 -640 383 -640 427 -640 480 -427 640 -640 427 -480 640 -640 480 -480 640 -425 640 -640 480 -612 612 -640 453 -640 425 -426 640 -640 480 -640 480 -640 361 -640 427 -640 480 -640 480 -428 640 -640 480 -640 640 -425 640 -640 428 -640 478 -640 426 -500 333 -500 488 -640 285 -500 326 -640 360 -640 480 -640 428 -640 480 -428 640 -640 524 -640 488 -640 480 -612 612 -450 338 -640 428 -640 426 -526 640 -640 428 -483 640 -640 480 -640 426 -640 427 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -640 427 -640 571 -640 427 -640 480 -640 427 -640 480 -640 425 -375 500 -640 428 -609 407 -333 500 -640 427 -500 333 -640 640 -433 640 -640 480 -640 392 -640 360 -640 480 -427 640 -480 268 -640 480 -500 281 -600 450 -500 393 -640 480 -478 640 -640 426 -640 413 -640 480 -640 427 -640 425 -640 480 -640 480 -640 427 -443 640 -640 480 -424 640 -640 427 -640 426 -640 632 -640 397 -500 375 -640 426 -640 480 -640 480 -640 428 -500 332 -640 427 -640 427 -640 480 -640 399 -414 640 -612 612 -640 424 -433 640 -640 418 -428 640 -480 640 -426 640 -375 500 -480 640 -640 426 -334 500 -640 480 -481 640 -640 500 -320 240 -640 427 -500 333 -500 333 -427 640 -640 480 -640 480 -640 427 -336 500 -480 640 -640 480 -640 425 -640 480 -500 375 -640 427 -457 640 -640 441 -640 427 -640 481 -640 426 -640 480 -640 427 -612 612 -478 640 -640 427 -500 333 -640 480 -640 428 -640 428 -640 460 -640 480 -500 333 -480 640 -640 633 -640 640 -457 640 -480 640 -500 466 -500 375 -640 425 -500 375 -500 375 -427 640 -640 512 -500 333 -640 427 -640 428 -640 480 -640 426 -640 480 -426 640 -640 427 -640 426 -640 427 -500 282 -640 428 -425 640 -479 640 -640 427 -427 640 -424 640 -448 640 -640 480 -640 480 -640 430 -344 500 -500 375 -640 330 -640 427 -640 445 -640 480 -481 640 -640 480 -640 426 -640 427 -640 427 -640 431 -640 427 -640 425 -640 425 -640 480 -640 493 -500 375 -575 640 -640 480 -640 426 -640 426 -640 428 -640 480 -640 401 -480 640 -640 480 -640 640 -612 612 -427 640 -640 489 -446 640 -480 640 -640 480 -427 640 -640 427 -428 640 -640 478 -379 500 -640 428 -640 429 -640 475 -640 428 -375 500 -490 500 -640 480 -640 426 -425 640 -480 640 -426 640 -595 640 -640 480 -640 480 -500 333 -640 480 -640 424 -640 480 -640 478 -480 640 -640 480 -640 480 -640 428 -640 419 -640 480 -640 468 -640 480 -640 428 -640 427 -480 640 -640 480 -640 478 -640 426 -640 425 -640 640 -480 640 -640 480 -640 427 -424 640 -640 427 -640 472 -640 480 -640 426 -640 480 -480 640 -640 640 -480 640 -425 640 -640 480 -640 431 -640 428 -640 439 -425 640 -480 640 -640 480 -640 601 -640 428 -612 612 -640 480 -640 425 -640 480 -640 424 -508 640 -640 426 -640 499 -640 480 -640 480 -640 480 -640 334 -612 612 -427 640 -640 427 -640 426 -444 640 -640 428 -640 428 -500 342 -640 356 -640 427 -640 480 -640 480 -640 427 -640 480 -612 612 -375 500 -640 480 -640 480 -450 640 -640 427 -640 277 -640 480 -640 620 -426 640 -480 640 -640 480 -541 640 -500 361 -640 480 -640 427 -425 640 -640 427 -332 500 -640 244 -640 480 -640 480 -640 426 -480 640 -640 362 -640 424 -489 640 -640 452 -640 513 -640 512 -640 427 -640 480 -640 480 -640 429 -640 427 -640 427 -640 424 -640 427 -479 640 -640 480 -640 480 -500 375 -612 612 -480 640 -480 640 -640 480 -500 325 -640 480 -640 427 -640 425 -425 640 -640 480 -612 612 -640 425 -640 432 -640 427 -640 427 -479 640 -428 640 -500 334 -640 480 -640 480 -427 640 -480 640 -640 427 -426 640 -640 428 -640 430 -500 375 -640 480 -640 480 -640 427 -612 612 -229 123 -640 426 -500 380 -640 480 -640 360 -481 640 -640 451 -457 640 -640 480 -375 500 -500 334 -640 428 -500 375 -640 430 -640 480 -640 427 -640 480 -640 634 -612 612 -480 640 -426 640 -500 333 -640 480 -640 480 -640 426 -640 480 -500 375 -480 640 -375 500 -640 480 -480 640 -640 458 -640 426 -424 640 -426 640 -640 424 -612 612 -640 427 -640 424 -640 427 -497 640 -640 427 -640 480 -640 446 -640 443 -640 427 -640 640 -500 333 -640 360 -640 426 -333 500 -640 426 -640 427 -612 612 -500 375 -612 612 -640 427 -480 640 -500 333 -640 480 -640 480 -640 421 -640 480 -640 480 -640 480 -500 375 -640 427 -500 375 -640 350 -611 640 -478 640 -332 500 -500 316 -640 480 -640 510 -640 427 -640 480 -640 427 -640 486 -340 470 -480 640 -480 640 -427 640 -640 426 -640 590 -640 480 -640 480 -640 428 -640 427 -500 375 -427 640 -640 458 -640 583 -500 375 -640 480 -500 375 -640 400 -640 425 -640 480 -500 333 -640 408 -640 427 -427 640 -339 500 -275 183 -375 500 -640 478 -640 478 -425 640 -384 640 -640 478 -640 425 -500 345 -640 427 -640 427 -480 640 -500 375 -640 428 -640 418 -640 480 -640 480 -426 640 -640 480 -426 640 -640 640 -391 640 -500 375 -640 480 -640 424 -640 478 -519 640 -551 640 -500 375 -640 480 -612 612 -640 426 -480 640 -500 334 -640 480 -640 640 -402 500 -640 480 -612 612 -500 333 -500 286 -432 640 -640 362 -640 480 -640 480 -640 427 -640 428 -640 426 -640 427 -500 332 -640 428 -426 640 -612 612 -333 500 -640 427 -640 640 -640 480 -640 480 -500 375 -640 457 -500 334 -640 427 -500 500 -640 424 -480 640 -480 640 -640 358 -640 480 -640 480 -500 375 -640 480 -500 447 -311 500 -480 640 -640 359 -640 480 -640 228 -640 480 -640 469 -640 480 -500 375 -427 640 -640 360 -640 427 -640 475 -640 480 -640 480 -640 481 -500 375 -640 440 -640 640 -500 375 -428 640 -640 427 -640 480 -640 425 -640 500 -640 427 -640 427 -640 446 -500 375 -640 480 -424 640 -640 480 -500 353 -640 360 -640 433 -424 640 -640 427 -480 640 -640 480 -596 640 -480 640 -640 480 -640 480 -640 427 -640 480 -478 640 -640 360 -640 457 -640 429 -285 340 -640 426 -640 440 -446 640 -640 480 -640 480 -640 426 -480 640 -640 640 -640 480 -640 427 -640 480 -480 640 -640 428 -375 500 -640 480 -640 423 -500 375 -640 480 -640 478 -476 640 -640 480 -640 640 -640 443 -480 640 -640 513 -640 480 -500 325 -640 480 -358 640 -423 640 -640 360 -640 395 -599 640 -640 425 -640 480 -640 607 -640 480 -640 480 -480 640 -427 640 -634 640 -640 480 -500 400 -640 425 -640 428 -640 480 -640 480 -640 480 -640 425 -640 383 -640 360 -640 480 -640 480 -640 425 -640 480 -600 376 -640 427 -480 640 -640 424 -612 612 -640 426 -640 425 -640 480 -480 640 -640 425 -500 408 -640 424 -500 284 -640 481 -640 427 -640 428 -640 478 -640 480 -640 480 -640 427 -480 640 -427 640 -640 480 -428 640 -500 283 -640 441 -640 426 -640 418 -640 427 -480 640 -640 426 -640 426 -640 480 -640 442 -640 427 -640 426 -640 419 -640 480 -640 478 -640 476 -640 427 -640 426 -399 640 -640 361 -640 426 -640 427 -427 640 -640 459 -640 480 -640 360 -333 500 -428 640 -640 480 -640 441 -428 640 -480 640 -640 480 -427 640 -640 480 -640 426 -333 500 -640 480 -640 526 -640 480 -486 640 -423 640 -640 361 -427 640 -640 480 -640 480 -640 425 -640 428 -640 428 -640 480 -640 427 -480 640 -379 279 -480 640 -640 506 -640 480 -640 513 -640 458 -333 500 -640 429 -640 360 -640 427 -500 375 -640 480 -500 332 -612 612 -640 480 -640 476 -640 374 -500 394 -640 480 -427 640 -640 427 -640 425 -430 640 -425 640 -640 410 -429 640 -640 424 -480 640 -640 427 -640 425 -640 640 -640 360 -640 427 -640 490 -500 375 -333 500 -640 517 -640 480 -640 427 -500 350 -400 500 -640 480 -500 338 -640 433 -640 388 -426 640 -640 348 -640 480 -640 492 -640 481 -640 318 -640 427 -427 640 -640 425 -640 480 -640 513 -500 332 -480 640 -640 640 -640 480 -640 444 -640 616 -640 480 -500 333 -500 408 -500 411 -640 480 -640 360 -480 640 -640 427 -640 433 -640 427 -640 426 -479 640 -480 640 -480 640 -426 640 -640 430 -640 427 -480 640 -640 426 -640 369 -640 480 -375 500 -640 480 -640 425 -504 640 -640 480 -640 480 -640 426 -640 430 -640 480 -500 400 -640 427 -640 480 -640 427 -640 489 -640 360 -427 640 -640 480 -640 480 -640 480 -350 219 -640 480 -640 413 -640 480 -640 401 -425 640 -640 425 -640 480 -640 427 -640 414 -640 424 -640 480 -425 640 -640 285 -640 480 -640 322 -640 427 -640 427 -640 427 -640 428 -640 457 -640 480 -500 391 -640 404 -640 611 -640 390 -513 640 -640 360 -640 496 -640 480 -640 427 -640 427 -640 480 -500 234 -640 425 -640 360 -424 640 -640 512 -640 427 -640 426 -640 427 -640 480 -500 374 -640 428 -640 526 -640 428 -640 480 -426 640 -640 427 -611 640 -640 383 -640 457 -640 427 -640 382 -640 427 -640 426 -640 480 -640 477 -375 500 -478 640 -640 480 -640 480 -500 400 -640 461 -640 480 -640 417 -640 425 -427 640 -640 439 -480 640 -640 640 -427 640 -612 612 -464 640 -640 427 -480 640 -640 360 -640 480 -640 428 -640 425 -640 543 -640 426 -640 423 -640 426 -640 319 -500 375 -640 427 -432 500 -375 500 -640 441 -426 640 -640 406 -640 426 -640 480 -480 640 -640 480 -640 424 -640 428 -640 427 -640 461 -426 640 -500 375 -640 480 -640 428 -640 480 -500 375 -640 426 -640 640 -480 640 -640 427 -375 500 -500 333 -640 480 -375 500 -480 640 -500 334 -640 480 -640 427 -640 424 -640 426 -640 628 -640 491 -640 426 -640 427 -480 640 -640 480 -640 425 -640 424 -640 427 -640 427 -640 480 -640 513 -640 426 -640 480 -640 427 -640 461 -640 425 -640 598 -640 361 -640 480 -640 427 -500 317 -640 480 -640 519 -640 480 -640 427 -500 375 -640 480 -425 640 -640 427 -426 640 -480 640 -480 640 -640 427 -640 427 -457 640 -640 359 -640 355 -640 480 -640 427 -426 640 -640 427 -427 640 -640 428 -640 426 -500 334 -425 640 -640 480 -640 480 -640 480 -500 334 -500 344 -640 640 -640 480 -640 480 -640 423 -640 480 -333 500 -640 426 -640 427 -500 375 -480 640 -640 508 -640 480 -500 375 -600 600 -640 480 -385 500 -434 640 -640 480 -480 640 -426 640 -640 427 -640 512 -512 640 -640 427 -427 640 -640 474 -640 426 -480 640 -640 426 -500 375 -427 640 -475 640 -640 360 -640 480 -640 427 -640 479 -375 500 -640 427 -640 457 -394 500 -640 422 -500 375 -640 480 -640 480 -427 640 -640 427 -640 498 -640 480 -480 640 -640 374 -640 480 -500 412 -500 335 -640 439 -640 516 -640 427 -640 426 -402 500 -500 364 -500 333 -640 480 -438 640 -425 640 -493 500 -480 640 -640 426 -640 640 -640 349 -640 480 -427 640 -640 480 -640 512 -400 400 -375 500 -640 427 -640 424 -500 375 -640 426 -640 429 -640 427 -640 426 -480 640 -500 375 -640 428 -640 480 -427 640 -640 428 -640 480 -640 427 -640 480 -500 372 -640 480 -640 480 -640 480 -640 360 -640 480 -640 480 -640 427 -640 426 -640 480 -640 640 -640 424 -640 480 -640 427 -640 169 -427 640 -640 478 -640 427 -462 308 -426 640 -640 361 -640 427 -500 232 -640 427 -640 457 -640 427 -500 375 -640 427 -640 426 -640 494 -427 640 -640 314 -640 480 -640 427 -473 640 -640 480 -640 480 -640 427 -640 369 -640 301 -640 427 -424 640 -640 481 -640 480 -640 427 -640 478 -640 480 -640 426 -640 427 -640 427 -640 480 -640 360 -480 640 -640 439 -640 480 -640 454 -640 401 -640 458 -640 480 -640 480 -640 414 -640 480 -640 496 -640 424 -640 480 -640 480 -387 500 -640 480 -640 379 -640 457 -425 640 -640 426 -640 424 -120 120 -640 427 -640 597 -640 480 -640 458 -640 426 -640 427 -640 427 -480 640 -640 426 -500 333 -640 427 -640 380 -427 640 -500 333 -480 640 -640 428 -640 428 -640 360 -640 429 -500 387 -371 500 -425 640 -640 480 -640 479 -640 480 -640 480 -640 427 -640 480 -640 478 -457 640 -640 429 -359 640 -500 375 -640 425 -500 375 -640 427 -359 240 -426 640 -612 612 -640 480 -612 612 -640 427 -640 478 -375 500 -480 640 -640 426 -479 640 -640 429 -640 384 -640 434 -500 332 -640 489 -640 427 -426 640 -640 466 -412 640 -478 640 -319 500 -640 427 -612 612 -640 418 -640 427 -640 426 -333 500 -500 375 -640 280 -612 612 -640 639 -640 480 -640 360 -640 456 -640 427 -426 640 -640 428 -501 640 -426 640 -640 428 -640 480 -640 478 -500 375 -640 360 -375 500 -640 388 -357 500 -640 480 -480 640 -496 640 -640 427 -612 612 -480 640 -508 337 -480 640 -640 368 -640 420 -300 500 -640 427 -612 612 -640 480 -500 375 -500 375 -412 317 -640 427 -640 425 -640 428 -480 640 -640 429 -380 640 -500 375 -640 425 -480 640 -640 480 -640 423 -640 480 -333 500 -411 640 -426 640 -436 640 -640 501 -640 427 -500 375 -640 512 -640 480 -640 506 -640 426 -640 427 -589 640 -480 640 -640 426 -500 375 -640 427 -640 426 -428 640 -640 480 -640 474 -500 333 -640 480 -480 640 -640 398 -640 425 -640 454 -640 480 -479 640 -640 427 -640 425 -612 612 -640 480 -500 375 -640 421 -640 514 -612 612 -640 480 -640 425 -500 468 -640 427 -480 640 -640 480 -640 480 -640 339 -424 640 -290 595 -480 640 -640 427 -480 640 -640 427 -500 332 -426 640 -640 425 -500 282 -480 640 -500 375 -640 514 -640 480 -640 426 -640 480 -640 480 -375 500 -640 427 -640 480 -640 426 -640 427 -500 375 -511 640 -640 427 -427 640 -640 480 -640 480 -446 552 -640 427 -640 426 -640 427 -640 427 -500 375 -640 480 -357 500 -640 479 -480 640 -640 428 -640 480 -480 640 -640 480 -640 480 -640 467 -640 480 -640 480 -640 426 -500 375 -513 640 -640 480 -640 480 -375 500 -640 427 -640 448 -640 480 -640 480 -480 640 -640 480 -640 427 -640 457 -640 425 -427 640 -480 640 -640 425 -640 427 -640 480 -640 640 -640 400 -612 612 -640 428 -425 640 -500 332 -640 426 -640 480 -640 480 -640 535 -640 427 -500 375 -640 480 -640 480 -480 640 -640 480 -640 480 -640 427 -425 640 -480 640 -640 480 -640 516 -640 427 -640 480 -640 418 -501 640 -640 480 -375 500 -640 424 -375 500 -480 640 -640 412 -640 426 -640 480 -640 467 -640 640 -640 480 -640 428 -640 480 -375 500 -640 431 -425 640 -478 640 -640 483 -640 480 -640 480 -640 360 -640 480 -427 640 -640 480 -500 375 -640 426 -500 334 -640 400 -334 500 -640 427 -640 428 -640 480 -640 427 -500 375 -640 480 -640 426 -640 480 -500 373 -401 500 -427 640 -640 458 -640 427 -640 427 -640 428 -640 427 -640 427 -612 612 -640 480 -500 176 -640 480 -480 640 -640 480 -565 425 -640 427 -640 480 -640 427 -386 640 -500 375 -500 375 -640 579 -640 457 -640 640 -640 442 -612 612 -640 480 -480 640 -640 480 -640 425 -640 427 -500 334 -427 640 -640 427 -480 640 -640 427 -640 480 -500 375 -640 480 -640 480 -640 362 -500 188 -640 480 -375 500 -640 480 -640 480 -640 427 -640 505 -640 480 -640 426 -427 640 -640 426 -640 480 -500 375 -640 427 -640 640 -640 424 -640 480 -640 480 -612 612 -640 427 -332 500 -640 437 -640 427 -640 427 -640 360 -480 640 -500 375 -640 427 -640 569 -640 440 -640 427 -500 375 -640 391 -640 426 -640 388 -640 427 -640 480 -640 428 -640 533 -640 426 -640 411 -640 480 -640 478 -640 425 -640 427 -480 640 -640 480 -426 640 -640 427 -640 425 -375 500 -640 567 -640 424 -640 335 -500 368 -640 480 -500 365 -640 373 -640 480 -500 375 -401 479 -427 640 -500 375 -640 428 -640 480 -640 480 -640 480 -500 500 -640 383 -640 427 -640 425 -640 480 -640 480 -640 480 -640 376 -480 640 -640 359 -640 427 -640 506 -640 513 -480 640 -640 427 -640 480 -640 428 -480 640 -640 573 -500 244 -640 480 -640 484 -640 480 -640 428 -640 478 -640 386 -426 640 -640 480 -640 480 -640 427 -499 640 -640 480 -640 480 -640 480 -468 640 -640 426 -640 426 -427 640 -428 640 -640 476 -640 480 -640 481 -640 353 -640 409 -640 640 -640 426 -640 431 -640 480 -640 453 -640 427 -640 480 -640 480 -480 640 -640 486 -640 427 -640 341 -640 396 -640 427 -427 640 -427 640 -640 427 -424 640 -500 333 -640 480 -640 426 -640 570 -470 640 -500 261 -640 394 -640 478 -640 427 -640 427 -640 427 -640 428 -480 640 -640 426 -640 480 -640 425 -375 500 -640 533 -640 480 -426 640 -626 640 -500 333 -375 500 -640 427 -640 480 -640 427 -640 427 -640 453 -375 500 -480 640 -640 427 -635 640 -427 640 -640 480 -640 392 -640 640 -427 640 -500 375 -640 427 -640 480 -640 426 -640 425 -640 640 -640 480 -640 480 -480 640 -375 500 -500 344 -612 612 -640 428 -640 480 -640 443 -640 427 -640 480 -427 640 -427 640 -640 480 -427 640 -428 640 -640 360 -640 411 -500 374 -640 489 -612 612 -640 480 -640 427 -640 480 -640 480 -640 478 -480 640 -640 424 -640 499 -640 366 -640 480 -640 426 -640 427 -419 640 -640 480 -640 480 -640 427 -480 640 -500 333 -640 262 -640 507 -640 480 -478 640 -500 357 -640 480 -480 640 -640 480 -500 359 -615 459 -426 640 -612 612 -640 427 -640 480 -640 425 -640 480 -640 440 -640 426 -427 640 -640 480 -640 640 -500 375 -640 427 -332 500 -640 360 -640 465 -640 538 -640 480 -640 426 -640 480 -640 480 -500 333 -640 466 -375 500 -480 640 -480 640 -443 640 -500 334 -640 480 -640 350 -640 427 -500 375 -539 640 -640 427 -640 480 -427 640 -640 427 -640 281 -476 640 -640 480 -640 480 -640 444 -640 480 -640 480 -640 427 -424 640 -640 427 -640 545 -425 640 -640 427 -640 480 -640 476 -640 360 -425 640 -640 299 -640 480 -640 480 -640 427 -429 640 -500 333 -427 640 -640 458 -426 640 -640 480 -640 480 -427 640 -427 640 -640 480 -640 479 -444 640 -640 427 -640 427 -480 640 -640 373 -640 640 -640 427 -640 506 -640 424 -640 480 -500 378 -640 480 -640 426 -480 640 -428 640 -425 640 -640 480 -640 480 -640 438 -500 375 -419 640 -640 473 -640 480 -640 426 -640 334 -640 385 -427 640 -640 337 -640 640 -640 426 -358 640 -640 427 -640 411 -480 640 -640 480 -640 425 -640 427 -640 480 -640 289 -640 454 -640 512 -640 427 -640 342 -640 429 -640 640 -640 480 -640 480 -640 427 -640 480 -640 480 -640 425 -640 480 -500 333 -500 406 -427 640 -375 500 -427 640 -640 480 -640 427 -640 478 -640 426 -640 427 -640 425 -428 640 -500 375 -640 428 -640 480 -327 500 -480 640 -640 426 -640 428 -640 426 -640 480 -640 480 -431 640 -531 640 -480 640 -480 640 -640 424 -640 402 -640 427 -640 480 -640 400 -640 480 -640 426 -427 640 -640 426 -640 449 -640 427 -500 333 -375 500 -500 375 -639 640 -480 640 -640 480 -640 499 -640 480 -476 640 -427 640 -640 480 -500 375 -640 426 -640 480 -640 427 -437 640 -640 427 -640 526 -640 428 -640 480 -640 425 -640 480 -640 427 -640 382 -640 427 -640 425 -478 640 -640 427 -640 488 -640 427 -640 360 -640 427 -640 478 -217 289 -640 480 -640 427 -640 425 -640 480 -640 455 -640 480 -640 480 -375 500 -440 640 -640 292 -512 640 -409 640 -640 480 -500 333 -640 480 -640 480 -640 480 -640 428 -488 640 -640 427 -640 428 -640 424 -418 640 -640 509 -427 640 -333 500 -480 640 -640 376 -612 612 -427 640 -426 640 -640 424 -640 480 -640 480 -640 427 -426 640 -447 640 -640 480 -480 640 -500 281 -429 640 -480 640 -640 480 -640 427 -640 427 -480 640 -640 480 -640 480 -500 333 -500 375 -640 478 -427 640 -640 471 -640 640 -427 640 -640 427 -640 478 -640 480 -640 430 -640 426 -640 395 -480 640 -640 425 -294 196 -640 427 -640 480 -500 263 -500 319 -640 480 -640 428 -640 602 -640 426 -425 640 -500 375 -500 400 -480 640 -465 640 -640 428 -427 640 -333 500 -640 480 -640 480 -640 426 -640 498 -480 640 -640 480 -640 480 -640 480 -640 480 -425 640 -640 480 -640 425 -426 640 -612 612 -640 476 -500 375 -480 640 -640 427 -427 640 -640 480 -640 480 -640 480 -428 640 -480 640 -640 426 -640 480 -640 480 -434 640 -480 640 -640 394 -640 478 -480 640 -500 375 -425 640 -640 480 -640 480 -479 640 -500 400 -480 640 -640 480 -612 612 -640 360 -375 500 -480 640 -640 480 -640 427 -427 640 -500 375 -375 500 -426 640 -640 480 -500 375 -640 480 -640 427 -480 640 -300 196 -193 272 -500 333 -500 375 -332 640 -640 480 -640 400 -425 640 -640 427 -500 333 -417 500 -640 415 -640 480 -166 221 -640 426 -640 427 -640 480 -480 640 -640 480 -424 640 -500 366 -640 427 -500 334 -425 640 -640 480 -500 375 -640 427 -640 480 -640 427 -640 425 -640 534 -387 640 -457 640 -480 640 -640 640 -640 426 -640 446 -640 393 -640 453 -640 433 -640 480 -500 357 -500 430 -640 428 -640 427 -427 640 -640 382 -640 408 -640 512 -640 480 -375 500 -640 429 -640 480 -640 480 -480 640 -640 427 -640 480 -640 458 -427 640 -500 375 -500 375 -640 427 -640 480 -594 640 -640 480 -480 640 -640 471 -640 480 -640 427 -640 361 -640 427 -640 427 -640 640 -480 640 -640 480 -640 480 -500 327 -640 427 -640 483 -375 500 -500 323 -640 480 -640 428 -353 378 -640 480 -640 480 -427 640 -640 480 -640 427 -410 500 -480 640 -640 480 -640 428 -640 429 -640 427 -640 478 -612 612 -640 427 -640 463 -640 480 -640 480 -640 427 -428 640 -640 480 -480 640 -640 421 -640 480 -640 427 -480 640 -500 400 -640 481 -640 548 -480 640 -375 500 -612 612 -640 427 -500 333 -640 427 -640 478 -500 375 -640 480 -640 360 -500 375 -640 430 -500 344 -500 375 -427 640 -640 428 -500 337 -640 360 -427 640 -640 424 -500 375 -640 480 -640 433 -500 327 -427 640 -480 640 -480 640 -640 480 -640 220 -640 486 -640 428 -640 480 -365 640 -427 640 -480 640 -640 480 -640 512 -480 640 -424 640 -640 480 -500 375 -500 375 -640 433 -640 426 -640 425 -480 640 -640 480 -640 453 -640 480 -640 638 -426 640 -375 500 -640 426 -640 360 -640 424 -640 480 -624 640 -640 480 -427 640 -335 500 -427 640 -640 480 -640 424 -378 500 -640 350 -449 640 -427 640 -640 426 -426 640 -427 640 -640 637 -375 500 -502 640 -640 426 -640 376 -425 640 -424 640 -640 480 -612 612 -640 427 -500 333 -640 480 -480 640 -640 480 -613 640 -375 500 -640 480 -640 428 -640 426 -640 480 -640 466 -640 435 -640 309 -640 425 -640 425 -640 428 -500 335 -427 640 -480 640 -466 640 -480 640 -640 480 -428 640 -640 434 -640 434 -640 426 -375 500 -480 640 -640 428 -640 480 -640 427 -640 480 -640 426 -640 463 -426 640 -640 441 -640 480 -427 640 -500 394 -482 640 -640 466 -426 640 -532 640 -640 428 -480 640 -640 426 -640 412 -500 375 -500 375 -640 426 -386 640 -640 480 -640 480 -640 426 -640 426 -640 480 -500 352 -640 640 -640 480 -480 640 -640 425 -640 640 -640 427 -640 433 -427 640 -427 640 -640 480 -640 480 -500 375 -500 375 -640 428 -500 345 -426 640 -640 480 -640 480 -640 427 -640 419 -640 480 -640 425 -500 375 -640 480 -640 480 -482 640 -640 427 -640 424 -640 470 -500 333 -640 427 -640 430 -640 480 -640 480 -640 480 -640 425 -640 424 -556 640 -640 479 -640 480 -640 427 -640 480 -500 375 -640 480 -640 429 -378 640 -640 426 -480 640 -612 612 -333 500 -640 411 -640 353 -612 612 -640 480 -640 425 -640 366 -480 640 -640 427 -640 480 -640 480 -427 640 -640 428 -457 640 -640 480 -640 424 -478 640 -640 480 -640 480 -640 425 -640 424 -640 479 -640 480 -640 360 -640 640 -421 640 -427 640 -640 481 -640 480 -427 640 -427 640 -640 480 -640 427 -640 427 -640 428 -500 375 -640 428 -640 480 -612 612 -500 375 -427 640 -500 375 -640 480 -640 427 -640 480 -480 640 -640 432 -640 427 -640 425 -640 480 -427 640 -640 361 -640 427 -640 425 -480 640 -478 640 -640 425 -480 640 -427 640 -427 640 -640 427 -487 640 -427 640 -480 640 -640 525 -428 500 -640 439 -500 375 -375 500 -458 640 -640 480 -640 423 -640 480 -640 480 -640 593 -640 480 -640 618 -640 392 -600 410 -640 427 -500 281 -640 480 -640 490 -640 480 -333 500 -640 640 -360 640 -427 640 -428 640 -401 600 -640 396 -640 480 -480 640 -640 480 -640 453 -640 438 -500 397 -517 640 -640 426 -640 426 -640 631 -480 640 -480 640 -640 480 -640 454 -480 640 -480 640 -512 640 -640 427 -640 480 -500 375 -588 640 -640 480 -640 480 -640 427 -640 480 -640 640 -411 640 -480 640 -640 480 -640 425 -426 640 -640 428 -612 612 -640 427 -426 640 -427 640 -640 428 -640 426 -640 425 -640 425 -500 381 -640 480 -640 392 -543 640 -480 640 -480 640 -550 245 -640 480 -640 480 -640 478 -334 640 -640 376 -640 427 -640 430 -500 326 -640 426 -500 375 -333 500 -527 640 -364 640 -640 480 -640 433 -640 427 -457 640 -640 480 -640 480 -640 506 -640 523 -640 425 -640 480 -640 480 -640 391 -640 221 -427 640 -355 500 -640 433 -640 480 -640 425 -640 377 -640 480 -640 425 -640 425 -640 427 -427 640 -640 427 -640 402 -640 457 -500 375 -640 426 -640 518 -640 640 -640 383 -640 427 -427 640 -500 375 -640 480 -428 640 -428 640 -640 480 -357 500 -640 480 -500 375 -640 515 -640 480 -640 360 -640 480 -500 333 -640 480 -240 360 -640 480 -640 443 -640 504 -640 480 -640 480 -465 640 -421 640 -640 480 -640 480 -640 480 -471 640 -640 480 -640 431 -640 425 -500 319 -640 411 -500 375 -640 426 -640 469 -640 427 -640 480 -640 480 -640 426 -500 333 -640 480 -640 366 -500 375 -640 480 -640 383 -640 480 -250 167 -640 427 -640 480 -640 424 -480 640 -500 375 -640 480 -640 480 -640 426 -640 427 -640 427 -640 404 -640 426 -427 640 -426 640 -640 359 -500 375 -640 429 -640 427 -640 480 -640 480 -328 500 -640 405 -478 640 -640 427 -500 333 -640 554 -449 640 -640 426 -640 480 -640 425 -640 480 -640 427 -640 426 -612 612 -640 320 -428 640 -462 640 -640 349 -640 427 -640 426 -640 427 -640 427 -359 640 -640 481 -640 429 -640 427 -427 640 -640 480 -640 359 -640 432 -640 427 -427 640 -640 426 -480 480 -640 426 -549 640 -640 427 -640 546 -640 489 -640 426 -500 335 -421 640 -640 427 -640 478 -640 425 -640 361 -640 639 -640 360 -423 640 -640 425 -612 612 -478 640 -640 426 -480 640 -640 426 -640 331 -480 640 -481 640 -640 480 -427 640 -591 640 -640 480 -640 427 -640 426 -640 478 -449 640 -640 480 -480 640 -640 480 -640 427 -640 480 -500 375 -500 400 -463 640 -427 640 -427 640 -640 434 -640 431 -333 500 -640 427 -640 425 -426 640 -429 640 -640 427 -375 500 -640 480 -500 375 -375 500 -640 425 -640 425 -500 335 -640 426 -612 612 -640 425 -640 480 -640 219 -640 427 -640 428 -640 427 -426 640 -640 480 -640 427 -640 427 -640 454 -612 612 -640 480 -480 640 -640 425 -640 480 -500 375 -640 427 -640 426 -640 383 -640 480 -500 375 -640 427 -500 269 -640 480 -452 500 -428 640 -640 427 -427 640 -640 480 -430 640 -640 480 -640 427 -640 471 -640 634 -500 375 -373 500 -640 480 -427 640 -640 427 -424 640 -640 480 -425 640 -640 425 -424 640 -640 360 -500 334 -635 640 -640 428 -500 375 -640 426 -640 436 -500 375 -640 360 -640 480 -640 427 -640 480 -427 640 -378 640 -640 594 -640 480 -640 433 -480 640 -427 640 -640 640 -640 480 -640 480 -501 640 -640 320 -640 480 -640 426 -640 406 -640 480 -640 640 -502 640 -375 500 -640 480 -640 427 -375 500 -640 427 -480 640 -640 453 -408 640 -640 423 -500 375 -640 427 -480 640 -640 423 -375 500 -640 480 -425 640 -640 480 -640 480 -640 480 -640 416 -640 426 -640 427 -640 480 -640 428 -640 427 -640 444 -640 480 -640 428 -426 640 -640 426 -480 640 -480 640 -640 455 -640 400 -480 640 -425 640 -478 640 -640 640 -427 640 -640 468 -500 500 -500 375 -640 480 -640 480 -640 480 -640 427 -640 480 -640 426 -500 500 -640 480 -500 334 -640 426 -640 427 -640 480 -640 427 -640 480 -426 640 -640 301 -640 428 -640 427 -500 222 -480 640 -427 640 -500 335 -360 270 -640 452 -640 361 -640 480 -480 640 -640 429 -640 434 -640 463 -640 427 -428 640 -640 427 -426 640 -640 472 -640 480 -640 438 -640 443 -612 612 -478 640 -426 640 -429 640 -640 425 -640 480 -640 480 -640 640 -426 640 -640 427 -640 424 -640 424 -640 424 -612 612 -640 480 -480 640 -400 500 -480 640 -640 480 -640 480 -640 427 -640 597 -640 416 -640 480 -640 480 -480 640 -480 640 -640 424 -640 428 -640 425 -582 640 -484 640 -566 640 -640 427 -426 640 -427 640 -640 480 -640 468 -640 424 -427 640 -640 425 -480 640 -600 400 -640 480 -640 480 -640 453 -500 339 -480 640 -640 480 -500 403 -500 333 -640 480 -640 480 -640 480 -640 427 -640 510 -640 425 -640 480 -426 640 -640 640 -375 500 -424 640 -640 427 -640 480 -480 640 -429 640 -640 426 -480 640 -640 427 -640 426 -640 480 -640 441 -494 640 -640 360 -425 640 -640 415 -640 427 -640 480 -640 360 -427 640 -500 333 -500 375 -333 500 -640 480 -480 640 -640 506 -640 427 -640 440 -600 450 -612 612 -640 424 -640 425 -640 480 -640 490 -480 640 -640 427 -640 480 -640 480 -640 428 -640 427 -408 640 -640 480 -640 480 -640 480 -480 640 -480 640 -500 375 -640 369 -424 640 -640 406 -500 375 -640 360 -640 519 -640 360 -640 426 -640 480 -640 480 -640 480 -500 375 -640 432 -640 501 -480 640 -640 640 -640 417 -600 450 -640 428 -640 427 -428 640 -374 500 -640 478 -640 425 -640 480 -480 640 -500 418 -333 500 -640 429 -640 428 -596 640 -640 480 -640 480 -640 359 -480 640 -640 427 -640 446 -640 427 -640 480 -500 375 -640 548 -480 640 -640 426 -500 357 -640 480 -500 375 -612 612 -480 640 -640 429 -640 429 -480 640 -426 640 -334 500 -604 640 -640 425 -640 424 -640 457 -640 426 -640 480 -640 551 -392 640 -640 418 -427 640 -640 480 -640 359 -500 375 -640 427 -210 304 -640 426 -356 200 -640 480 -500 375 -480 640 -500 377 -320 240 -427 640 -640 425 -640 513 -500 375 -427 640 -640 499 -640 294 -640 427 -640 443 -640 519 -640 480 -640 361 -640 480 -640 554 -640 426 -640 507 -640 426 -640 427 -640 480 -640 426 -640 480 -640 412 -640 480 -504 336 -640 480 -427 640 -426 640 -640 360 -640 421 -640 428 -640 480 -640 424 -480 640 -640 480 -640 480 -640 426 -640 480 -640 425 -480 640 -640 426 -640 428 -640 524 -640 374 -640 427 -640 428 -427 640 -640 480 -640 427 -640 360 -640 480 -428 640 -480 640 -426 640 -500 375 -640 490 -640 484 -640 445 -640 480 -427 640 -640 425 -500 375 -640 428 -480 640 -640 347 -640 360 -425 640 -640 499 -640 480 -500 375 -640 478 -640 427 -500 375 -427 640 -424 640 -480 640 -640 428 -640 640 -500 335 -640 480 -640 640 -640 427 -640 539 -480 640 -640 427 -489 640 -500 333 -640 424 -427 640 -640 427 -640 427 -480 640 -640 424 -500 335 -640 640 -640 480 -640 480 -427 640 -640 480 -576 475 -640 513 -640 427 -640 513 -480 640 -481 640 -449 640 -640 428 -640 426 -640 480 -640 346 -640 448 -640 480 -640 406 -640 427 -640 427 -640 425 -640 480 -428 640 -640 480 -500 375 -640 470 -640 353 -640 427 -612 612 -640 511 -640 383 -640 640 -640 425 -482 640 -640 426 -480 640 -359 640 -640 427 -640 479 -500 375 -640 480 -640 427 -640 433 -480 640 -640 480 -495 640 -640 424 -640 480 -640 428 -640 415 -640 480 -612 612 -333 500 -640 480 -427 640 -493 640 -480 640 -640 569 -500 375 -640 427 -640 483 -640 473 -640 478 -640 427 -478 640 -640 426 -427 640 -640 427 -640 479 -481 640 -640 312 -480 640 -640 480 -640 426 -640 636 -480 640 -640 480 -480 640 -640 383 -640 428 -640 329 -640 406 -640 428 -378 500 -500 375 -640 371 -428 640 -427 640 -640 359 -640 427 -640 480 -640 424 -640 427 -640 480 -500 346 -640 480 -384 640 -480 640 -640 427 -443 640 -541 640 -640 640 -640 427 -640 480 -640 541 -537 640 -427 640 -640 426 -640 427 -640 480 -444 640 -480 640 -640 480 -480 640 -640 480 -640 480 -640 544 -500 343 -640 480 -640 480 -640 427 -640 640 -640 453 -640 316 -357 500 -496 640 -480 640 -640 421 -640 480 -640 424 -640 426 -640 427 -612 612 -640 427 -640 480 -500 475 -501 640 -612 612 -480 640 -640 480 -640 425 -480 640 -639 640 -640 329 -640 427 -640 480 -640 480 -640 480 -480 640 -640 514 -427 640 -640 480 -500 376 -500 375 -640 425 -640 427 -640 488 -640 428 -640 428 -640 428 -488 500 -640 424 -640 480 -480 640 -640 536 -640 458 -500 400 -640 451 -640 454 -640 640 -640 425 -640 428 -640 426 -640 478 -500 375 -427 640 -640 400 -640 427 -640 480 -480 640 -427 640 -612 612 -640 427 -640 427 -640 480 -612 612 -480 640 -640 427 -640 360 -640 480 -640 425 -610 431 -640 385 -640 426 -640 640 -640 427 -640 452 -640 426 -640 425 -640 425 -640 480 -329 500 -640 480 -500 375 -480 640 -640 428 -640 480 -640 426 -612 612 -640 480 -238 206 -640 427 -640 480 -640 427 -500 375 -640 473 -640 480 -640 480 -640 480 -500 334 -640 426 -427 640 -640 309 -640 428 -333 500 -640 427 -480 640 -462 640 -427 640 -640 426 -640 480 -640 427 -424 640 -640 480 -640 480 -640 425 -640 640 -640 425 -640 480 -429 640 -480 640 -640 426 -475 640 -427 640 -640 480 -500 343 -427 640 -500 335 -640 480 -640 491 -419 640 -640 426 -640 427 -427 640 -480 640 -640 450 -640 480 -500 375 -640 480 -640 427 -465 421 -640 427 -640 480 -500 333 -640 428 -448 500 -640 359 -640 545 -427 640 -640 426 -640 427 -333 500 -640 480 -382 500 -640 480 -640 428 -640 480 -640 418 -640 428 -427 640 -640 480 -500 333 -640 480 -640 480 -640 428 -500 375 -640 388 -640 429 -640 480 -640 427 -640 427 -640 480 -368 640 -500 375 -640 426 -640 413 -431 500 -640 480 -640 480 -375 500 -500 332 -640 480 -640 480 -480 640 -640 426 -640 481 -426 640 -640 427 -640 478 -640 427 -640 425 -640 530 -523 640 -640 426 -640 424 -640 480 -427 640 -640 474 -640 427 -640 425 -640 395 -640 480 -480 640 -640 464 -640 462 -640 480 -640 407 -640 426 -640 480 -640 425 -320 480 -480 640 -429 640 -578 640 -640 569 -640 426 -640 480 -500 333 -640 480 -640 480 -395 500 -640 479 -640 480 -500 370 -361 640 -532 640 -640 480 -500 312 -480 640 -640 640 -640 508 -640 425 -640 480 -427 640 -640 480 -640 480 -640 420 -427 640 -640 480 -375 500 -640 426 -640 427 -640 488 -500 332 -427 640 -640 429 -640 425 -375 500 -640 360 -640 427 -640 480 -500 375 -640 480 -480 640 -612 612 -640 424 -640 424 -640 478 -640 427 -640 480 -640 480 -640 425 -500 375 -640 427 -480 640 -640 426 -640 426 -640 434 -500 333 -400 266 -500 332 -640 428 -640 480 -640 480 -500 328 -640 427 -500 417 -480 640 -500 375 -427 640 -480 640 -480 640 -480 640 -640 426 -640 424 -640 480 -640 640 -375 500 -640 427 -427 640 -640 427 -480 640 -500 252 -458 640 -640 427 -640 480 -640 427 -640 478 -480 640 -426 640 -640 425 -478 640 -427 640 -333 500 -640 425 -427 640 -640 336 -640 427 -375 500 -640 405 -480 640 -640 427 -640 501 -640 456 -640 428 -640 480 -640 473 -333 500 -640 464 -640 428 -427 640 -500 386 -500 375 -612 612 -640 427 -640 464 -457 640 -640 427 -640 429 -640 386 -640 427 -640 441 -500 334 -500 375 -640 480 -640 427 -480 640 -500 332 -640 427 -640 480 -640 480 -640 391 -640 438 -640 484 -500 375 -480 640 -640 420 -500 400 -427 640 -640 503 -640 480 -640 427 -427 640 -640 480 -640 480 -640 427 -640 425 -640 426 -427 640 -640 360 -612 612 -640 425 -640 424 -640 391 -480 640 -640 480 -500 375 -640 480 -640 480 -612 612 -480 640 -334 500 -480 640 -640 480 -640 407 -640 480 -640 361 -640 480 -640 427 -640 563 -640 425 -640 480 -500 281 -640 543 -640 480 -640 428 -640 640 -640 480 -500 375 -640 433 -461 459 -640 363 -640 480 -423 640 -640 360 -640 480 -640 425 -640 480 -640 473 -640 426 -480 640 -640 425 -640 480 -640 429 -500 381 -500 328 -640 427 -426 640 -639 480 -640 436 -640 480 -640 505 -640 480 -374 640 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -640 427 -427 640 -640 558 -640 478 -640 427 -640 427 -500 375 -640 480 -640 427 -375 500 -640 426 -640 427 -640 429 -640 432 -640 383 -500 317 -333 500 -640 160 -375 500 -425 640 -480 640 -640 480 -640 425 -640 471 -500 375 -640 427 -640 480 -640 430 -375 500 -640 480 -500 375 -640 480 -640 427 -640 480 -640 204 -640 478 -427 640 -427 640 -640 427 -640 427 -640 397 -288 197 -640 426 -640 427 -640 640 -640 427 -640 480 -427 640 -640 480 -640 480 -640 501 -640 478 -612 612 -640 427 -426 640 -500 375 -640 480 -640 426 -520 640 -640 427 -640 426 -640 480 -640 420 -427 640 -640 480 -640 427 -476 640 -640 427 -427 640 -640 478 -640 448 -500 333 -500 285 -640 427 -494 640 -640 362 -375 500 -600 450 -640 480 -640 417 -500 496 -330 640 -500 375 -500 375 -640 478 -640 480 -640 480 -640 360 -640 426 -640 428 -612 612 -427 640 -640 480 -640 366 -640 480 -640 480 -427 640 -640 480 -480 360 -640 427 -640 457 -640 360 -509 640 -640 480 -500 375 -640 427 -640 425 -640 640 -640 480 -640 529 -640 480 -640 427 -640 480 -640 425 -640 426 -640 426 -500 375 -526 640 -640 426 -335 500 -612 612 -640 454 -383 640 -640 361 -640 427 -474 640 -640 427 -640 428 -500 326 -640 480 -640 424 -640 513 -640 510 -500 375 -500 375 -480 640 -480 640 -640 606 -480 640 -480 640 -640 311 -640 494 -640 425 -427 640 -480 640 -640 428 -640 640 -600 400 -640 457 -640 480 -640 401 -640 421 -640 480 -640 480 -640 436 -500 375 -426 640 -640 429 -640 496 -500 337 -640 480 -342 500 -500 334 -640 428 -640 333 -640 480 -480 640 -408 500 -544 640 -640 480 -640 428 -640 427 -640 414 -640 504 -640 479 -500 375 -480 640 -433 500 -640 480 -640 480 -427 640 -640 480 -640 480 -640 480 -640 426 -536 640 -500 362 -500 375 -640 424 -640 480 -640 480 -640 480 -640 429 -427 640 -640 426 -640 480 -640 543 -640 360 -500 334 -640 360 -640 426 -500 375 -640 374 -500 375 -612 612 -640 426 -427 640 -427 640 -480 640 -640 480 -640 480 -640 480 -640 480 -640 480 -640 427 -423 640 -478 640 -427 640 -375 500 -640 478 -375 500 -500 332 -427 640 -427 640 -640 480 -473 640 -640 480 -640 429 -640 474 -640 480 -640 512 -500 375 -639 640 -561 640 -332 500 -480 640 -640 640 -442 640 -500 448 -640 480 -640 428 -640 480 -640 480 -640 427 -640 427 -640 480 -640 480 -640 424 -425 640 -640 436 -640 427 -640 480 -612 612 -333 500 -640 480 -612 612 -640 426 -459 322 -640 426 -640 427 -426 640 -640 480 -640 426 -640 480 -600 422 -640 480 -612 612 -640 480 -640 394 -640 360 -640 480 -640 427 -500 375 -640 478 -489 640 -640 481 -640 427 -640 337 -640 392 -640 508 -500 421 -480 640 -640 480 -640 344 -640 427 -426 640 -612 612 -640 479 -640 480 -640 557 -476 500 -640 429 -640 424 -640 480 -398 500 -640 425 -640 640 -612 612 -640 480 -640 424 -640 424 -426 640 -640 480 -640 426 -483 640 -640 453 -640 480 -500 251 -427 640 -640 427 -500 375 -640 480 -640 480 -640 424 -640 480 -427 640 -640 427 -640 480 -640 480 -640 480 -640 478 -640 640 -480 640 -506 640 -324 243 -612 612 -500 328 -640 427 -640 480 -428 640 -480 640 -640 480 -640 640 -500 375 -425 640 -640 480 -640 432 -426 640 -640 424 -640 480 -478 640 -640 360 -427 640 -640 480 -640 480 -512 640 -480 640 -481 640 -500 375 -500 333 -640 427 -595 640 -640 480 -480 640 -640 359 -640 480 -640 352 -640 480 -427 640 -640 427 -640 478 -426 640 -640 427 -640 426 -640 317 -428 640 -425 640 -251 480 -463 640 -640 419 -640 480 -640 398 -426 640 -640 480 -427 640 -640 480 -640 480 -480 640 -640 427 -640 427 -640 427 -640 480 -640 427 -333 500 -640 480 -640 480 -640 426 -640 427 -500 371 -500 376 -640 480 -480 640 -640 437 -480 640 -640 480 -426 640 -640 424 -640 359 -640 480 -640 427 -640 421 -640 427 -640 480 -640 514 -600 462 -375 500 -333 500 -500 375 -640 480 -480 640 -500 353 -640 512 -480 640 -640 510 -640 480 -640 428 -640 426 -640 480 -640 428 -480 640 -577 640 -427 640 -640 360 -595 438 -640 480 -427 640 -640 499 -333 500 -640 425 -640 480 -640 480 -612 612 -429 640 -640 480 -640 427 -640 394 -640 425 -640 480 -480 640 -640 480 -640 413 -615 640 -640 427 -640 480 -640 436 -640 427 -427 640 -640 360 -480 640 -640 428 -640 362 -640 480 -640 480 -293 450 -640 428 -640 480 -640 457 -480 640 -640 424 -478 640 -640 480 -480 640 -500 391 -424 640 -640 427 -500 374 -640 480 -500 395 -500 375 -640 427 -640 412 -640 427 -640 427 -640 427 -500 333 -640 427 -640 427 -640 427 -612 612 -480 640 -640 480 -640 480 -640 427 -480 640 -640 425 -425 640 -525 640 -640 427 -640 434 -500 463 -640 427 -427 640 -640 425 -640 480 -480 640 -427 640 -640 480 -500 400 -640 427 -640 480 -427 640 -496 500 -448 336 -426 640 -640 480 -640 480 -640 405 -480 640 -470 640 -640 427 -500 385 -426 640 -640 425 -640 480 -500 375 -640 480 -500 375 -640 426 -640 423 -640 640 -640 464 -640 425 -640 428 -500 477 -298 640 -640 480 -640 425 -640 426 -640 427 -640 480 -500 333 -640 477 -478 640 -372 500 -640 437 -640 426 -640 480 -500 375 -640 427 -500 333 -375 500 -640 480 -640 354 -478 640 -640 464 -640 424 -612 612 -500 375 -640 480 -640 480 -640 571 -640 480 -640 480 -640 480 -640 480 -640 480 -640 424 -640 427 -640 427 -640 627 -640 508 -427 640 -640 476 -640 427 -640 454 -640 502 -612 612 -333 500 -424 640 -573 640 -640 424 -640 480 -640 427 -640 480 -589 640 -640 427 -640 428 -640 472 -640 428 -480 640 -512 640 -640 480 -640 480 -640 427 -640 412 -500 314 -640 480 -480 640 -500 375 -586 640 -333 500 -640 469 -640 425 -640 480 -332 500 -640 480 -640 425 -544 640 -640 458 -500 375 -480 640 -640 480 -640 480 -640 480 -320 240 -640 480 -640 480 -427 640 -500 375 -640 480 -334 500 -640 480 -640 427 -640 497 -500 375 -640 480 -640 426 -640 425 -473 640 -640 426 -640 480 -640 426 -531 640 -640 478 -640 428 -640 429 -480 640 -612 612 -640 368 -375 500 -640 480 -640 480 -640 480 -427 640 -503 640 -640 360 -640 427 -480 640 -640 427 -640 426 -640 480 -480 640 -640 426 -640 429 -640 426 -480 640 -640 427 -640 427 -640 481 -640 427 -640 427 -640 474 -597 640 -640 248 -480 360 -640 480 -640 512 -640 427 -332 500 -640 427 -640 428 -460 640 -640 426 -500 375 -420 640 -640 480 -640 480 -500 375 -481 640 -640 427 -640 427 -640 426 -640 478 -428 640 -500 375 -640 395 -640 426 -640 427 -350 233 -640 427 -386 640 -640 480 -427 640 -640 286 -640 480 -640 419 -340 500 -640 348 -335 500 -640 495 -640 366 -640 427 -640 640 -640 427 -640 425 -640 480 -640 480 -640 480 -640 427 -640 425 -500 333 -640 481 -480 640 -480 640 -427 640 -640 427 -426 640 -640 480 -640 478 -500 332 -640 427 -640 427 -500 281 -640 480 -428 640 -640 480 -280 268 -640 369 -640 427 -640 424 -640 480 -427 640 -428 640 -640 480 -640 427 -500 361 -612 612 -640 480 -480 640 -640 427 -640 478 -640 514 -480 640 -432 288 -640 392 -640 480 -640 480 -612 612 -640 361 -640 480 -333 500 -640 427 -640 427 -640 407 -640 418 -640 512 -640 426 -640 427 -500 332 -640 428 -480 640 -640 480 -640 429 -640 360 -500 375 -640 424 -640 425 -550 365 -383 640 -640 427 -430 640 -500 375 -425 640 -500 375 -500 357 -500 222 -640 427 -640 480 -480 640 -500 375 -640 428 -640 423 -421 640 -640 480 -640 480 -640 427 -640 426 -640 480 -466 640 -427 640 -500 400 -480 640 -500 333 -640 426 -480 640 -640 480 -352 288 -640 480 -640 425 -640 428 -640 426 -640 427 -640 478 -565 640 -640 426 -640 480 -500 374 -640 426 -600 500 -640 480 -640 480 -480 640 -640 480 -586 640 -640 427 -640 491 -640 327 -640 218 -500 332 -500 375 -640 480 -640 580 -638 640 -359 640 -640 360 -516 640 -640 226 -333 500 -640 427 -640 406 -640 427 -640 480 -448 336 -640 427 -520 640 -640 480 -409 500 -375 500 -640 480 -640 483 -480 640 -640 428 -500 375 -640 480 -640 480 -640 428 -400 267 -640 480 -375 500 -640 428 -640 480 -640 424 -640 427 -428 640 -640 425 -424 640 -640 480 -500 496 -333 500 -500 335 -502 640 -640 427 -640 485 -640 480 -427 640 -425 640 -334 500 -640 426 -640 480 -640 347 -640 480 -443 640 -500 335 -640 427 -640 573 -640 444 -500 375 -427 640 -640 427 -500 375 -640 427 -640 426 -426 640 -426 640 -640 480 -640 480 -640 479 -640 427 -640 480 -640 540 -640 427 -427 640 -500 375 -640 480 -500 375 -375 500 -640 480 -640 425 -437 640 -407 482 -478 640 -640 512 -500 375 -640 480 -500 375 -640 427 -640 315 -320 240 -640 371 -640 480 -640 480 -435 640 -640 480 -424 640 -612 612 -480 640 -640 640 -425 640 -640 480 -500 375 -480 304 -640 428 -640 480 -640 480 -640 427 -640 428 -640 453 -523 640 -427 640 -500 375 -640 480 -500 500 -640 425 -640 427 -500 363 -427 640 -640 427 -500 375 -383 640 -427 640 -427 640 -500 375 -640 419 -640 480 -640 427 -360 270 -640 427 -500 388 -640 427 -640 480 -640 480 -640 427 -640 425 -640 427 -640 480 -640 323 -640 426 -500 375 -640 427 -640 424 -600 600 -640 427 -480 640 -640 457 -500 302 -640 480 -640 480 -640 480 -500 375 -457 640 -640 480 -640 360 -640 427 -500 364 -612 612 -500 375 -640 427 -375 500 -480 640 -640 427 -500 375 -640 366 -640 427 -640 480 -640 555 -640 427 -640 427 -640 426 -640 480 -640 480 -640 428 -640 484 -640 491 -500 375 -640 507 -500 375 -640 480 -375 500 -640 480 -640 480 -640 480 -640 364 -640 427 -464 640 -443 640 -640 480 -480 640 -640 363 -480 640 -480 640 -640 395 -427 640 -640 390 -640 427 -500 375 -640 427 -500 333 -612 612 -640 427 -640 480 -640 480 -491 640 -640 480 -640 428 -640 211 -640 427 -640 480 -640 480 -640 464 -640 457 -640 480 -640 428 -640 480 -640 425 -640 426 -640 360 -500 375 -640 480 -500 318 -640 428 -640 480 -375 500 -480 640 -347 500 -612 612 -640 425 -640 480 -640 542 -640 412 -640 427 -500 378 -399 640 -480 640 -640 425 -640 425 -612 612 -640 481 -640 427 -427 640 -640 419 -428 640 -640 427 -640 453 -425 640 -640 479 -640 480 -640 480 -457 640 -512 640 -480 640 -640 443 -640 427 -640 497 -500 333 -427 640 -425 640 -427 640 -480 640 -500 375 -640 400 -468 640 -425 640 -640 478 -332 500 -640 424 -640 424 -640 493 -640 485 -333 500 -640 426 -640 427 -640 425 -640 426 -640 429 -480 640 -612 612 -640 399 -640 480 -640 417 -500 400 -640 421 -640 321 -640 480 -427 640 -427 640 -640 480 -640 480 -640 480 -428 640 -640 425 -640 427 -414 640 -640 480 -640 480 -640 425 -640 424 -640 480 -509 640 -640 425 -500 375 -500 417 -427 640 -640 424 -640 480 -640 480 -480 640 -500 375 -430 640 -640 480 -640 427 -640 480 -640 427 -640 457 -640 425 -427 640 -375 500 -640 476 -640 349 -640 426 -640 488 -333 500 -480 640 -444 640 -640 480 -640 427 -500 375 -640 480 -320 240 -457 640 -640 480 -640 361 -640 425 -640 480 -640 428 -640 427 -640 425 -640 428 -640 427 -640 480 -640 346 -640 480 -559 640 -500 331 -500 375 -359 640 -640 479 -640 480 -480 640 -375 500 -427 640 -640 429 -480 640 -640 480 -640 428 -640 481 -640 531 -375 500 -640 427 -480 640 -640 351 -640 480 -640 360 -480 640 -640 640 -640 425 -640 480 -480 640 -640 427 -500 333 -640 479 -480 640 -640 426 -640 376 -426 640 -640 428 -640 427 -500 333 -640 565 -480 640 -640 480 -640 417 -640 480 -500 375 -500 333 -640 480 -500 396 -317 640 -425 640 -640 427 -480 640 -640 428 -640 480 -640 480 -500 375 -640 426 -640 361 -640 425 -375 500 -640 427 -427 640 -640 427 -427 640 -640 426 -375 500 -437 640 -640 427 -640 425 -640 480 -640 457 -640 480 -640 480 -600 640 -640 424 -640 425 -640 480 -640 425 -640 480 -500 296 -478 640 -640 399 -640 624 -640 426 -640 427 -640 471 -640 427 -450 640 -640 427 -640 383 -500 335 -640 360 -640 359 -640 480 -640 427 -418 640 -640 480 -460 640 -640 482 -480 640 -640 506 -640 480 -480 640 -375 500 -640 481 -427 640 -640 427 -600 400 -500 333 -640 360 -640 480 -480 640 -425 640 -640 480 -640 480 -640 428 -640 355 -480 640 -640 480 -640 480 -640 480 -427 640 -640 427 -500 375 -427 640 -500 375 -640 427 -640 480 -640 427 -500 375 -640 334 -640 427 -640 427 -640 427 -638 640 -500 375 -640 480 -640 428 -437 640 -429 640 -500 476 -640 359 -640 480 -640 447 -640 480 -640 360 -500 495 -500 375 -500 362 -640 480 -333 500 -640 399 -640 218 -640 418 -640 480 -640 445 -640 480 -640 480 -640 459 -640 480 -480 640 -612 612 -480 640 -640 480 -640 481 -640 427 -640 426 -427 640 -640 471 -427 640 -480 640 -640 427 -640 426 -480 640 -640 426 -640 416 -640 480 -640 428 -640 480 -640 480 -640 427 -428 640 -640 640 -612 612 -640 443 -640 480 -640 427 -640 480 -640 480 -334 500 -640 480 -640 425 -500 375 -640 427 -640 427 -640 480 -640 420 -640 426 -640 480 -640 478 -640 426 -612 612 -640 478 -640 539 -640 640 -332 500 -640 480 -480 640 -640 485 -640 480 -500 328 -640 640 -640 361 -640 426 -640 427 -640 480 -640 324 -640 383 -640 480 -511 640 -640 480 -500 285 -500 332 -640 480 -640 459 -480 640 -640 469 -500 375 -640 359 -600 400 -640 426 -640 480 -640 411 -640 480 -438 424 -640 427 -551 640 -640 480 -640 427 -640 408 -640 480 -640 424 -640 512 -640 480 -375 500 -640 427 -612 612 -640 480 -640 528 -479 640 -426 640 -640 480 -640 427 -640 359 -500 333 -640 480 -550 640 -640 480 -640 434 -633 640 -640 425 -427 640 -640 478 -640 480 -640 480 -640 480 -640 516 -640 455 -640 427 -640 480 -640 426 -640 427 -428 640 -640 480 -640 482 -640 259 -640 426 -640 457 -480 640 -427 640 -640 427 -640 480 -640 480 -640 484 -640 497 -640 426 -640 424 -640 480 -640 480 -640 480 -640 360 -482 640 -425 640 -640 361 -640 480 -640 480 -427 640 -640 480 -640 426 -640 480 -640 374 -640 426 -640 328 -640 427 -612 612 -333 500 -640 338 -500 400 -640 427 -640 427 -640 480 -640 426 -640 427 -500 375 -640 425 -640 480 -640 480 -500 375 -427 640 -640 429 -640 427 -640 466 -500 266 -500 400 -640 427 -504 640 -640 480 -480 640 -500 375 -500 375 -500 375 -500 375 -427 640 -640 480 -480 640 -640 480 -640 536 -640 427 -500 375 -640 480 -500 375 -500 375 -640 427 -612 612 -640 481 -640 427 -640 427 -500 375 -640 427 -640 509 -375 500 -640 640 -612 612 -640 480 -640 425 -640 480 -500 375 -640 425 -640 480 -640 426 -640 449 -640 480 -640 608 -640 359 -640 424 -480 640 -640 480 -640 464 -640 387 -408 640 -640 480 -640 427 -640 427 -640 468 -480 640 -375 500 -428 640 -640 480 -480 640 -640 480 -640 480 -375 500 -467 640 -640 425 -640 640 -640 480 -640 480 -640 427 -640 480 -480 640 -640 428 -640 427 -640 427 -640 480 -500 375 -640 428 -612 612 -500 333 -427 640 -640 425 -426 640 -640 480 -640 480 -640 360 -640 480 -500 375 -480 640 -480 640 -427 640 -480 640 -640 427 -640 416 -640 427 -640 424 -640 480 -640 385 -640 428 -640 480 -640 466 -640 425 -640 427 -480 640 -480 640 -480 640 -640 441 -640 480 -332 500 -640 428 -640 480 -427 640 -640 513 -640 427 -612 612 -480 640 -640 640 -640 480 -640 428 -425 640 -640 480 -640 640 -480 640 -640 428 -640 288 -640 427 -640 425 -640 479 -640 427 -640 426 -427 640 -480 640 -320 240 -640 480 -640 426 -500 375 -640 480 -640 423 -640 604 -640 436 -500 281 -640 427 -612 612 -427 640 -640 427 -427 640 -640 428 -640 427 -500 335 -640 428 -480 640 -640 427 -640 427 -640 480 -480 640 -640 427 -500 335 -335 500 -640 480 -640 391 -426 640 -431 431 -640 480 -640 463 -640 425 -640 427 -640 425 -500 332 -424 640 -500 375 -478 640 -640 480 -640 436 -640 480 -480 640 -640 596 -640 640 -640 424 -413 500 -640 477 -426 640 -426 640 -640 640 -640 427 -640 480 -640 428 -640 428 -640 457 -640 426 -640 640 -375 500 -640 473 -640 426 -640 427 -640 427 -640 478 -431 500 -640 429 -640 426 -640 480 -640 427 -427 640 -640 427 -640 427 -640 428 -640 480 -375 500 -640 480 -320 225 -640 480 -640 427 -640 480 -640 427 -426 640 -427 640 -640 404 -638 640 -640 429 -640 427 -640 480 -500 375 -431 640 -640 428 -512 640 -467 640 -427 640 -640 429 -427 640 -478 640 -640 480 -500 333 -640 480 -448 279 -640 427 -640 426 -640 427 -478 640 -640 513 -491 640 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -480 640 -500 375 -481 640 -485 500 -640 438 -640 480 -640 480 -500 375 -640 425 -640 480 -640 480 -640 424 -640 427 -500 375 -640 424 -640 426 -640 480 -500 375 -640 428 -640 360 -640 480 -640 428 -640 427 -640 427 -427 640 -640 593 -424 640 -640 480 -640 425 -640 378 -640 480 -640 424 -640 480 -404 640 -500 345 -640 480 -640 480 -640 427 -500 370 -500 332 -500 333 -640 511 -427 640 -640 426 -433 640 -480 640 -640 428 -640 348 -500 375 -500 333 -640 441 -500 358 -640 426 -640 480 -426 640 -427 640 -640 491 -383 640 -333 500 -640 425 -640 482 -639 640 -500 298 -427 640 -375 500 -640 480 -640 480 -375 500 -640 427 -500 375 -640 480 -637 640 -640 640 -640 429 -480 640 -640 480 -640 471 -500 375 -640 417 -480 640 -427 640 -500 375 -640 486 -640 480 -428 640 -640 424 -640 480 -500 365 -500 375 -460 640 -640 426 -427 640 -640 480 -640 399 -640 480 -640 480 -612 612 -640 429 -640 426 -512 640 -640 429 -375 500 -414 640 -480 640 -640 480 -640 360 -640 480 -478 640 -360 640 -640 480 -427 640 -640 424 -375 500 -427 640 -640 375 -500 335 -640 427 -640 480 -640 512 -417 640 -640 427 -640 480 -640 427 -640 427 -640 480 -640 427 -640 424 -500 343 -640 428 -640 474 -640 480 -640 480 -640 418 -640 480 -640 640 -500 334 -433 640 -640 480 -640 480 -443 640 -640 640 -640 427 -640 425 -640 428 -640 383 -640 480 -427 640 -640 384 -480 640 -640 426 -640 429 -640 480 -640 480 -640 480 -640 426 -640 480 -640 428 -640 480 -640 480 -425 640 -640 480 -481 640 -640 427 -640 480 -427 640 -360 640 -640 480 -640 480 -500 375 -425 640 -640 480 -640 480 -640 523 -640 480 -512 640 -427 640 -640 640 -640 640 -640 427 -640 480 -480 640 -480 640 -480 640 -479 640 -480 640 -640 427 -640 427 -427 640 -640 427 -640 427 -640 480 -500 456 -640 429 -640 640 -640 424 -640 447 -375 500 -640 427 -640 458 -640 480 -640 428 -640 424 -640 360 -640 480 -640 361 -363 500 -640 480 -640 480 -640 356 -640 427 -631 640 -640 480 -480 640 -429 640 -640 480 -640 426 -640 427 -640 480 -640 480 -640 427 -479 640 -480 640 -640 427 -640 480 -500 330 -640 427 -515 640 -640 573 -638 640 -640 427 -640 480 -528 512 -640 480 -640 427 -424 640 -640 480 -480 640 -640 480 -640 480 -640 427 -640 428 -500 333 -500 375 -420 640 -640 427 -640 426 -640 480 -500 336 -500 333 -500 375 -640 480 -500 375 -480 640 -640 480 -640 480 -332 500 -640 557 -640 390 -640 480 -428 640 -640 441 -640 427 -640 480 -500 420 -640 427 -640 425 -640 480 -640 428 -640 480 -480 640 -640 456 -640 480 -432 499 -640 478 -425 640 -480 640 -640 568 -612 612 -640 480 -500 375 -640 428 -640 427 -427 640 -612 612 -640 428 -640 486 -640 426 -640 480 -640 427 -640 480 -480 640 -640 359 -457 640 -640 426 -640 428 -428 640 -640 427 -640 480 -375 500 -640 480 -640 640 -640 480 -500 500 -500 375 -500 281 -640 427 -427 640 -640 480 -640 480 -427 640 -640 640 -640 428 -427 640 -480 640 -500 374 -640 480 -500 380 -500 375 -427 640 -375 500 -640 427 -640 425 -612 612 -458 500 -375 500 -640 640 -600 411 -640 480 -427 640 -640 427 -375 500 -500 375 -333 500 -640 428 -640 479 -640 480 -640 426 -640 480 -640 386 -640 480 -640 457 -640 480 -640 428 -500 359 -500 500 -427 640 -640 480 -640 640 -501 640 -640 425 -480 640 -640 480 -640 480 -375 500 -640 458 -640 426 -640 480 -640 427 -640 480 -375 500 -480 640 -329 500 -500 373 -539 640 -640 424 -640 480 -640 476 -521 640 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -640 427 -640 418 -640 480 -640 426 -640 480 -480 640 -480 640 -640 480 -427 640 -426 640 -612 612 -640 480 -375 500 -640 480 -640 479 -333 500 -640 480 -500 333 -640 425 -636 636 -640 427 -640 426 -427 640 -500 375 -640 480 -431 640 -640 393 -426 640 -612 612 -640 368 -375 500 -639 640 -640 429 -427 640 -640 370 -359 640 -640 427 -640 398 -500 436 -640 390 -640 469 -427 640 -640 427 -640 429 -500 353 -640 391 -640 429 -500 281 -512 640 -640 426 -612 612 -640 480 -480 640 -640 427 -456 500 -512 640 -427 640 -612 612 -427 640 -612 612 -640 426 -640 359 -427 640 -640 360 -500 375 -640 456 -640 427 -640 427 -640 427 -640 480 -640 241 -429 640 -343 500 -640 480 -640 480 -640 480 -640 427 -640 427 -334 500 -640 425 -640 480 -640 426 -640 480 -640 480 -640 478 -473 640 -640 480 -640 480 -445 500 -640 640 -500 375 -640 426 -453 640 -640 480 -500 281 -640 427 -640 484 -640 426 -640 480 -640 427 -424 640 -425 282 -640 521 -640 495 -640 480 -640 480 -333 500 -640 426 -640 480 -640 640 -640 480 -640 605 -640 400 -457 640 -640 480 -640 480 -500 375 -480 640 -640 480 -427 640 -640 424 -640 423 -640 480 -480 640 -500 160 -640 480 -640 427 -640 478 -640 320 -640 480 -375 500 -640 479 -640 480 -640 429 -640 480 -640 427 -427 640 -427 640 -480 640 -640 213 -640 640 -640 469 -640 457 -640 480 -640 610 -640 425 -500 334 -541 640 -640 480 -428 640 -500 375 -610 640 -640 425 -640 428 -612 612 -640 499 -640 427 -427 640 -375 500 -483 640 -640 480 -640 428 -640 423 -640 480 -640 480 -480 640 -468 640 -500 375 -640 427 -640 480 -240 320 -640 428 -480 640 -640 480 -425 640 -500 375 -500 333 -640 427 -400 300 -640 480 -640 426 -640 254 -375 500 -640 480 -640 427 -464 640 -480 640 -640 427 -640 640 -427 640 -383 640 -640 427 -430 640 -640 378 -640 427 -640 480 -640 444 -640 427 -500 333 -375 500 -640 427 -640 425 -640 428 -640 480 -640 428 -640 390 -500 375 -640 398 -640 480 -640 480 -640 480 -511 640 -640 480 -640 411 -640 360 -640 480 -500 333 -640 428 -640 360 -640 478 -640 480 -640 480 -640 389 -427 640 -376 500 -425 640 -500 375 -500 375 -500 333 -640 478 -640 480 -640 427 -640 480 -640 496 -640 466 -500 500 -640 428 -640 480 -640 480 -640 480 -480 640 -500 375 -640 480 -640 480 -480 640 -640 427 -640 480 -640 480 -640 427 -640 425 -640 640 -640 451 -640 427 -427 640 -500 375 -640 591 -640 536 -640 480 -640 425 -480 640 -480 640 -426 640 -640 427 -427 640 -478 640 -480 640 -640 427 -500 375 -640 480 -640 428 -640 424 -500 334 -500 306 -427 640 -612 612 -333 500 -500 400 -640 427 -480 640 -454 640 -640 436 -480 640 -640 480 -333 500 -640 480 -640 427 -640 427 -427 640 -640 480 -480 640 -427 640 -500 332 -640 415 -640 427 -640 426 -640 479 -428 640 -640 459 -640 480 -640 427 -640 480 -640 426 -640 480 -640 480 -500 375 -640 427 -640 428 -640 480 -640 502 -640 311 -495 640 -640 480 -640 480 -640 358 -640 493 -320 240 -640 406 -640 427 -640 480 -640 478 -640 480 -640 480 -640 501 -640 427 -640 481 -640 426 -640 480 -420 640 -640 480 -480 640 -640 428 -640 480 -459 344 -640 427 -640 449 -640 427 -640 425 -640 480 -480 640 -640 226 -480 640 -640 503 -640 427 -640 425 -639 640 -640 425 -640 427 -640 480 -500 375 -456 640 -500 375 -612 612 -640 472 -612 612 -640 512 -640 426 -640 458 -500 375 -480 640 -427 640 -640 480 -500 332 -640 427 -427 640 -640 439 -640 427 -640 480 -480 640 -640 480 -638 640 -480 640 -640 426 -612 612 -433 640 -640 340 -640 427 -416 640 -640 427 -640 480 -640 480 -640 480 -375 500 -585 640 -480 640 -640 480 -640 427 -464 640 -640 427 -640 640 -640 360 -423 640 -640 427 -640 383 -612 612 -640 427 -640 480 -640 427 -500 331 -524 640 -333 500 -640 480 -640 238 -640 428 -640 427 -500 374 -640 427 -425 640 -427 640 -640 640 -640 427 -478 640 -500 375 -640 480 -499 640 -640 427 -640 640 -640 480 -640 315 -640 480 -500 335 -640 614 -513 640 -640 480 -640 348 -640 480 -500 375 -640 480 -640 473 -500 369 -437 640 -640 360 -640 427 -640 480 -640 427 -480 640 -500 333 -640 429 -640 480 -480 640 -640 480 -640 480 -640 428 -640 410 -375 500 -428 640 -500 334 -640 458 -612 612 -640 426 -300 400 -480 640 -429 640 -640 427 -640 424 -288 307 -640 480 -640 424 -640 426 -500 334 -500 375 -389 500 -640 428 -640 358 -640 426 -480 640 -480 640 -428 640 -375 500 -640 427 -640 427 -640 427 -500 375 -640 534 -640 425 -640 359 -640 427 -409 500 -640 304 -427 640 -640 480 -640 283 -640 427 -480 640 -640 512 -612 612 -640 411 -640 357 -640 425 -640 348 -640 427 -640 427 -640 424 -640 437 -480 640 -480 640 -480 640 -640 480 -640 428 -640 480 -500 333 -640 427 -640 427 -640 427 -640 480 -640 427 -500 333 -427 640 -498 500 -640 480 -640 427 -480 640 -500 384 -427 640 -640 427 -400 500 -640 640 -640 424 -640 463 -300 429 -612 612 -640 477 -640 427 -600 399 -640 480 -640 480 -640 427 -640 426 -640 428 -425 640 -427 640 -640 478 -640 479 -640 427 -640 491 -640 449 -480 640 -480 640 -640 513 -640 427 -640 427 -640 428 -612 612 -375 500 -640 447 -640 449 -640 427 -640 427 -640 480 -640 427 -640 480 -480 640 -640 428 -640 426 -427 640 -640 365 -500 375 -640 480 -640 424 -427 640 -640 426 -640 426 -640 428 -640 426 -478 640 -640 480 -408 640 -640 427 -500 310 -480 640 -640 426 -640 480 -630 640 -427 640 -640 428 -640 427 -640 492 -640 499 -480 640 -640 427 -500 333 -480 640 -427 640 -640 389 -640 480 -425 640 -640 480 -640 436 -640 427 -640 449 -478 640 -480 640 -426 640 -640 434 -640 427 -480 640 -640 640 -500 375 -640 422 -480 640 -375 500 -640 426 -640 480 -640 425 -427 640 -640 480 -640 480 -640 423 -640 640 -640 383 -640 424 -640 480 -480 640 -612 612 -640 480 -640 480 -640 480 -640 427 -480 640 -555 640 -640 480 -375 500 -640 360 -640 427 -640 480 -640 425 -640 427 -640 480 -640 427 -640 427 -500 375 -480 640 -420 640 -500 375 -330 500 -612 612 -612 612 -640 361 -500 333 -640 512 -640 480 -500 375 -640 425 -640 480 -612 612 -640 428 -640 427 -427 640 -427 640 -640 456 -640 426 -640 291 -375 500 -640 427 -640 454 -640 427 -640 426 -612 612 -430 640 -500 333 -640 482 -640 480 -333 500 -426 640 -640 425 -640 427 -640 427 -640 480 -640 478 -427 640 -640 427 -491 640 -640 425 -640 427 -640 480 -500 375 -640 480 -498 640 -640 480 -640 427 -640 480 -488 640 -427 640 -500 332 -480 640 -480 640 -612 612 -640 480 -640 420 -375 500 -640 369 -640 424 -640 480 -426 640 -480 640 -640 480 -640 295 -500 347 -480 640 -640 359 -640 640 -640 480 -640 480 -640 428 -640 425 -640 479 -640 427 -640 429 -640 360 -612 612 -500 333 -640 480 -500 375 -426 640 -598 640 -640 480 -333 500 -640 426 -388 640 -426 640 -640 427 -640 478 -500 351 -640 426 -480 640 -640 430 -500 375 -640 484 -640 423 -640 480 -500 375 -640 480 -500 375 -640 426 -640 416 -500 333 -375 500 -500 361 -640 426 -427 640 -640 427 -640 427 -500 375 -640 424 -612 612 -393 640 -640 427 -375 500 -640 480 -469 640 -640 533 -640 511 -640 426 -457 640 -480 640 -640 387 -500 375 -640 427 -640 482 -640 427 -640 480 -480 640 -375 500 -424 640 -480 640 -426 640 -640 480 -640 425 -640 429 -640 546 -640 480 -468 640 -640 430 -458 640 -640 426 -640 401 -640 427 -640 480 -426 640 -640 427 -640 426 -640 480 -480 640 -640 427 -640 426 -438 640 -640 480 -428 500 -640 480 -640 480 -640 480 -640 480 -640 640 -480 640 -640 400 -500 333 -640 426 -500 375 -427 640 -427 640 -640 480 -640 482 -612 612 -640 480 -640 412 -343 500 -426 640 -425 640 -640 480 -640 427 -640 366 -640 480 -452 640 -333 500 -640 427 -612 612 -640 480 -512 640 -532 640 -640 457 -640 428 -640 428 -640 424 -500 375 -640 427 -429 640 -640 427 -640 427 -640 480 -640 480 -332 500 -640 480 -640 427 -640 209 -480 640 -480 640 -640 427 -640 427 -640 426 -640 480 -640 428 -320 480 -640 415 -426 640 -640 480 -400 640 -478 640 -640 479 -640 480 -640 427 -612 612 -375 500 -640 429 -427 640 -500 309 -500 360 -640 426 -500 375 -612 612 -335 500 -640 480 -640 480 -640 426 -640 480 -640 480 -336 448 -308 500 -330 500 -640 480 -640 424 -640 359 -640 453 -640 416 -273 346 -612 612 -375 500 -640 480 -640 480 -640 425 -300 432 -640 480 -640 428 -500 375 -480 640 -640 480 -500 375 -640 480 -640 458 -480 640 -426 640 -480 640 -640 480 -311 500 -478 640 -640 426 -640 480 -640 480 -480 640 -640 480 -500 375 -640 428 -640 480 -500 332 -640 426 -640 425 -414 500 -500 398 -640 480 -640 427 -640 427 -425 640 -640 432 -640 425 -640 384 -640 427 -640 289 -640 545 -640 480 -500 333 -429 640 -500 500 -640 425 -375 500 -640 480 -640 463 -640 426 -640 426 -640 433 -375 500 -500 375 -612 612 -640 480 -640 480 -640 436 -480 640 -478 640 -500 359 -640 427 -640 426 -478 640 -640 480 -447 640 -365 328 -427 640 -500 274 -480 640 -480 640 -640 425 -500 375 -640 480 -640 480 -438 640 -640 426 -640 436 -480 640 -484 500 -480 640 -640 415 -640 424 -640 480 -640 426 -424 640 -640 480 -456 640 -640 480 -640 480 -500 367 -377 500 -640 429 -480 640 -640 428 -640 480 -427 640 -500 367 -640 360 -333 500 -422 640 -480 640 -640 480 -640 425 -640 425 -640 640 -640 457 -640 427 -640 427 -480 640 -423 640 -454 640 -640 640 -425 640 -500 397 -427 640 -375 500 -500 333 -453 640 -480 640 -640 640 -640 480 -500 375 -480 640 -640 428 -500 375 -333 500 -640 480 -640 434 -427 640 -640 483 -480 640 -640 248 -640 427 -640 426 -640 480 -500 323 -640 480 -640 361 -640 428 -500 375 -640 426 -500 373 -640 427 -512 640 -640 480 -640 480 -480 640 -640 431 -640 404 -640 428 -480 640 -640 381 -428 640 -640 480 -480 640 -612 612 -640 428 -640 394 -640 427 -376 640 -640 426 -640 427 -425 640 -361 640 -427 640 -640 480 -507 640 -612 612 -640 480 -640 480 -500 333 -640 426 -640 450 -426 640 -425 640 -640 480 -640 480 -612 612 -640 427 -480 640 -612 612 -640 480 -640 480 -640 640 -439 640 -640 480 -640 426 -640 480 -640 480 -640 480 -480 640 -640 588 -640 426 -640 480 -480 640 -640 480 -640 480 -352 230 -428 640 -640 480 -640 423 -427 640 -640 512 -640 426 -406 640 -640 480 -640 487 -640 480 -299 500 -640 480 -500 375 -640 480 -640 427 -500 375 -640 480 -640 427 -640 426 -640 428 -640 420 -640 480 -428 640 -427 640 -608 640 -640 423 -480 640 -428 640 -640 478 -640 480 -640 640 -500 335 -500 322 -640 427 -375 500 -640 480 -640 478 -427 640 -640 480 -640 480 -640 528 -438 640 -640 427 -429 640 -640 480 -640 428 -375 500 -480 640 -451 640 -640 456 -640 399 -500 332 -640 427 -427 640 -640 427 -500 375 -640 427 -640 480 -640 427 -640 480 -640 480 -640 480 -640 480 -498 640 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -612 612 -640 427 -640 427 -640 480 -640 361 -640 479 -640 480 -640 444 -640 427 -640 428 -450 500 -640 428 -500 375 -501 640 -500 375 -640 593 -640 427 -640 427 -640 547 -640 480 -612 612 -640 359 -640 480 -640 512 -640 421 -640 437 -500 375 -480 640 -426 640 -640 427 -480 640 -640 427 -612 612 -640 427 -640 480 -640 429 -500 500 -426 640 -640 426 -640 429 -500 375 -640 480 -640 640 -640 406 -640 480 -640 427 -480 640 -640 480 -500 375 -640 444 -640 429 -640 480 -640 400 -640 605 -640 427 -640 480 -335 500 -640 359 -640 338 -640 614 -640 480 -640 390 -487 640 -640 445 -640 427 -640 411 -640 640 -640 427 -640 428 -640 427 -640 426 -640 427 -480 640 -534 640 -480 640 -640 480 -500 333 -500 333 -480 640 -156 640 -640 480 -480 640 -640 640 -640 480 -640 512 -366 604 -375 500 -640 418 -640 419 -640 382 -427 640 -640 480 -640 424 -640 360 -640 480 -640 480 -640 425 -640 480 -480 640 -480 640 -640 480 -528 640 -425 640 -640 424 -375 500 -500 375 -320 240 -480 640 -640 427 -640 427 -332 500 -600 393 -425 640 -480 640 -640 406 -640 423 -640 428 -640 425 -499 640 -469 500 -640 359 -640 626 -640 480 -612 612 -640 480 -640 351 -428 640 -640 305 -480 640 -640 640 -480 640 -640 480 -473 640 -480 640 -640 480 -640 539 -640 427 -640 480 -640 424 -500 320 -480 640 -640 426 -500 333 -427 640 -640 480 -640 428 -330 500 -428 640 -640 480 -640 429 -480 640 -640 427 -640 427 -640 480 -640 480 -640 427 -640 426 -640 427 -640 480 -640 466 -504 640 -640 480 -480 640 -640 426 -640 480 -640 427 -640 480 -480 640 -489 640 -640 426 -640 478 -640 512 -640 480 -246 640 -640 424 -640 480 -640 480 -640 480 -430 640 -640 427 -427 640 -640 434 -640 318 -425 640 -640 480 -640 429 -375 500 -333 500 -640 425 -640 427 -480 640 -640 480 -640 480 -640 216 -640 480 -640 443 -427 640 -480 640 -480 640 -640 480 -640 480 -640 430 -480 640 -500 375 -640 495 -640 427 -640 425 -640 488 -624 640 -640 464 -426 640 -640 480 -640 426 -640 480 -480 640 -640 428 -493 640 -640 428 -612 612 -640 427 -444 640 -640 363 -640 427 -420 640 -480 640 -640 428 -480 640 -500 375 -427 640 -375 500 -640 480 -640 427 -640 480 -640 480 -640 480 -640 433 -640 426 -640 484 -640 480 -425 640 -640 428 -640 436 -640 480 -640 428 -640 480 -640 427 -640 480 -640 427 -427 640 -640 480 -640 480 -500 376 -428 640 -480 640 -640 427 -640 480 -640 480 -640 426 -500 333 -640 445 -638 640 -478 640 -640 427 -640 480 -640 480 -435 640 -640 429 -640 480 -640 427 -438 640 -640 488 -500 400 -640 409 -640 427 -479 640 -500 375 -640 480 -640 448 -640 480 -640 480 -640 480 -640 427 -640 292 -480 640 -480 640 -640 426 -500 332 -480 640 -427 640 -640 480 -480 640 -500 375 -640 480 -433 500 -640 480 -640 480 -500 246 -640 427 -640 427 -456 500 -480 640 -640 480 -640 429 -640 427 -480 640 -640 426 -424 640 -375 500 -500 333 -640 480 -427 640 -640 512 -640 480 -361 500 -375 500 -425 640 -640 425 -612 612 -640 480 -640 425 -640 426 -640 427 -359 500 -640 480 -427 640 -640 428 -427 640 -640 480 -566 640 -480 640 -640 640 -500 375 -500 375 -640 480 -375 500 -640 246 -640 480 -640 480 -427 640 -640 427 -640 427 -640 428 -612 612 -640 429 -640 432 -480 640 -500 378 -640 426 -500 375 -500 333 -640 427 -500 375 -480 640 -640 424 -500 332 -640 481 -640 427 -640 427 -640 456 -640 480 -640 480 -640 434 -640 427 -426 640 -480 640 -640 480 -640 512 -640 640 -640 596 -500 259 -640 428 -640 424 -478 640 -612 612 -504 640 -640 426 -640 428 -640 480 -640 480 -640 480 -640 480 -640 427 -459 640 -640 480 -480 640 -640 480 -427 640 -480 640 -640 480 -640 428 -420 640 -640 480 -640 437 -640 426 -500 333 -640 427 -500 375 -640 427 -640 480 -408 640 -640 428 -640 427 -640 426 -640 480 -640 480 -480 640 -324 500 -640 396 -640 428 -640 480 -640 384 -640 480 -640 480 -640 427 -640 427 -640 472 -640 480 -640 427 -612 612 -640 436 -480 640 -480 640 -640 586 -480 640 -425 640 -640 360 -640 480 -640 480 -640 281 -333 500 -640 480 -500 334 -640 429 -500 333 -640 454 -640 425 -640 480 -640 513 -640 479 -640 583 -640 512 -640 480 -640 360 -640 427 -640 334 -480 640 -640 480 -640 365 -447 640 -500 400 -500 332 -480 640 -426 640 -640 426 -480 640 -640 428 -427 640 -640 419 -318 640 -640 480 -426 640 -640 457 -480 640 -640 427 -640 480 -640 480 -640 428 -640 335 -640 429 -640 457 -640 391 -640 480 -640 428 -640 427 -640 426 -640 521 -427 640 -568 320 -640 427 -640 427 -640 513 -640 480 -500 272 -640 419 -640 480 -640 480 -375 500 -640 425 -640 480 -640 428 -500 375 -427 640 -640 480 -600 448 -640 480 -640 426 -500 375 -640 480 -640 480 -426 640 -640 424 -640 427 -500 375 -640 427 -512 640 -640 480 -640 437 -640 428 -480 640 -640 552 -639 640 -424 640 -640 378 -640 640 -640 417 -480 640 -640 480 -480 640 -640 424 -640 425 -640 427 -640 432 -640 427 -438 640 -500 500 -640 426 -640 441 -640 427 -640 427 -427 640 -640 427 -480 640 -640 359 -612 612 -500 375 -500 332 -612 612 -640 425 -500 375 -640 318 -640 428 -640 427 -500 457 -500 333 -640 480 -360 640 -640 426 -640 427 -640 427 -478 640 -413 640 -640 555 -640 357 -480 640 -612 612 -480 640 -640 427 -500 375 -427 640 -425 640 -640 462 -535 298 -640 427 -640 480 -640 428 -640 480 -427 640 -373 336 -640 480 -640 480 -640 426 -640 427 -640 427 -640 480 -640 427 -500 333 -640 465 -500 396 -500 333 -640 427 -640 426 -427 640 -640 480 -640 428 -480 640 -640 480 -500 375 -640 427 -500 333 -640 282 -640 427 -640 389 -640 544 -640 640 -640 427 -480 640 -500 375 -640 428 -640 459 -299 640 -640 411 -640 610 -612 612 -640 361 -426 640 -640 400 -640 640 -640 426 -640 480 -640 426 -640 480 -500 375 -427 640 -431 640 -640 640 -640 480 -427 640 -480 640 -640 427 -640 376 -640 480 -640 430 -500 335 -640 426 -640 427 -640 360 -338 500 -428 640 -640 429 -426 640 -427 640 -334 500 -427 640 -366 640 -640 427 -640 424 -640 480 -480 640 -640 508 -640 426 -640 457 -640 479 -500 396 -480 640 -640 424 -640 480 -640 470 -640 468 -427 640 -640 427 -640 481 -500 375 -427 640 -640 427 -640 480 -640 361 -640 426 -640 412 -640 480 -640 480 -640 515 -640 413 -640 480 -500 376 -640 360 -640 431 -357 500 -640 478 -478 640 -500 333 -640 428 -457 640 -500 500 -640 428 -640 428 -640 427 -640 427 -500 375 -640 480 -480 640 -640 480 -640 480 -640 480 -640 427 -427 640 -480 640 -494 640 -640 480 -640 480 -640 429 -640 427 -640 425 -640 480 -500 333 -640 480 -427 640 -612 612 -640 480 -640 480 -640 480 -448 336 -640 480 -640 393 -428 640 -640 480 -640 427 -500 404 -640 480 -640 427 -640 427 -640 427 -640 426 -640 428 -640 480 -640 605 -640 480 -640 427 -500 358 -640 480 -480 640 -640 480 -640 319 -500 375 -640 421 -640 427 -640 424 -640 480 -500 375 -424 640 -640 480 -640 480 -640 480 -640 480 -640 604 -640 480 -640 413 -640 427 -375 500 -640 429 -640 480 -640 428 -640 480 -640 427 -427 640 -628 640 -640 480 -500 335 -640 425 -640 427 -612 612 -640 425 -640 360 -320 240 -640 427 -500 377 -612 612 -427 640 -640 480 -640 489 -640 427 -640 424 -640 479 -640 427 -640 480 -478 640 -425 640 -640 424 -500 278 -427 640 -360 640 -640 411 -640 427 -640 480 -640 480 -640 425 -640 480 -640 368 -500 375 -640 480 -640 373 -443 640 -438 640 -640 480 -640 427 -480 640 -375 500 -500 393 -640 480 -640 316 -427 640 -640 428 -640 360 -480 640 -480 640 -640 425 -640 402 -640 480 -640 421 -500 375 -640 348 -427 640 -640 426 -640 427 -640 480 -444 640 -640 480 -640 445 -640 360 -640 480 -477 640 -640 418 -640 369 -428 640 -640 360 -500 375 -640 426 -500 375 -640 480 -640 427 -640 424 -640 438 -640 480 -640 480 -640 458 -359 640 -640 428 -640 427 -640 427 -640 462 -640 427 -640 480 -640 428 -640 480 -640 427 -500 333 -427 640 -424 640 -640 478 -500 375 -640 360 -480 640 -612 612 -640 426 -333 500 -640 640 -640 480 -640 428 -425 640 -640 428 -640 427 -640 464 -480 640 -640 427 -640 480 -640 639 -426 320 -640 426 -478 640 -640 420 -640 640 -640 427 -640 617 -500 375 -640 453 -427 640 -640 425 -640 457 -500 309 -500 375 -640 512 -480 640 -640 480 -426 640 -640 427 -640 480 -640 427 -500 500 -640 509 -640 428 -640 427 -480 640 -541 640 -640 423 -478 640 -640 427 -500 375 -640 427 -428 640 -500 333 -640 428 -640 426 -640 428 -640 480 -640 427 -640 480 -640 480 -428 640 -375 500 -500 375 -556 640 -640 463 -640 480 -500 375 -640 436 -640 427 -640 427 -444 640 -640 425 -640 480 -640 406 -480 640 -612 612 -640 480 -480 640 -640 428 -640 426 -500 333 -640 425 -640 427 -500 375 -640 427 -481 640 -640 427 -500 375 -640 425 -640 425 -640 480 -640 474 -640 480 -640 480 -640 428 -640 427 -640 427 -640 445 -640 480 -375 500 -640 480 -640 480 -466 640 -272 307 -333 500 -640 480 -640 427 -640 424 -640 480 -640 480 -481 640 -640 640 -640 427 -612 612 -640 631 -640 480 -640 427 -428 640 -640 214 -640 418 -640 427 -640 480 -612 612 -473 640 -640 361 -640 269 -375 500 -407 640 -428 640 -640 426 -426 640 -640 480 -640 480 -640 427 -480 640 -640 427 -332 500 -640 425 -640 480 -640 424 -640 427 -640 480 -375 500 -640 427 -500 375 -427 640 -640 445 -640 481 -424 640 -500 375 -500 333 -640 436 -640 480 -480 640 -640 480 -500 366 -375 500 -640 427 -640 381 -640 377 -640 426 -640 427 -640 453 -640 361 -640 426 -501 640 -640 427 -396 640 -612 612 -640 427 -500 331 -640 426 -640 429 -500 375 -640 428 -640 640 -640 480 -640 363 -640 480 -640 480 -426 640 -640 480 -640 427 -640 424 -500 375 -640 380 -640 480 -640 427 -640 425 -640 248 -640 480 -480 640 -480 640 -500 408 -480 640 -500 375 -640 381 -640 480 -426 640 -640 428 -640 426 -640 480 -480 640 -640 480 -640 427 -640 396 -640 480 -640 480 -640 259 -500 375 -580 640 -640 480 -596 640 -427 640 -640 480 -640 411 -333 500 -640 427 -500 375 -640 426 -640 480 -640 480 -640 427 -640 480 -612 612 -640 484 -640 360 -457 640 -500 341 -640 496 -425 640 -640 480 -640 480 -430 640 -500 424 -480 640 -640 427 -640 480 -505 640 -640 480 -512 640 -354 500 -640 427 -500 375 -640 640 -500 375 -640 426 -640 427 -427 640 -333 500 -640 457 -640 480 -427 640 -500 309 -640 427 -427 640 -640 480 -640 359 -640 512 -640 424 -640 480 -640 428 -333 500 -640 480 -480 640 -500 378 -640 427 -426 640 -500 375 -240 320 -240 320 -481 640 -457 640 -640 427 -640 427 -612 612 -640 425 -640 611 -478 640 -640 457 -501 640 -640 427 -640 484 -640 480 -427 640 -500 375 -640 480 -480 640 -480 640 -640 399 -427 640 -640 425 -640 427 -640 480 -640 318 -640 480 -500 375 -640 480 -640 480 -640 480 -640 428 -640 564 -640 426 -640 429 -427 640 -640 457 -640 426 -500 333 -640 480 -640 480 -640 488 -640 480 -500 313 -640 427 -640 480 -640 480 -640 427 -640 480 -500 334 -640 480 -640 471 -640 360 -640 491 -640 478 -640 427 -640 513 -465 640 -506 640 -500 333 -500 490 -480 640 -640 426 -640 369 -500 357 -640 495 -640 428 -640 425 -640 424 -640 460 -513 640 -640 428 -640 480 -640 480 -640 427 -333 500 -640 480 -640 428 -640 466 -640 486 -480 640 -480 640 -500 286 -427 640 -640 348 -403 500 -640 421 -640 480 -640 483 -640 579 -640 427 -640 380 -425 640 -640 480 -640 480 -640 482 -640 436 -640 427 -640 427 -640 478 -427 640 -640 427 -500 351 -640 480 -640 426 -640 426 -640 426 -640 480 -640 480 -640 426 -640 480 -640 427 -640 480 -640 480 -640 480 -640 426 -640 427 -500 333 -640 491 -640 424 -640 480 -427 640 -640 427 -640 480 -640 480 -640 427 -640 480 -640 427 -640 480 -427 640 -640 480 -640 480 -426 640 -640 427 -500 375 -426 640 -480 640 -428 640 -500 500 -640 480 -640 479 -486 640 -640 427 -640 480 -640 480 -640 428 -640 427 -640 426 -640 480 -640 418 -640 480 -640 427 -427 640 -640 480 -375 500 -640 480 -640 427 -640 427 -429 640 -500 375 -640 423 -595 640 -640 360 -640 480 -480 640 -640 473 -427 640 -640 427 -480 640 -480 640 -640 480 -426 640 -640 413 -612 612 -640 480 -480 640 -640 480 -480 640 -500 375 -640 427 -480 640 -640 424 -500 375 -504 351 -640 480 -640 427 -500 375 -640 427 -640 476 -640 426 -640 531 -640 427 -640 480 -640 428 -640 480 -500 354 -480 640 -480 640 -500 375 -640 581 -640 480 -640 404 -500 399 -640 253 -500 333 -640 428 -640 427 -500 333 -640 427 -640 427 -640 640 -640 427 -640 425 -640 427 -640 426 -640 428 -640 480 -640 426 -500 321 -640 457 -427 640 -640 433 -640 425 -640 424 -480 640 -640 480 -640 463 -500 361 -426 640 -640 458 -640 480 -640 480 -336 500 -640 427 -640 480 -612 612 -640 428 -500 375 -640 480 -480 640 -640 427 -640 421 -640 334 -640 480 -640 640 -500 334 -640 424 -640 427 -640 501 -640 480 -640 574 -640 425 -480 640 -500 375 -500 460 -427 640 -500 332 -375 500 -640 640 -640 480 -500 375 -427 640 -640 364 -640 480 -640 428 -640 371 -500 375 -500 375 -640 427 -640 427 -640 480 -640 480 -480 640 -375 500 -640 478 -500 358 -640 429 -640 480 -640 419 -640 425 -494 640 -480 640 -640 448 -640 565 -640 480 -640 360 -427 640 -640 480 -640 480 -640 562 -640 480 -640 428 -640 480 -640 480 -495 640 -480 640 -500 375 -375 500 -482 640 -640 389 -425 640 -640 480 -428 640 -640 480 -428 640 -640 224 -640 435 -640 428 -640 480 -640 427 -500 334 -640 427 -640 427 -427 640 -640 480 -640 426 -640 427 -453 640 -640 481 -500 334 -500 375 -500 375 -426 640 -480 640 -426 640 -457 640 -383 640 -640 480 -612 612 -333 500 -427 640 -640 489 -612 612 -640 413 -640 426 -640 427 -602 640 -640 427 -640 480 -640 480 -640 640 -640 480 -640 427 -640 427 -640 425 -640 427 -612 612 -400 500 -640 427 -640 480 -640 481 -640 480 -640 425 -640 586 -640 428 -640 579 -640 427 -640 425 -427 640 -500 334 -640 428 -375 500 -640 478 -640 480 -640 427 -640 480 -640 480 -640 426 -640 359 -478 640 -640 480 -640 442 -333 500 -640 424 -640 428 -500 332 -640 508 -500 375 -640 427 -640 480 -640 427 -640 475 -425 640 -640 427 -640 436 -460 640 -640 427 -640 360 -640 480 -427 640 -458 640 -640 426 -480 640 -375 500 -640 427 -640 384 -500 333 -640 427 -640 428 -500 333 -640 362 -640 425 -426 640 -640 429 -500 332 -480 640 -640 456 -640 411 -426 640 -640 475 -640 480 -500 333 -500 378 -375 500 -640 480 -640 480 -640 426 -640 444 -640 640 -640 478 -640 426 -640 480 -640 426 -640 480 -425 640 -640 464 -640 478 -480 640 -640 426 -640 426 -640 318 -333 500 -640 328 -500 375 -375 500 -500 331 -640 427 -640 427 -640 480 -612 612 -436 640 -640 480 -640 480 -640 427 -427 640 -375 500 -512 640 -500 350 -640 480 -640 593 -640 425 -375 500 -334 500 -640 480 -640 427 -640 480 -480 640 -480 640 -387 640 -640 427 -640 480 -640 480 -640 427 -612 612 -640 480 -640 458 -500 333 -500 345 -640 408 -640 480 -640 480 -500 375 -457 640 -500 375 -640 364 -640 480 -427 640 -640 426 -333 500 -640 480 -640 480 -458 640 -612 640 -480 640 -640 427 -450 338 -640 428 -640 480 -480 640 -428 640 -640 468 -640 558 -480 640 -612 612 -640 480 -530 640 -640 480 -640 396 -612 612 -640 427 -480 640 -640 423 -640 480 -480 640 -640 529 -500 380 -483 500 -640 427 -500 375 -480 640 -427 640 -480 640 -424 640 -640 427 -640 426 -640 424 -640 480 -640 427 -640 428 -427 640 -640 427 -612 612 -427 640 -640 480 -640 427 -480 640 -640 427 -640 480 -426 640 -427 640 -375 500 -500 376 -427 640 -480 640 -640 427 -428 640 -500 375 -640 480 -640 480 -640 480 -359 640 -640 480 -640 480 -612 612 -535 640 -400 229 -640 480 -640 480 -640 480 -640 427 -612 612 -375 500 -640 480 -336 500 -640 427 -640 480 -640 414 -640 426 -375 500 -640 427 -640 427 -640 480 -428 640 -640 480 -480 640 -640 517 -640 480 -640 480 -500 335 -640 490 -500 333 -352 288 -480 640 -640 425 -640 485 -640 427 -640 480 -640 427 -486 640 -640 427 -640 427 -320 216 -500 375 -445 600 -500 334 -500 339 -612 612 -640 428 -480 640 -640 427 -500 375 -306 640 -640 423 -640 427 -424 640 -640 427 -640 480 -500 333 -612 612 -500 333 -640 360 -640 480 -400 400 -424 640 -640 480 -640 416 -612 612 -640 480 -640 480 -640 479 -640 480 -640 480 -640 426 -640 429 -640 424 -640 427 -640 480 -640 480 -640 480 -612 612 -496 640 -640 480 -426 640 -640 425 -640 480 -640 425 -640 411 -640 640 -360 640 -480 640 -640 480 -640 480 -640 427 -362 640 -640 480 -640 426 -640 426 -500 333 -640 439 -640 511 -640 455 -640 516 -640 427 -612 612 -640 366 -480 640 -640 480 -640 428 -500 375 -640 427 -500 375 -480 640 -640 480 -612 612 -640 451 -640 480 -640 480 -500 375 -640 426 -640 427 -640 480 -640 427 -640 428 -480 640 -385 640 -480 640 -640 480 -640 480 -640 480 -640 480 -640 425 -612 612 -640 640 -640 480 -500 313 -640 480 -640 383 -612 612 -640 479 -640 480 -640 480 -640 457 -500 334 -450 290 -371 640 -640 480 -599 640 -640 453 -640 427 -480 640 -500 375 -640 426 -640 427 -640 477 -640 480 -640 427 -426 640 -640 480 -640 512 -500 375 -640 445 -427 640 -500 401 -480 640 -640 428 -640 480 -640 480 -640 360 -640 454 -640 516 -640 480 -640 479 -640 480 -640 640 -500 400 -640 480 -480 640 -640 480 -640 360 -640 425 -640 426 -359 640 -500 439 -480 640 -640 480 -640 480 -519 640 -491 640 -480 640 -640 479 -640 424 -640 427 -640 360 -640 402 -426 640 -640 480 -481 640 -426 640 -640 425 -427 640 -612 612 -640 480 -640 427 -426 640 -481 640 -480 640 -640 384 -640 426 -612 612 -640 480 -640 361 -640 640 -359 640 -640 480 -640 427 -640 427 -640 472 -500 375 -640 427 -426 640 -640 480 -640 480 -640 480 -640 426 -612 612 -640 428 -640 422 -640 427 -640 427 -640 427 -640 425 -640 428 -640 480 -388 450 -640 427 -640 480 -640 360 -640 427 -500 375 -640 425 -640 426 -640 481 -427 640 -640 484 -640 443 -640 425 -424 640 -478 640 -427 640 -640 438 -500 375 -640 480 -500 375 -500 358 -481 640 -640 428 -480 640 -480 640 -640 480 -425 640 -640 480 -640 329 -640 427 -640 426 -640 480 -640 480 -640 427 -640 483 -640 480 -428 640 -640 425 -500 375 -614 640 -500 334 -640 427 -375 500 -640 640 -500 400 -640 480 -640 447 -640 428 -640 427 -332 500 -480 640 -500 333 -640 520 -500 333 -467 350 -427 640 -640 427 -640 427 -375 500 -640 427 -425 640 -640 426 -640 512 -640 427 -640 429 -640 429 -500 375 -428 640 -500 333 -640 428 -640 426 -640 480 -500 333 -640 480 -478 640 -640 380 -640 481 -640 402 -640 427 -500 375 -500 332 -640 372 -640 318 -640 480 -640 427 -640 478 -640 335 -500 375 -640 426 -640 480 -640 640 -640 480 -480 640 -640 480 -640 480 -375 500 -324 500 -640 432 -640 425 -640 480 -640 360 -640 427 -640 480 -640 428 -427 640 -500 400 -640 480 -640 480 -640 480 -375 500 -621 480 -640 386 -500 500 -640 426 -640 480 -640 480 -500 375 -640 480 -640 398 -640 427 -500 375 -640 494 -480 640 -424 640 -640 480 -640 366 -640 480 -446 640 -640 427 -500 415 -640 427 -331 500 -612 612 -640 427 -640 480 -640 511 -427 640 -640 428 -600 400 -640 424 -640 480 -640 480 -640 427 -640 468 -640 480 -640 427 -640 480 -640 359 -640 418 -640 427 -375 500 -640 480 -640 427 -500 375 -480 640 -640 480 -478 640 -612 612 -640 480 -640 431 -640 427 -480 640 -640 428 -480 640 -464 640 -480 640 -612 612 -500 375 -640 428 -640 480 -640 503 -500 333 -428 640 -640 480 -640 281 -640 428 -422 640 -352 640 -640 480 -640 427 -500 339 -640 432 -640 427 -640 427 -427 640 -640 424 -332 500 -640 427 -612 612 -640 361 -640 427 -480 640 -640 541 -640 434 -640 428 -480 640 -640 480 -640 480 -640 402 -640 480 -640 428 -501 640 -427 640 -426 640 -640 426 -640 426 -444 640 -480 640 -640 480 -612 612 -640 429 -640 445 -640 364 -640 427 -640 426 -640 425 -640 360 -428 640 -500 375 -640 523 -640 480 -640 519 -640 480 -640 426 -640 426 -640 428 -640 480 -480 640 -425 640 -640 640 -640 480 -612 612 -640 480 -640 427 -640 480 -640 427 -427 640 -640 427 -640 427 -375 500 -640 480 -640 427 -404 500 -640 415 -640 480 -640 480 -427 640 -640 428 -500 375 -480 640 -512 640 -640 480 -427 640 -640 366 -481 640 -500 375 -640 480 -640 426 -640 432 -640 480 -640 427 -640 427 -640 426 -640 427 -640 480 -612 612 -640 480 -640 480 -500 375 -640 427 -640 435 -533 640 -480 640 -427 640 -640 427 -640 427 -640 426 -640 426 -640 480 -640 480 -500 375 -640 640 -640 427 -640 482 -640 427 -640 480 -600 450 -427 640 -640 424 -426 640 -640 480 -640 425 -640 480 -463 640 -640 457 -640 400 -640 427 -640 517 -640 426 -640 425 -640 427 -640 480 -427 640 -426 640 -480 640 -640 427 -640 480 -640 512 -640 428 -427 640 -640 467 -426 640 -640 424 -640 640 -426 640 -640 444 -640 427 -640 427 -640 375 -640 428 -480 640 -640 426 -640 500 -640 427 -640 427 -427 640 -640 361 -640 480 -480 640 -500 328 -640 480 -640 480 -426 640 -640 480 -640 478 -640 454 -640 400 -640 480 -640 480 -640 360 -640 480 -640 480 -500 375 -480 640 -640 640 -640 480 -640 480 -640 427 -640 480 -640 480 -640 480 -640 428 -640 640 -640 427 -640 428 -640 393 -640 406 -500 375 -640 491 -473 640 -427 640 -640 480 -640 480 -500 332 -640 425 -640 472 -640 480 -640 428 -375 500 -640 384 -640 480 -640 480 -426 640 -640 427 -375 500 -640 480 -640 480 -640 480 -375 500 -640 427 -640 457 -539 640 -640 639 -500 375 -640 427 -640 428 -640 461 -480 640 -640 427 -500 375 -428 640 -480 640 -240 320 -640 425 -640 479 -612 612 -640 426 -640 480 -640 425 -640 432 -640 480 -640 313 -640 480 -640 640 -640 480 -500 375 -640 429 -640 421 -640 428 -640 480 -428 640 -640 480 -640 488 -640 480 -500 285 -640 359 -640 480 -640 383 -476 640 -480 640 -480 640 -640 344 -480 640 -640 427 -640 383 -480 640 -480 640 -640 480 -441 500 -480 640 -640 480 -640 425 -640 640 -640 480 -640 480 -640 427 -482 482 -640 428 -640 425 -640 428 -480 640 -640 427 -640 360 -640 426 -480 640 -500 339 -500 350 -640 480 -500 334 -640 458 -640 425 -640 480 -481 640 -640 425 -640 480 -640 428 -640 480 -640 480 -640 480 -640 480 -500 375 -640 427 -640 255 -480 640 -640 480 -335 640 -640 427 -640 426 -600 449 -640 480 -640 478 -425 640 -612 612 -640 480 -500 333 -640 427 -640 480 -332 500 -640 301 -481 640 -640 479 -384 640 -640 468 -640 383 -640 480 -291 455 -640 480 -640 427 -640 480 -480 640 -427 640 -640 424 -640 427 -500 375 -640 458 -480 640 -480 640 -640 426 -640 640 -480 640 -448 336 -500 375 -640 425 -640 425 -601 640 -640 480 -640 427 -640 427 -425 640 -500 416 -640 427 -640 541 -640 481 -640 480 -640 409 -640 427 -640 399 -500 375 -640 427 -449 640 -640 427 -640 478 -640 480 -640 425 -640 428 -500 333 -640 598 -500 333 -375 500 -427 640 -640 213 -500 333 -640 480 -640 444 -429 640 -500 375 -640 480 -500 375 -427 640 -640 614 -640 427 -480 640 -640 480 -480 640 -426 640 -640 427 -428 640 -640 426 -640 457 -640 424 -640 480 -640 426 -640 427 -640 426 -423 640 -640 480 -640 427 -640 360 -640 427 -640 480 -436 640 -428 640 -375 500 -640 530 -640 480 -500 375 -640 427 -640 428 -640 480 -640 426 -640 424 -640 480 -514 640 -640 428 -640 427 -640 428 -640 427 -640 413 -612 612 -640 424 -640 480 -640 312 -640 427 -640 427 -640 426 -485 640 -640 360 -427 640 -640 513 -640 427 -640 629 -640 426 -640 427 -640 640 -640 427 -640 480 -640 480 -640 480 -478 640 -640 465 -400 320 -500 375 -640 427 -472 640 -640 480 -480 640 -640 438 -500 375 -350 500 -640 475 -640 480 -640 480 -612 612 -640 442 -360 640 -640 480 -640 481 -640 480 -640 388 -640 480 -640 480 -640 334 -640 401 -640 425 -640 478 -640 412 -640 480 -577 448 -426 640 -406 500 -640 427 -478 640 -480 640 -640 427 -500 374 -427 640 -478 640 -640 480 -640 469 -640 428 -640 480 -640 427 -640 480 -500 375 -640 480 -640 480 -500 400 -640 480 -640 480 -396 640 -640 415 -640 427 -640 480 -640 426 -500 375 -480 640 -640 427 -640 480 -640 360 -640 426 -480 640 -640 427 -640 427 -640 428 -500 333 -640 427 -640 480 -640 425 -427 640 -640 538 -640 480 -424 640 -640 441 -501 640 -640 480 -480 640 -640 474 -640 429 -640 425 -640 378 -640 480 -640 480 -640 430 -640 426 -496 640 -480 640 -500 375 -640 480 -480 640 -480 360 -500 378 -640 480 -480 640 -640 480 -640 613 -640 428 -427 640 -482 640 -500 356 -640 427 -640 640 -480 640 -640 438 -426 640 -640 480 -640 360 -640 360 -640 427 -640 483 -500 375 -640 428 -640 409 -500 334 -640 429 -640 427 -457 640 -640 444 -640 480 -640 427 -640 427 -640 427 -640 383 -425 640 -480 640 -424 640 -500 475 -640 480 -640 427 -640 480 -640 427 -640 427 -640 427 -640 480 -640 427 -640 425 -427 640 -640 480 -480 640 -480 640 -640 427 -500 258 -640 480 -640 480 -640 480 -640 450 -640 480 -640 359 -640 604 -640 427 -500 275 -640 443 -451 640 -640 426 -500 333 -640 427 -640 425 -427 640 -640 309 -640 480 -640 427 -640 435 -427 640 -640 480 -640 361 -640 427 -640 480 -640 479 -640 480 -640 480 -427 640 -640 480 -633 640 -640 480 -640 360 -332 500 -640 478 -427 640 -640 396 -640 427 -640 427 -480 640 -480 640 -458 640 -500 375 -425 640 -640 427 -428 640 -640 424 -480 640 -640 480 -640 480 -640 427 -640 396 -612 612 -306 640 -640 480 -640 480 -640 480 -640 427 -640 480 -361 640 -640 480 -500 333 -640 427 -640 480 -640 427 -426 640 -478 640 -640 480 -640 426 -640 403 -640 579 -640 480 -427 640 -640 425 -640 480 -612 612 -640 425 -500 375 -640 360 -640 480 -640 427 -640 427 -640 480 -640 427 -640 480 -480 640 -426 640 -640 480 -640 480 -640 425 -640 427 -446 640 -640 480 -484 500 -425 640 -640 640 -471 500 -640 480 -640 439 -640 428 -612 612 -600 600 -500 333 -640 480 -640 480 -640 425 -640 480 -640 480 -640 443 -640 485 -640 480 -426 640 -423 640 -640 419 -640 480 -424 640 -640 436 -640 511 -640 449 -640 426 -640 480 -640 480 -480 640 -640 426 -640 480 -640 427 -640 480 -640 403 -640 640 -640 426 -480 640 -500 400 -640 480 -176 144 -500 375 -500 400 -640 426 -500 384 -640 480 -640 480 -506 640 -640 427 -480 640 -640 424 -640 360 -640 427 -640 427 -640 427 -640 427 -640 445 -640 480 -640 474 -640 480 -640 427 -640 480 -427 640 -478 640 -640 480 -640 403 -640 426 -640 480 -640 448 -640 480 -640 640 -640 423 -640 529 -640 427 -640 427 -612 612 -640 480 -640 427 -640 427 -480 640 -640 427 -640 427 -426 640 -640 428 -640 359 -640 427 -640 480 -640 427 -640 360 -640 427 -480 640 -423 640 -500 375 -640 391 -640 480 -480 640 -640 427 -640 427 -640 332 -375 500 -640 425 -640 480 -640 360 -493 640 -331 500 -640 427 -640 480 -480 640 -640 480 -640 425 -640 480 -427 640 -480 640 -640 341 -480 640 -480 640 -376 500 -640 487 -428 640 -640 480 -640 426 -640 449 -480 640 -640 427 -480 640 -640 428 -596 640 -640 396 -640 369 -480 640 -640 480 -640 480 -480 640 -640 427 -500 375 -640 425 -640 480 -640 360 -640 480 -640 480 -640 470 -427 640 -500 272 -612 612 -640 425 -375 500 -500 333 -478 640 -640 428 -612 612 -640 427 -640 480 -471 640 -640 426 -500 375 -500 375 -400 500 -640 576 -640 480 -500 281 -400 640 -500 375 -640 471 -431 640 -375 500 -640 427 -471 500 -640 480 -640 553 -640 480 -427 640 -480 640 -480 640 -375 500 -529 640 -640 423 -360 640 -500 375 -600 450 -500 333 -426 640 -640 436 -640 480 -480 640 -640 424 -640 480 -640 426 -640 480 -427 640 -640 480 -640 427 -640 425 -640 425 -640 480 -640 426 -480 640 -640 478 -640 480 -427 640 -640 500 -640 383 -640 427 -640 480 -640 430 -640 429 -640 480 -640 384 -640 425 -480 640 -428 640 -310 500 -640 478 -640 428 -640 361 -640 427 -640 427 -640 640 -640 456 -500 405 -640 427 -491 640 -480 640 -500 374 -427 640 -333 500 -500 401 -640 478 -480 640 -640 407 -640 425 -428 640 -640 427 -640 360 -479 640 -640 424 -612 612 -640 427 -640 488 -500 375 -499 640 -480 640 -640 480 -640 523 -640 427 -640 360 -640 524 -640 574 -480 640 -640 427 -640 426 -640 427 -640 516 -426 640 -640 480 -480 640 -500 375 -427 640 -500 376 -427 640 -480 640 -640 480 -640 426 -640 523 -640 481 -640 427 -500 375 -640 480 -398 500 -640 640 -640 480 -640 480 -640 426 -424 640 -500 333 -640 427 -640 480 -640 429 -455 640 -640 480 -640 426 -480 640 -640 427 -640 451 -640 424 -640 480 -427 640 -424 640 -640 480 -500 281 -640 427 -426 640 -640 405 -612 612 -427 640 -426 640 -500 333 -640 427 -633 640 -640 480 -640 361 -640 427 -640 427 -480 640 -556 407 -640 480 -640 424 -640 480 -640 477 -637 640 -640 639 -334 500 -640 480 -640 480 -426 640 -480 640 -640 480 -502 640 -640 614 -427 640 -640 480 -640 424 -425 640 -640 512 -480 640 -640 427 -640 479 -640 360 -500 375 -424 640 -640 480 -640 428 -640 389 -640 435 -640 480 -480 640 -640 480 -640 480 -425 282 -426 640 -640 425 -640 424 -640 480 -640 363 -480 640 -640 480 -640 428 -640 499 -640 431 -640 427 -640 427 -640 427 -640 480 -555 640 -640 479 -640 480 -427 640 -640 427 -640 480 -640 428 -640 428 -640 480 -640 427 -640 330 -640 480 -427 640 -427 640 -640 480 -640 480 -500 416 -514 640 -375 500 -640 427 -480 640 -640 427 -640 427 -450 450 -640 424 -423 640 -640 428 -427 640 -640 425 -500 375 -640 447 -640 480 -640 426 -640 424 -640 430 -640 450 -640 425 -640 480 -427 640 -421 500 -512 640 -640 427 -640 480 -482 389 -640 428 -640 480 -397 640 -640 549 -640 428 -375 500 -640 480 -640 640 -640 434 -640 640 -640 433 -640 480 -640 360 -640 480 -640 480 -480 640 -640 428 -640 480 -320 240 -640 428 -427 640 -640 426 -480 640 -640 427 -640 427 -500 368 -640 427 -500 333 -500 333 -640 480 -266 187 -640 424 -425 640 -640 480 -640 480 -640 480 -500 324 -640 478 -626 640 -640 426 -426 640 -640 480 -480 640 -640 427 -640 427 -480 640 -640 480 -480 640 -640 428 -640 480 -640 330 -640 425 -640 360 -478 640 -500 333 -640 428 -480 640 -500 333 -640 480 -500 332 -640 428 -427 640 -640 480 -640 480 -640 427 -640 531 -640 361 -640 480 -640 429 -640 360 -640 512 -640 425 -424 500 -426 640 -640 427 -640 427 -640 473 -419 640 -640 532 -463 640 -640 480 -640 480 -640 427 -640 425 -640 480 -640 497 -640 480 -500 333 -640 480 -500 375 -640 517 -640 398 -612 612 -640 426 -425 640 -640 485 -640 480 -633 640 -640 427 -480 640 -406 610 -429 640 -640 519 -640 426 -427 640 -640 480 -640 425 -425 640 -500 375 -427 640 -500 375 -640 480 -640 427 -640 428 -640 480 -426 640 -640 480 -640 480 -640 479 -640 427 -640 424 -480 640 -500 400 -640 361 -640 480 -478 640 -640 425 -640 427 -480 640 -640 329 -640 446 -640 426 -640 428 -428 640 -612 612 -640 480 -640 480 -640 427 -480 640 -640 457 -587 640 -640 425 -640 427 -500 375 -640 427 -640 427 -640 639 -426 640 -640 480 -640 640 -640 427 -428 640 -640 457 -640 425 -640 427 -640 480 -427 640 -640 426 -640 480 -640 428 -640 478 -640 480 -480 640 -640 457 -478 640 -428 640 -640 487 -500 333 -640 480 -640 454 -368 640 -640 427 -372 640 -640 425 -640 426 -640 426 -640 480 -640 425 -640 480 -500 500 -425 640 -640 442 -500 335 -640 480 -640 427 -640 426 -640 427 -375 500 -500 336 -640 482 -640 396 -640 480 -640 480 -640 360 -352 288 -640 480 -640 480 -640 426 -640 480 -427 640 -640 475 -640 426 -375 500 -640 427 -640 425 -480 640 -640 640 -640 521 -640 427 -640 480 -640 400 -640 480 -375 500 -353 640 -375 500 -600 400 -640 425 -428 640 -640 512 -640 480 -640 478 -480 640 -500 480 -500 333 -480 640 -640 427 -640 640 -640 480 -640 428 -427 640 -600 450 -339 500 -426 640 -480 640 -640 427 -640 427 -640 428 -640 418 -500 332 -640 480 -640 426 -500 375 -640 480 -480 640 -640 426 -640 514 -640 436 -640 480 -622 640 -640 425 -500 500 -427 640 -640 425 -640 427 -480 640 -500 321 -640 480 -480 640 -424 640 -640 419 -640 428 -409 640 -640 478 -640 426 -640 430 -640 360 -480 640 -500 334 -400 500 -480 640 -640 427 -640 428 -640 421 -500 375 -480 640 -640 480 -480 640 -640 272 -640 427 -640 426 -640 480 -640 360 -640 480 -640 480 -640 482 -375 500 -640 425 -640 383 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -494 330 -640 428 -640 427 -640 428 -640 427 -640 427 -640 470 -640 425 -375 500 -426 640 -385 500 -640 425 -500 375 -640 458 -640 480 -640 214 -480 640 -640 541 -640 427 -480 640 -640 480 -640 427 -640 427 -500 381 -612 612 -640 435 -480 640 -640 503 -640 480 -500 387 -640 479 -640 478 -640 480 -640 480 -640 426 -640 427 -640 428 -640 480 -500 333 -640 480 -640 480 -424 640 -640 480 -640 435 -640 480 -457 640 -612 612 -640 427 -500 375 -640 425 -640 480 -640 517 -640 427 -640 266 -640 360 -476 640 -640 427 -640 413 -640 480 -640 480 -640 427 -480 640 -480 640 -500 303 -640 427 -500 375 -640 389 -480 640 -427 640 -427 640 -640 480 -640 480 -640 480 -640 308 -511 640 -640 523 -640 427 -424 640 -426 640 -640 480 -640 480 -375 500 -500 375 -500 375 -600 400 -512 640 -640 480 -640 480 -640 480 -640 425 -612 612 -640 427 -640 480 -427 640 -500 374 -640 480 -500 375 -640 426 -640 480 -612 612 -640 427 -640 424 -427 640 -480 640 -320 216 -499 640 -415 640 -374 500 -640 427 -640 480 -640 426 -640 360 -480 640 -640 480 -640 427 -341 500 -640 480 -640 480 -428 640 -480 640 -640 480 -640 480 -640 478 -428 640 -640 483 -424 640 -640 480 -640 426 -640 480 -640 359 -516 408 -640 480 -640 480 -480 640 -417 640 -640 478 -500 333 -640 480 -427 640 -640 360 -640 545 -640 480 -640 482 -640 506 -640 480 -640 480 -640 482 -640 480 -640 559 -427 640 -480 640 -480 640 -640 507 -500 335 -640 360 -550 400 -640 427 -640 480 -500 334 -480 640 -640 609 -500 333 -640 480 -640 426 -600 450 -640 480 -640 427 -640 480 -480 640 -640 480 -640 426 -512 640 -640 426 -640 425 -640 480 -480 640 -500 375 -640 381 -640 427 -640 427 -640 509 -640 427 -640 400 -640 480 -640 429 -480 640 -640 480 -640 618 -640 426 -427 640 -640 480 -640 427 -500 335 -603 640 -427 640 -640 480 -640 480 -582 640 -640 427 -500 332 -640 445 -478 640 -640 480 -640 400 -509 640 -612 612 -640 427 -640 425 -640 480 -640 480 -500 256 -640 427 -426 640 -640 426 -500 375 -640 480 -288 352 -640 480 -640 480 -480 640 -640 427 -500 375 -640 480 -480 640 -640 426 -640 427 -640 428 -500 375 -640 427 -640 640 -640 480 -640 427 -640 480 -640 480 -640 348 -640 425 -640 613 -427 640 -640 427 -500 500 -640 427 -480 640 -479 640 -640 639 -600 400 -640 480 -640 427 -320 240 -480 640 -500 375 -640 234 -640 427 -640 427 -640 427 -500 333 -500 375 -640 433 -640 427 -640 424 -640 480 -640 480 -612 612 -470 332 -640 322 -640 480 -640 521 -640 427 -640 427 -500 375 -640 480 -640 427 -640 480 -640 501 -640 424 -460 640 -640 419 -640 480 -640 480 -500 375 -640 427 -640 427 -333 500 -640 426 -375 500 -500 374 -640 512 -500 375 -640 425 -640 480 -480 640 -480 640 -427 640 -500 375 -640 427 -480 640 -640 427 -640 480 -612 612 -640 480 -480 640 -640 555 -457 640 -500 375 -480 640 -640 480 -500 323 -612 612 -640 480 -640 480 -640 406 -640 480 -640 427 -640 429 -640 426 -480 640 -500 332 -640 427 -640 480 -425 640 -426 640 -640 425 -375 500 -458 640 -640 427 -640 427 -640 427 -427 640 -640 445 -640 427 -640 427 -640 457 -500 500 -640 427 -640 427 -640 563 -640 419 -428 640 -500 375 -640 456 -640 480 -640 427 -427 640 -375 500 -640 427 -479 640 -640 426 -640 427 -500 335 -640 427 -640 383 -500 338 -640 426 -427 640 -640 480 -500 375 -426 640 -640 424 -500 332 -640 480 -424 640 -640 480 -421 640 -640 176 -640 480 -640 426 -640 639 -640 480 -480 640 -640 425 -640 480 -640 480 -640 429 -500 375 -612 612 -640 566 -640 427 -640 526 -480 640 -480 640 -427 640 -640 428 -425 640 -640 517 -640 433 -240 320 -640 426 -417 640 -640 428 -640 425 -361 500 -640 523 -640 480 -640 480 -640 478 -640 427 -640 427 -425 640 -500 332 -500 375 -640 427 -426 640 -640 427 -640 425 -500 333 -480 640 -427 640 -500 362 -640 480 -640 533 -640 428 -427 640 -640 480 -361 640 -500 375 -640 480 -640 522 -500 456 -427 640 -500 321 -640 480 -640 427 -640 425 -480 640 -640 480 -640 360 -640 480 -335 500 -480 640 -427 640 -500 375 -500 334 -478 640 -640 427 -640 480 -640 427 -425 640 -640 427 -375 500 -640 480 -640 427 -612 612 -640 429 -640 480 -437 640 -424 640 -480 640 -640 427 -640 426 -640 429 -640 480 -640 419 -426 640 -640 480 -640 428 -640 480 -640 480 -500 375 -640 480 -640 427 -640 457 -640 425 -640 427 -500 375 -640 395 -468 640 -640 407 -640 436 -640 427 -426 640 -640 427 -640 427 -480 640 -640 428 -500 375 -640 427 -640 425 -640 480 -375 500 -427 640 -500 375 -640 480 -612 612 -640 478 -640 426 -500 281 -640 480 -427 640 -425 640 -640 480 -640 425 -480 640 -268 640 -480 640 -640 426 -500 333 -640 427 -618 640 -500 333 -640 426 -640 420 -612 612 -640 575 -640 427 -640 427 -430 640 -427 640 -640 480 -480 640 -333 500 -640 427 -427 640 -640 480 -429 640 -640 319 -375 500 -640 428 -640 429 -640 427 -612 612 -640 480 -415 640 -640 426 -612 612 -640 480 -640 276 -640 640 -427 640 -640 427 -640 480 -640 480 -640 468 -640 426 -480 640 -640 508 -640 233 -443 640 -640 480 -640 480 -500 375 -640 427 -640 468 -640 427 -448 640 -480 640 -459 640 -640 426 -640 428 -640 428 -640 480 -426 640 -640 428 -640 480 -424 640 -640 425 -640 480 -333 500 -500 375 -640 425 -640 480 -640 425 -640 480 -500 335 -640 403 -640 480 -640 480 -640 480 -640 427 -640 425 -640 427 -500 333 -640 427 -640 480 -640 480 -640 480 -640 425 -640 480 -640 480 -640 480 -640 480 -640 428 -425 640 -640 426 -640 427 -640 256 -612 612 -640 427 -640 427 -640 480 -500 375 -480 640 -500 333 -640 567 -640 426 -339 500 -640 423 -640 480 -480 640 -640 533 -480 640 -640 428 -640 427 -640 480 -612 612 -640 480 -640 427 -426 640 -640 426 -640 436 -480 640 -640 427 -640 426 -640 480 -480 640 -640 478 -429 640 -640 427 -323 500 -500 375 -480 640 -500 494 -333 500 -500 375 -640 400 -427 640 -640 428 -240 180 -612 612 -598 640 -376 479 -640 480 -333 500 -427 640 -480 640 -640 458 -640 480 -480 640 -640 480 -480 640 -500 332 -640 310 -640 480 -500 375 -640 640 -640 427 -640 480 -640 427 -640 480 -500 375 -640 428 -427 640 -500 376 -426 640 -480 640 -640 480 -640 427 -640 428 -640 480 -640 439 -400 400 -425 640 -640 640 -640 431 -444 500 -500 333 -640 427 -640 425 -640 427 -559 640 -640 428 -426 640 -640 480 -471 640 -640 429 -640 427 -500 375 -480 640 -640 427 -640 480 -640 480 -640 427 -640 480 -480 640 -640 499 -426 640 -612 612 -500 375 -640 425 -427 640 -640 415 -640 427 -640 513 -640 480 -500 375 -640 434 -640 429 -640 480 -333 500 -640 427 -640 425 -640 480 -640 480 -500 375 -318 500 -480 640 -640 481 -500 375 -500 375 -640 480 -480 640 -500 306 -640 480 -640 480 -640 480 -436 640 -480 640 -640 480 -640 480 -640 426 -427 640 -640 427 -640 428 -500 400 -640 424 -333 500 -486 640 -480 640 -640 428 -640 444 -514 640 -640 406 -640 480 -480 640 -425 640 -640 378 -458 640 -640 426 -640 480 -500 375 -469 640 -480 640 -427 640 -640 480 -640 427 -478 640 -640 427 -334 500 -640 427 -500 443 -427 640 -640 480 -640 425 -502 640 -375 500 -640 427 -500 334 -500 375 -427 640 -480 640 -640 427 -640 429 -443 640 -640 441 -500 333 -449 640 -500 333 -640 424 -270 360 -640 498 -333 500 -480 640 -429 640 -640 478 -640 360 -640 480 -640 437 -480 640 -480 640 -640 640 -640 480 -640 426 -640 480 -640 480 -425 640 -640 480 -427 640 -640 480 -640 427 -640 479 -640 427 -500 500 -640 344 -640 354 -640 480 -427 640 -640 418 -640 427 -640 428 -640 485 -640 426 -500 376 -612 612 -500 375 -500 375 -640 499 -427 640 -480 640 -640 561 -640 429 -640 480 -480 640 -612 612 -500 332 -480 640 -640 427 -375 500 -480 640 -640 373 -480 640 -640 427 -640 418 -640 480 -640 426 -427 640 -640 480 -480 640 -433 640 -640 369 -640 427 -500 335 -640 495 -640 487 -612 612 -359 640 -640 480 -598 640 -500 400 -425 640 -640 427 -640 427 -500 336 -640 298 -640 480 -640 480 -412 640 -640 480 -640 595 -480 640 -375 500 -478 640 -640 480 -480 640 -500 375 -500 305 -500 326 -640 480 -640 383 -612 612 -640 424 -640 427 -640 428 -500 375 -640 512 -640 480 -571 640 -500 375 -500 375 -640 480 -640 427 -640 480 -640 429 -640 427 -428 640 -640 427 -640 427 -640 480 -480 640 -640 426 -640 427 -500 345 -640 480 -436 500 -640 480 -640 496 -640 480 -480 640 -640 426 -640 426 -640 424 -640 390 -640 425 -640 425 -640 427 -640 451 -640 480 -640 425 -640 428 -640 640 -640 480 -640 425 -640 479 -640 427 -640 427 -640 480 -640 480 -500 393 -640 427 -480 640 -640 453 -640 480 -640 480 -640 480 -640 395 -640 427 -640 598 -640 426 -640 427 -640 427 -500 375 -640 480 -640 480 -375 500 -375 500 -640 480 -640 427 -640 640 -640 480 -480 640 -640 480 -640 480 -640 422 -423 640 -640 443 -500 332 -640 480 -640 426 -640 480 -640 640 -480 640 -640 424 -640 427 -640 359 -640 424 -640 428 -640 424 -480 640 -427 640 -640 480 -376 640 -640 427 -640 480 -429 640 -640 443 -640 427 -480 640 -640 425 -480 640 -459 640 -640 361 -640 445 -225 225 -500 329 -640 480 -426 640 -640 480 -640 427 -428 640 -640 480 -640 426 -493 500 -640 480 -224 300 -640 427 -612 612 -640 480 -640 427 -640 426 -640 480 -640 640 -640 427 -640 451 -640 480 -640 425 -480 640 -500 333 -640 424 -640 451 -640 480 -640 427 -640 480 -640 480 -478 640 -400 600 -480 640 -640 480 -425 640 -640 480 -640 426 -346 640 -640 480 -500 270 -640 480 -640 480 -640 426 -640 559 -640 480 -428 640 -640 426 -640 391 -640 392 -612 612 -640 480 -633 640 -500 287 -480 640 -640 480 -640 512 -640 355 -427 640 -640 427 -640 428 -640 426 -640 543 -425 640 -500 333 -498 635 -640 480 -640 480 -640 429 -640 426 -640 428 -640 480 -640 478 -519 640 -640 428 -640 480 -640 426 -500 500 -640 427 -640 352 -360 480 -640 480 -640 240 -500 375 -427 640 -640 480 -500 333 -640 427 -480 640 -500 388 -500 334 -640 426 -640 480 -500 333 -640 480 -480 640 -640 480 -500 375 -640 480 -640 480 -500 375 -640 480 -640 426 -480 640 -640 480 -640 426 -640 376 -500 333 -640 427 -500 387 -333 500 -640 403 -640 480 -600 400 -640 480 -427 640 -384 640 -640 427 -500 329 -640 480 -640 425 -640 424 -640 544 -640 436 -640 426 -640 640 -640 427 -640 478 -640 427 -640 424 -365 640 -500 375 -640 427 -500 375 -640 427 -640 458 -640 480 -480 640 -500 375 -500 335 -480 640 -612 612 -446 640 -640 480 -640 480 -640 476 -600 402 -500 333 -500 334 -500 375 -426 640 -475 640 -500 350 -640 453 -529 640 -640 426 -640 248 -480 640 -554 640 -360 640 -640 427 -480 640 -500 375 -640 480 -640 480 -640 480 -640 427 -640 480 -640 439 -512 640 -500 333 -640 427 -640 428 -640 427 -640 480 -428 640 -500 375 -640 480 -640 480 -500 375 -640 399 -640 427 -640 480 -427 640 -480 640 -640 457 -640 427 -640 411 -640 480 -500 375 -640 480 -500 375 -640 437 -640 480 -640 360 -500 375 -640 479 -640 427 -640 427 -640 480 -332 500 -640 480 -640 480 -640 480 -500 255 -640 480 -427 640 -640 425 -640 427 -500 332 -640 480 -640 424 -640 453 -500 333 -480 640 -612 612 -640 480 -612 612 -528 512 -640 480 -640 480 -640 480 -471 640 -429 640 -640 640 -640 430 -640 425 -411 640 -640 428 -640 425 -640 427 -640 418 -500 375 -427 640 -640 427 -508 640 -640 425 -427 640 -640 360 -640 360 -424 283 -640 421 -640 479 -640 480 -429 640 -640 418 -640 427 -640 427 -375 500 -640 426 -375 500 -640 445 -640 440 -480 640 -640 451 -500 375 -640 510 -640 480 -640 480 -640 466 -640 334 -640 333 -480 640 -640 480 -640 480 -640 427 -640 640 -500 375 -640 480 -640 428 -640 428 -500 375 -640 426 -427 640 -640 426 -640 604 -612 612 -640 428 -640 426 -640 427 -640 428 -640 428 -500 500 -640 480 -478 640 -640 444 -640 426 -640 427 -640 480 -640 428 -480 640 -640 425 -640 494 -375 500 -640 480 -640 425 -359 640 -640 458 -640 426 -640 427 -640 480 -640 425 -333 500 -640 427 -500 320 -333 500 -500 375 -500 375 -500 375 -640 480 -640 640 -480 640 -351 234 -500 333 -500 375 -640 426 -480 640 -480 640 -640 427 -640 489 -640 480 -640 427 -640 480 -640 640 -640 640 -500 334 -640 480 -640 427 -640 427 -640 426 -640 426 -640 427 -640 427 -640 356 -640 480 -538 640 -640 360 -640 427 -640 427 -640 480 -640 427 -480 640 -640 299 -640 425 -640 480 -320 240 -640 426 -480 360 -640 480 -640 426 -640 480 -640 480 -640 427 -500 375 -640 111 -640 427 -480 640 -640 478 -640 448 -612 612 -640 425 -640 426 -640 427 -640 425 -333 500 -425 640 -640 425 -427 640 -500 334 -480 640 -480 640 -640 480 -640 427 -640 281 -640 428 -500 364 -640 480 -640 424 -640 480 -640 428 -640 426 -334 500 -500 375 -427 640 -640 480 -640 424 -442 640 -480 640 -333 500 -500 500 -500 375 -640 480 -631 640 -640 480 -427 640 -640 429 -640 426 -640 428 -480 640 -640 362 -640 480 -640 471 -640 480 -640 480 -640 640 -640 457 -640 425 -427 640 -640 464 -640 427 -640 427 -428 640 -640 480 -640 427 -428 640 -640 480 -640 480 -480 640 -640 439 -640 428 -332 500 -500 363 -640 424 -640 480 -640 427 -500 375 -640 425 -640 427 -427 640 -640 425 -640 480 -640 427 -471 640 -468 500 -640 427 -640 480 -375 500 -640 480 -640 426 -640 314 -640 427 -480 640 -640 427 -500 375 -640 480 -640 424 -640 480 -640 591 -438 640 -640 425 -640 425 -640 480 -427 640 -640 480 -425 640 -640 480 -500 375 -640 480 -640 429 -640 480 -427 640 -500 436 -478 640 -640 480 -500 375 -500 375 -500 333 -500 375 -397 500 -640 360 -500 375 -640 480 -640 427 -480 640 -640 427 -640 480 -640 470 -640 480 -640 428 -640 427 -640 480 -500 375 -427 640 -640 480 -640 458 -640 480 -640 425 -640 390 -640 549 -640 428 -640 480 -640 427 -500 333 -640 427 -426 640 -640 428 -640 428 -640 483 -640 455 -500 333 -426 640 -640 451 -500 301 -640 478 -424 640 -480 640 -640 480 -426 640 -640 364 -492 500 -640 480 -640 478 -640 480 -480 640 -500 375 -480 640 -640 429 -375 500 -640 268 -480 640 -427 640 -640 356 -640 358 -640 481 -640 480 -612 612 -640 424 -640 480 -612 612 -500 333 -326 500 -491 640 -640 491 -640 388 -640 478 -640 425 -640 480 -640 360 -500 375 -640 427 -480 640 -640 428 -640 426 -640 480 -480 640 -612 612 -640 480 -500 375 -640 386 -640 424 -424 640 -640 424 -425 640 -640 427 -640 480 -480 640 -640 427 -640 450 -640 480 -640 480 -640 640 -640 428 -427 640 -640 411 -640 514 -480 640 -480 640 -640 480 -640 426 -480 640 -640 480 -500 376 -425 640 -500 333 -640 427 -640 614 -640 427 -500 375 -640 426 -500 333 -640 480 -375 500 -500 375 -640 426 -317 398 -640 480 -640 512 -640 425 -500 333 -640 480 -640 578 -424 640 -640 480 -500 375 -640 480 -640 480 -480 640 -612 612 -640 425 -640 480 -640 480 -640 428 -640 480 -640 427 -640 426 -612 612 -640 427 -640 361 -640 424 -640 480 -480 640 -640 424 -500 333 -640 425 -640 480 -640 427 -640 434 -640 479 -640 425 -640 488 -640 478 -480 640 -334 500 -640 426 -640 424 -640 427 -427 640 -640 512 -640 419 -640 392 -500 375 -612 612 -640 480 -600 399 -640 427 -640 480 -500 339 -428 640 -640 427 -640 480 -480 640 -640 480 -640 606 -640 480 -640 427 -640 480 -640 427 -640 480 -500 333 -640 427 -500 375 -500 434 -640 404 -427 640 -640 426 -480 640 -640 427 -640 480 -500 358 -500 335 -500 313 -640 425 -500 375 -640 429 -500 375 -480 640 -640 427 -478 640 -640 481 -500 348 -640 427 -640 478 -480 640 -640 408 -632 640 -480 640 -640 355 -640 427 -375 500 -500 351 -640 426 -343 500 -640 480 -500 332 -640 480 -500 375 -500 375 -640 427 -640 428 -480 640 -640 426 -640 427 -640 480 -480 640 -640 480 -640 308 -640 427 -640 426 -640 480 -333 500 -640 426 -640 427 -640 427 -480 640 -640 480 -640 427 -375 500 -640 401 -640 426 -640 480 -500 281 -563 422 -640 426 -640 427 -640 427 -640 427 -640 425 -640 422 -640 427 -640 429 -640 480 -626 640 -480 640 -427 640 -640 480 -640 480 -640 416 -427 640 -640 480 -640 494 -500 333 -500 333 -640 448 -640 425 -480 640 -480 640 -640 480 -640 425 -500 331 -640 480 -640 515 -500 399 -640 428 -500 400 -640 480 -640 426 -640 428 -640 271 -640 480 -500 375 -427 640 -640 427 -640 428 -640 427 -640 470 -640 473 -640 427 -640 360 -333 500 -640 427 -427 640 -640 480 -480 640 -640 427 -500 384 -640 405 -640 480 -640 426 -640 480 -640 360 -640 448 -640 640 -640 425 -640 480 -640 480 -640 480 -640 425 -480 640 -640 489 -306 640 -640 383 -640 389 -480 640 -640 480 -500 327 -480 640 -358 640 -640 426 -640 458 -640 427 -640 428 -640 480 -640 480 -320 240 -640 412 -640 439 -640 427 -640 428 -640 540 -640 480 -640 480 -640 480 -612 612 -640 531 -640 480 -427 640 -640 480 -640 480 -480 640 -640 427 -640 424 -640 402 -332 500 -640 359 -640 427 -427 640 -640 427 -640 433 -640 360 -640 480 -640 480 -426 640 -640 427 -640 426 -480 640 -640 478 -500 375 -480 640 -640 480 -640 424 -640 480 -640 480 -640 427 -640 491 -640 480 -480 640 -400 300 -640 448 -640 480 -640 426 -640 427 -640 423 -640 427 -640 630 -640 480 -640 406 -640 429 -640 480 -640 480 -640 480 -640 479 -612 612 -427 640 -478 640 -640 427 -328 500 -640 360 -640 480 -480 320 -409 640 -640 427 -640 480 -640 426 -640 427 -640 480 -500 333 -640 428 -640 427 -640 480 -640 440 -640 480 -640 459 -640 480 -480 640 -640 480 -640 425 -640 501 -612 612 -640 480 -640 513 -640 480 -640 428 -640 482 -640 480 -640 480 -500 375 -488 500 -640 480 -561 640 -640 480 -500 375 -640 480 -640 480 -640 424 -612 612 -612 612 -640 429 -500 401 -640 427 -640 427 -480 640 -640 426 -480 640 -500 375 -640 480 -640 427 -640 360 -640 427 -640 480 -427 640 -425 640 -427 640 -640 480 -640 428 -640 426 -640 480 -640 480 -640 480 -603 640 -640 553 -640 449 -640 480 -640 427 -456 640 -478 640 -428 640 -640 424 -480 640 -640 428 -640 427 -640 438 -640 427 -500 333 -640 480 -500 334 -640 451 -480 640 -640 428 -500 382 -480 640 -640 480 -500 384 -640 427 -640 478 -640 480 -500 375 -351 500 -640 457 -479 640 -640 600 -518 640 -640 441 -480 640 -480 640 -640 426 -640 480 -480 640 -640 480 -426 640 -480 640 -612 612 -640 480 -640 433 -480 640 -500 375 -640 421 -640 480 -640 480 -640 480 -427 640 -480 640 -640 430 -450 450 -640 496 -640 480 -480 640 -480 640 -500 375 -640 427 -640 427 -640 491 -640 480 -640 480 -640 333 -640 427 -386 640 -500 336 -640 480 -600 357 -180 225 -640 480 -640 479 -500 373 -640 426 -500 334 -576 430 -333 500 -612 612 -332 500 -640 427 -480 640 -640 480 -478 640 -480 640 -640 640 -640 480 -640 533 -640 427 -640 480 -640 396 -640 512 -640 426 -640 480 -612 612 -300 200 -640 480 -640 480 -640 480 -640 480 -524 640 -640 320 -640 428 -640 433 -640 427 -640 480 -640 480 -500 375 -640 512 -500 375 -640 480 -427 640 -640 480 -427 640 -640 427 -428 640 -612 612 -640 427 -375 500 -500 333 -333 500 -640 481 -480 640 -640 424 -640 428 -640 480 -640 428 -426 640 -427 640 -399 500 -640 480 -612 612 -640 480 -640 427 -640 427 -427 640 -640 480 -333 500 -640 441 -640 480 -640 426 -640 640 -480 640 -481 640 -334 500 -640 480 -500 375 -375 500 -480 640 -480 640 -640 427 -640 554 -480 640 -640 403 -640 264 -640 480 -397 500 -640 480 -640 427 -640 427 -640 480 -640 428 -610 640 -640 561 -640 427 -480 640 -640 325 -640 480 -480 640 -480 640 -480 640 -640 480 -640 427 -640 480 -640 480 -640 457 -480 640 -640 640 -375 500 -640 427 -480 640 -500 333 -640 428 -640 425 -480 640 -427 640 -640 425 -640 640 -640 480 -478 640 -640 480 -640 429 -600 400 -500 500 -640 480 -640 481 -640 480 -385 308 -640 480 -640 427 -640 428 -640 640 -640 426 -500 375 -640 421 -375 500 -640 471 -640 404 -640 427 -375 500 -463 640 -553 640 -427 640 -418 500 -640 385 -478 640 -517 640 -640 478 -427 640 -640 400 -612 612 -640 271 -500 342 -640 466 -640 467 -640 480 -640 417 -640 427 -612 612 -513 640 -480 640 -640 511 -426 640 -640 425 -339 500 -640 480 -612 612 -480 640 -429 640 -640 458 -488 640 -612 612 -640 427 -640 571 -500 358 -640 425 -640 480 -640 427 -640 512 -640 425 -427 640 -640 480 -640 426 -505 640 -500 333 -640 426 -426 640 -425 640 -426 640 -500 375 -640 427 -640 427 -640 426 -640 608 -500 375 -454 640 -640 427 -640 360 -600 450 -425 640 -640 427 -640 481 -640 423 -640 426 -640 457 -640 480 -480 640 -640 426 -640 480 -640 425 -640 429 -424 640 -640 438 -500 375 -426 640 -428 640 -640 480 -640 427 -640 480 -480 640 -612 612 -500 379 -640 428 -640 480 -640 480 -295 480 -500 375 -640 398 -640 429 -612 612 -640 427 -480 640 -640 432 -640 480 -486 640 -640 480 -640 640 -425 640 -640 426 -640 436 -640 428 -640 454 -640 360 -612 612 -640 453 -612 612 -500 334 -425 640 -640 426 -640 427 -640 480 -480 640 -640 426 -640 463 -640 427 -640 428 -640 513 -640 480 -640 483 -640 425 -640 426 -640 512 -640 426 -470 500 -640 427 -640 359 -640 429 -640 426 -427 640 -640 480 -640 480 -640 447 -640 427 -462 640 -480 640 -640 480 -475 500 -640 480 -640 428 -612 612 -640 481 -640 480 -640 426 -500 375 -640 428 -640 480 -640 640 -296 352 -640 425 -640 480 -640 508 -640 429 -640 640 -640 428 -578 453 -500 375 -640 428 -640 360 -425 640 -640 480 -640 372 -500 334 -640 553 -640 480 -480 640 -640 551 -640 428 -640 427 -428 640 -640 427 -640 428 -640 427 -482 640 -427 640 -375 500 -640 480 -500 400 -640 427 -640 446 -480 640 -480 640 -640 480 -640 480 -427 640 -427 640 -640 480 -640 427 -640 480 -640 480 -640 484 -640 360 -640 480 -612 612 -640 480 -640 480 -640 426 -640 480 -612 612 -640 426 -640 639 -640 480 -640 428 -640 428 -640 427 -640 428 -640 427 -480 640 -640 427 -640 426 -480 640 -640 427 -640 640 -640 478 -640 480 -640 480 -640 427 -375 500 -612 612 -640 427 -640 520 -640 480 -640 427 -640 480 -427 640 -640 480 -480 640 -640 640 -640 426 -640 480 -427 640 -640 427 -640 436 -640 480 -427 640 -375 500 -640 480 -640 480 -640 480 -640 427 -640 427 -500 332 -640 472 -640 480 -640 427 -300 640 -640 480 -360 640 -427 640 -640 480 -640 416 -429 640 -480 640 -640 348 -640 427 -428 640 -640 425 -640 480 -480 640 -640 480 -480 640 -500 432 -640 428 -640 426 -640 428 -640 427 -640 480 -640 640 -427 640 -640 480 -640 468 -500 372 -629 640 -640 480 -500 333 -480 640 -480 640 -426 640 -640 480 -640 427 -480 640 -640 428 -427 640 -428 640 -332 500 -640 360 -612 612 -640 480 -640 480 -640 445 -640 398 -640 457 -640 426 -427 640 -640 426 -640 480 -640 640 -640 425 -640 480 -640 427 -425 640 -640 427 -640 424 -500 334 -640 442 -612 612 -385 289 -640 480 -428 640 -640 401 -500 375 -640 541 -640 428 -640 427 -500 375 -640 480 -500 375 -640 480 -640 408 -500 375 -300 451 -640 429 -500 375 -640 404 -612 612 -500 375 -640 427 -640 528 -640 480 -640 425 -427 640 -640 428 -434 640 -640 426 -392 640 -640 427 -480 640 -500 333 -640 427 -640 480 -640 360 -500 375 -640 480 -640 424 -640 426 -640 425 -430 640 -640 504 -640 480 -640 489 -640 480 -494 338 -398 640 -640 477 -640 425 -426 640 -640 426 -640 424 -640 563 -348 486 -640 480 -640 480 -480 640 -640 458 -640 480 -480 640 -413 481 -640 427 -640 458 -640 427 -640 428 -640 480 -586 640 -640 480 -640 333 -640 480 -640 469 -640 427 -426 640 -612 612 -500 333 -640 427 -480 640 -500 281 -640 415 -640 426 -640 480 -500 380 -640 428 -612 612 -640 427 -640 480 -640 480 -640 336 -375 500 -480 640 -640 426 -640 427 -640 492 -375 500 -448 621 -480 640 -427 640 -426 640 -500 375 -427 640 -640 427 -640 428 -640 416 -500 375 -640 427 -640 428 -480 640 -640 424 -500 375 -640 480 -640 480 -640 480 -640 480 -640 635 -427 640 -640 427 -640 424 -640 480 -640 428 -500 375 -640 427 -640 426 -640 480 -640 480 -500 500 -640 399 -640 361 -480 640 -640 480 -640 417 -500 332 -640 480 -640 427 -640 426 -426 640 -640 427 -640 480 -640 480 -480 640 -427 640 -598 640 -640 480 -333 500 -640 457 -640 425 -612 612 -427 640 -500 375 -640 480 -640 426 -478 640 -640 426 -640 427 -640 427 -500 321 -500 375 -640 481 -640 426 -640 453 -640 480 -640 427 -640 425 -640 480 -640 396 -640 457 -640 427 -640 480 -640 428 -450 500 -487 500 -427 640 -640 427 -500 375 -640 480 -640 480 -640 429 -640 480 -433 640 -640 427 -426 640 -640 425 -640 479 -640 480 -500 335 -640 469 -640 428 -427 640 -427 640 -500 333 -640 427 -640 480 -500 333 -640 480 -612 612 -640 480 -428 640 -500 375 -375 500 -480 640 -640 480 -640 427 -640 480 -516 640 -640 427 -640 479 -640 427 -612 612 -375 500 -640 428 -640 417 -429 640 -499 640 -640 480 -640 480 -427 640 -640 427 -500 375 -640 480 -640 640 -425 640 -480 640 -640 426 -640 480 -428 640 -600 400 -640 521 -640 426 -640 427 -640 427 -640 425 -500 375 -640 480 -640 425 -640 428 -480 640 -428 640 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -640 344 -640 430 -479 640 -640 426 -427 640 -640 457 -640 427 -640 426 -640 478 -640 426 -640 513 -640 426 -640 427 -640 427 -480 640 -640 580 -640 433 -640 433 -640 427 -640 480 -640 425 -612 612 -640 546 -500 281 -640 361 -640 427 -427 640 -500 375 -640 401 -640 480 -500 375 -640 427 -640 424 -640 427 -640 423 -480 640 -640 480 -427 640 -367 500 -640 480 -640 480 -640 428 -425 640 -640 425 -480 640 -640 478 -607 640 -500 333 -500 375 -640 427 -640 480 -640 368 -640 428 -640 480 -640 427 -500 337 -640 480 -491 640 -640 427 -640 477 -500 375 -640 433 -640 480 -640 480 -640 427 -425 640 -640 427 -500 454 -555 640 -640 335 -640 480 -640 427 -640 480 -640 480 -640 480 -500 375 -640 427 -500 375 -640 426 -480 640 -640 480 -426 640 -426 640 -427 640 -640 423 -640 468 -640 427 -640 480 -480 640 -375 500 -640 427 -640 480 -500 375 -640 480 -640 480 -640 512 -427 640 -640 480 -640 480 -480 640 -428 640 -640 480 -337 500 -500 375 -640 480 -640 480 -640 440 -640 427 -640 360 -640 427 -640 640 -600 400 -640 480 -640 425 -461 500 -375 500 -480 640 -640 426 -640 480 -612 612 -640 478 -500 333 -375 500 -640 480 -441 640 -427 640 -640 480 -640 480 -640 493 -640 479 -500 375 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -500 375 -640 429 -427 640 -640 480 -640 480 -640 361 -640 427 -358 500 -480 640 -640 427 -500 486 -640 213 -640 428 -640 427 -640 480 -640 427 -640 426 -633 640 -375 500 -640 427 -640 462 -640 428 -640 480 -640 427 -640 429 -640 480 -640 427 -375 500 -640 478 -640 480 -480 640 -640 480 -640 427 -459 640 -598 640 -500 375 -427 640 -640 425 -640 478 -640 426 -375 500 -640 426 -640 425 -640 424 -640 479 -640 480 -640 480 -640 259 -361 640 -427 640 -480 640 -640 548 -640 424 -640 425 -640 426 -640 424 -640 427 -612 612 -640 480 -500 313 -640 480 -640 480 -640 480 -478 640 -640 427 -640 480 -640 489 -640 428 -361 640 -428 640 -640 356 -640 418 -500 334 -612 612 -640 480 -396 500 -640 478 -640 427 -600 400 -426 640 -640 480 -500 375 -476 640 -480 640 -640 427 -480 640 -640 427 -640 426 -640 444 -430 640 -640 427 -500 375 -426 640 -480 640 -640 480 -640 480 -640 480 -640 640 -640 427 -640 480 -640 393 -640 480 -640 546 -640 475 -640 480 -640 427 -500 375 -640 423 -640 427 -640 425 -640 480 -640 360 -457 640 -375 500 -640 427 -425 640 -640 427 -480 640 -427 640 -640 425 -640 480 -640 480 -640 480 -640 480 -640 426 -424 640 -640 425 -640 480 -640 480 -500 334 -427 640 -426 640 -640 427 -480 640 -480 640 -640 457 -640 361 -640 428 -418 640 -428 640 -640 480 -640 397 -640 406 -500 342 -478 640 -640 640 -480 640 -640 480 -640 426 -612 612 -375 500 -640 480 -640 360 -640 457 -640 480 -640 428 -640 428 -640 428 -640 318 -640 427 -307 500 -612 612 -640 427 -640 427 -361 500 -480 640 -640 480 -480 640 -640 426 -640 427 -640 426 -640 424 -640 480 -640 513 -640 480 -640 427 -512 640 -612 612 -427 640 -429 640 -640 479 -640 427 -640 427 -640 431 -500 375 -640 360 -480 640 -427 640 -612 612 -640 480 -640 425 -480 640 -500 333 -511 640 -640 427 -640 454 -640 396 -640 360 -640 480 -640 478 -500 375 -640 480 -640 427 -640 358 -640 480 -640 399 -375 500 -640 512 -640 423 -427 640 -500 338 -480 640 -640 425 -428 640 -388 640 -500 375 -640 427 -500 400 -427 640 -640 426 -640 480 -640 427 -640 427 -640 480 -640 480 -640 640 -640 427 -480 640 -640 480 -612 612 -640 480 -417 640 -640 373 -640 479 -640 436 -640 428 -480 640 -640 428 -473 335 -640 479 -480 640 -640 436 -640 427 -640 524 -478 640 -640 480 -480 640 -500 240 -640 478 -640 309 -640 428 -640 480 -480 640 -640 602 -640 432 -427 640 -592 640 -640 427 -640 480 -361 640 -375 500 -600 399 -500 400 -427 640 -640 427 -640 431 -425 640 -640 425 -466 640 -640 427 -640 427 -640 480 -640 425 -640 433 -500 375 -500 332 -375 500 -640 427 -640 393 -500 375 -640 437 -640 360 -480 640 -640 477 -375 500 -612 612 -640 512 -480 640 -480 640 -480 640 -500 333 -426 640 -500 375 -468 640 -375 500 -640 480 -640 436 -640 480 -640 428 -640 429 -640 480 -500 375 -640 427 -419 640 -640 427 -640 524 -480 640 -427 640 -640 480 -640 480 -640 480 -640 423 -640 427 -427 640 -427 640 -469 500 -640 501 -532 640 -640 640 -640 481 -640 426 -640 361 -500 367 -640 393 -500 375 -640 480 -640 480 -640 480 -640 426 -640 425 -512 640 -640 426 -360 640 -375 500 -480 640 -640 424 -480 640 -480 640 -612 612 -500 375 -640 480 -427 640 -552 640 -640 427 -480 640 -612 612 -480 640 -640 480 -640 427 -640 480 -640 427 -640 426 -640 480 -300 400 -480 640 -500 375 -640 480 -360 480 -500 333 -640 386 -500 296 -640 480 -640 640 -640 428 -640 480 -640 427 -640 480 -640 480 -640 425 -500 334 -640 512 -640 480 -640 640 -640 480 -640 462 -640 428 -500 375 -640 480 -640 480 -408 640 -640 480 -640 428 -640 427 -450 313 -640 426 -640 480 -448 640 -640 357 -612 612 -640 425 -640 480 -640 480 -375 500 -640 480 -639 640 -640 480 -480 640 -500 375 -640 427 -640 427 -640 480 -640 425 -640 427 -640 640 -640 478 -640 480 -640 435 -612 612 -640 482 -640 478 -640 494 -500 383 -640 494 -640 416 -640 585 -500 333 -640 480 -480 640 -343 512 -640 410 -428 640 -640 485 -640 480 -428 640 -640 638 -640 480 -612 612 -640 425 -640 553 -640 426 -640 480 -640 479 -426 640 -640 427 -640 427 -640 453 -500 400 -400 500 -640 426 -640 480 -640 426 -200 145 -427 640 -640 480 -640 480 -640 480 -427 640 -640 427 -458 640 -458 640 -500 319 -640 427 -640 386 -640 480 -640 480 -640 427 -500 375 -640 429 -640 457 -640 425 -512 640 -640 426 -640 426 -351 640 -612 612 -375 500 -640 427 -640 480 -612 612 -480 640 -640 360 -456 640 -547 640 -500 333 -640 427 -640 480 -640 480 -640 427 -640 236 -426 640 -640 427 -640 480 -640 480 -640 427 -640 425 -640 378 -500 375 -640 480 -640 479 -640 469 -640 480 -500 311 -640 529 -375 500 -640 427 -640 480 -640 480 -640 226 -480 640 -640 480 -640 425 -377 500 -640 389 -360 640 -640 422 -640 440 -411 640 -640 458 -640 480 -640 480 -640 427 -640 426 -640 478 -640 426 -640 273 -640 480 -640 439 -640 414 -640 481 -640 428 -640 427 -640 480 -640 480 -640 426 -640 427 -387 500 -640 427 -640 480 -500 375 -640 512 -640 426 -640 480 -640 427 -480 640 -640 326 -500 375 -640 283 -512 640 -640 427 -640 480 -500 403 -640 427 -640 480 -640 381 -500 440 -500 375 -333 500 -427 640 -640 425 -640 480 -480 640 -640 427 -640 480 -640 402 -640 427 -640 480 -640 427 -480 640 -427 640 -640 425 -640 495 -640 453 -640 616 -426 640 -639 640 -470 640 -640 470 -640 426 -500 400 -480 640 -640 427 -640 425 -640 480 -640 480 -431 640 -640 427 -500 375 -640 427 -640 427 -512 640 -480 640 -640 259 -640 429 -512 640 -640 428 -640 427 -640 427 -640 427 -640 427 -640 433 -453 640 -500 375 -640 516 -500 375 -640 640 -640 480 -640 425 -640 407 -640 318 -640 480 -640 480 -480 640 -426 640 -462 640 -375 500 -640 360 -640 400 -640 426 -640 427 -640 458 -640 331 -500 375 -428 640 -640 479 -640 426 -640 427 -640 503 -640 427 -640 480 -619 413 -640 480 -512 640 -412 500 -480 640 -500 375 -640 480 -640 480 -480 640 -640 463 -640 480 -640 426 -480 640 -640 428 -374 640 -640 360 -640 480 -478 640 -424 640 -640 427 -426 640 -500 375 -375 500 -640 457 -640 427 -640 427 -427 640 -640 480 -461 500 -412 500 -640 480 -640 428 -301 500 -640 480 -640 480 -500 281 -500 375 -480 640 -640 426 -640 426 -500 375 -480 640 -457 640 -500 400 -640 425 -640 478 -640 640 -427 640 -512 640 -640 480 -500 375 -640 427 -640 480 -640 425 -612 612 -640 480 -640 427 -375 500 -416 640 -640 499 -500 400 -640 480 -640 480 -640 396 -640 480 -640 425 -640 393 -640 640 -640 480 -640 480 -500 442 -640 427 -640 480 -640 223 -640 480 -640 480 -640 480 -640 480 -640 428 -640 480 -640 379 -480 640 -640 427 -365 500 -640 427 -480 640 -640 428 -640 243 -640 480 -640 480 -500 375 -640 428 -426 640 -480 640 -427 640 -500 500 -478 640 -640 427 -480 640 -427 640 -375 500 -428 640 -640 425 -640 444 -640 426 -640 452 -640 427 -640 462 -500 375 -640 640 -640 480 -429 640 -500 500 -640 480 -640 430 -427 640 -375 500 -640 427 -375 500 -640 426 -640 439 -612 612 -640 436 -640 480 -640 428 -412 640 -640 480 -426 640 -640 454 -640 426 -640 480 -375 500 -640 480 -640 640 -640 480 -640 425 -480 640 -640 426 -640 480 -640 427 -500 375 -375 500 -640 468 -428 640 -428 640 -480 640 -480 640 -425 640 -640 428 -427 640 -640 427 -640 414 -612 612 -640 406 -640 480 -640 480 -640 435 -449 640 -640 427 -640 492 -640 480 -480 640 -640 516 -375 500 -640 480 -315 500 -640 426 -640 428 -500 375 -640 480 -428 640 -425 640 -640 426 -480 640 -640 360 -640 348 -640 479 -479 640 -385 289 -640 480 -640 427 -500 346 -374 500 -640 427 -640 427 -640 480 -640 428 -383 640 -640 480 -640 478 -640 428 -640 480 -428 640 -640 480 -202 360 -640 426 -640 375 -500 356 -640 480 -640 581 -640 427 -640 427 -640 640 -480 640 -640 425 -375 500 -500 375 -427 640 -640 400 -640 480 -640 480 -640 480 -335 500 -480 640 -640 424 -640 361 -640 427 -480 640 -375 500 -640 480 -640 480 -640 480 -500 375 -640 480 -480 640 -640 480 -332 500 -640 480 -640 480 -640 480 -427 640 -640 427 -612 612 -640 480 -640 640 -500 375 -640 480 -640 360 -640 427 -333 500 -640 475 -640 428 -640 426 -640 638 -451 640 -480 640 -640 427 -500 375 -480 640 -480 640 -640 480 -427 640 -640 360 -640 480 -640 355 -640 480 -640 480 -640 426 -640 480 -640 621 -640 480 -612 612 -640 428 -500 375 -640 480 -428 640 -640 480 -640 480 -428 640 -640 405 -500 333 -640 427 -480 640 -640 480 -640 424 -500 353 -640 480 -492 500 -640 480 -425 640 -640 428 -480 640 -640 360 -640 427 -614 409 -640 505 -640 427 -640 424 -500 333 -640 480 -500 375 -500 309 -640 516 -640 480 -640 480 -361 640 -426 640 -640 427 -480 640 -640 480 -640 480 -640 480 -640 480 -500 375 -640 396 -640 476 -612 612 -427 640 -640 480 -500 335 -640 428 -640 429 -640 480 -480 640 -640 480 -640 427 -640 427 -640 480 -640 427 -640 385 -427 640 -640 480 -640 480 -480 640 -640 480 -640 480 -500 375 -640 480 -640 480 -493 640 -640 427 -640 480 -640 425 -640 427 -333 500 -640 428 -480 640 -500 375 -500 375 -639 640 -640 596 -640 426 -640 480 -458 640 -640 631 -640 426 -640 400 -640 474 -640 428 -640 640 -640 424 -640 480 -480 640 -640 480 -640 480 -640 480 -640 480 -480 640 -640 480 -640 427 -640 426 -640 471 -640 426 -500 374 -640 482 -640 426 -640 480 -500 333 -640 426 -426 640 -640 427 -480 640 -640 424 -640 494 -640 478 -640 427 -640 480 -640 437 -640 359 -427 640 -640 480 -640 400 -640 480 -640 480 -425 640 -478 640 -640 420 -640 424 -640 425 -640 360 -640 446 -480 640 -480 640 -640 425 -640 427 -640 427 -640 640 -640 480 -640 450 -480 640 -359 640 -500 375 -426 640 -640 427 -640 480 -640 640 -640 480 -640 427 -640 640 -427 640 -500 333 -640 400 -428 640 -480 640 -640 480 -480 640 -640 480 -640 427 -400 500 -640 435 -640 427 -360 640 -425 640 -640 480 -375 500 -640 468 -640 480 -640 480 -425 640 -640 480 -640 388 -640 425 -640 427 -500 375 -640 427 -500 447 -640 427 -500 333 -640 477 -640 427 -640 426 -640 457 -428 640 -640 426 -500 400 -640 427 -478 640 -640 424 -640 425 -640 480 -427 640 -640 461 -640 427 -640 480 -640 494 -612 612 -640 629 -640 426 -427 640 -640 427 -426 640 -640 425 -640 427 -640 480 -640 425 -500 375 -640 480 -480 640 -640 427 -640 480 -480 640 -640 427 -480 640 -640 428 -640 480 -640 480 -480 640 -500 383 -640 424 -640 505 -640 480 -640 426 -376 500 -640 427 -640 494 -640 427 -375 500 -500 376 -480 640 -640 425 -640 480 -427 640 -640 442 -640 480 -640 427 -480 640 -640 427 -640 426 -480 640 -640 451 -640 480 -640 423 -640 640 -640 480 -427 640 -428 640 -500 375 -640 480 -640 389 -364 640 -640 482 -500 300 -427 640 -500 400 -640 427 -612 612 -640 359 -640 480 -640 480 -640 512 -640 406 -640 480 -640 480 -333 500 -640 565 -640 480 -375 500 -640 484 -334 500 -609 640 -640 480 -480 640 -640 480 -640 393 -640 480 -640 427 -640 480 -612 612 -640 359 -612 612 -640 360 -640 480 -640 423 -500 375 -640 427 -640 640 -341 500 -400 600 -427 640 -640 402 -394 640 -640 480 -480 640 -640 429 -640 432 -480 640 -640 480 -640 358 -640 427 -640 427 -480 640 -640 428 -640 480 -640 411 -640 480 -640 480 -640 425 -640 480 -640 480 -640 457 -427 640 -640 480 -480 640 -640 569 -480 640 -640 480 -640 427 -640 433 -640 426 -640 427 -500 375 -640 426 -427 640 -500 500 -640 640 -612 612 -640 480 -640 480 -640 478 -500 500 -640 427 -640 480 -427 640 -480 640 -640 426 -640 427 -500 332 -640 427 -640 425 -480 640 -640 451 -375 500 -480 640 -536 640 -640 481 -640 480 -427 640 -478 640 -339 500 -640 360 -640 480 -480 640 -480 640 -640 480 -640 480 -480 640 -438 640 -640 640 -640 640 -640 359 -640 480 -640 480 -640 427 -640 421 -640 428 -480 640 -471 640 -640 338 -640 539 -640 424 -409 500 -428 640 -640 480 -640 437 -500 332 -640 480 -640 434 -640 480 -640 480 -427 640 -427 640 -480 640 -640 427 -640 480 -640 427 -640 625 -640 480 -640 480 -640 480 -376 500 -640 426 -480 640 -640 640 -640 427 -640 427 -500 333 -424 640 -640 427 -480 640 -425 640 -640 480 -480 640 -640 427 -427 640 -640 427 -500 331 -500 331 -640 426 -640 480 -500 375 -640 480 -500 489 -640 414 -640 480 -480 640 -427 640 -334 640 -640 426 -478 640 -500 332 -428 640 -640 480 -640 359 -480 640 -500 333 -640 522 -640 427 -640 480 -560 640 -427 640 -640 480 -640 480 -640 480 -640 457 -500 375 -557 640 -427 640 -500 334 -640 480 -640 426 -640 488 -640 473 -640 425 -640 480 -500 417 -640 480 -425 640 -640 480 -640 426 -480 640 -500 334 -427 640 -640 428 -640 480 -479 640 -640 640 -640 480 -640 424 -500 500 -640 425 -640 427 -640 360 -375 500 -500 334 -640 427 -640 427 -500 400 -480 640 -640 480 -640 604 -640 480 -640 427 -500 281 -640 426 -333 500 -500 375 -640 480 -640 516 -640 427 -640 480 -640 480 -640 480 -480 640 -640 480 -640 480 -480 640 -426 640 -640 480 -535 480 -640 419 -640 480 -640 427 -427 640 -640 428 -604 453 -500 375 -640 427 -640 428 -612 612 -640 428 -428 640 -427 640 -480 640 -640 469 -640 427 -640 480 -612 612 -640 426 -375 500 -640 427 -640 427 -640 480 -500 375 -640 425 -640 359 -640 480 -640 480 -612 612 -640 439 -640 427 -425 640 -640 480 -640 426 -640 501 -480 640 -640 480 -612 612 -640 427 -333 500 -500 368 -640 427 -640 480 -640 428 -640 436 -640 480 -612 612 -640 444 -640 480 -640 360 -425 640 -640 428 -334 500 -640 517 -500 375 -640 494 -640 611 -640 480 -640 422 -640 426 -640 429 -478 640 -480 640 -640 480 -375 500 -640 640 -640 480 -427 640 -640 480 -480 640 -561 640 -500 375 -428 640 -640 281 -640 480 -640 428 -640 427 -480 640 -640 480 -425 640 -375 500 -600 469 -640 480 -640 427 -640 426 -640 427 -640 482 -587 640 -640 427 -640 426 -480 640 -640 491 -640 444 -640 426 -424 640 -640 480 -640 384 -426 640 -640 408 -640 425 -640 406 -640 427 -640 351 -640 425 -480 640 -375 500 -426 640 -640 425 -640 427 -339 500 -640 284 -480 640 -640 427 -480 640 -640 480 -640 479 -335 500 -640 478 -640 426 -375 500 -446 640 -640 429 -640 427 -427 640 -640 425 -640 480 -640 511 -427 640 -500 375 -640 425 -426 640 -640 640 -640 480 -480 640 -640 427 -640 448 -375 500 -427 640 -640 427 -640 480 -480 640 -640 531 -480 640 -640 480 -640 427 -640 480 -640 425 -640 480 -640 260 -640 427 -426 640 -640 427 -640 483 -333 500 -640 425 -640 434 -427 640 -500 378 -500 375 -640 383 -500 375 -480 640 -640 480 -428 640 -640 480 -640 428 -640 427 -640 427 -480 640 -640 494 -640 425 -640 480 -640 427 -640 427 -640 480 -640 480 -500 375 -640 480 -640 428 -640 480 -500 358 -500 375 -612 612 -500 333 -640 464 -500 279 -398 500 -640 429 -500 332 -480 640 -600 400 -500 375 -640 480 -480 640 -478 640 -375 500 -500 375 -640 480 -480 640 -381 500 -586 640 -640 390 -500 334 -640 480 -640 480 -640 424 -640 573 -640 512 -500 375 -640 360 -425 640 -640 480 -490 640 -471 640 -500 375 -640 426 -640 640 -640 480 -640 480 -640 427 -640 480 -640 427 -500 332 -640 480 -500 375 -640 480 -640 427 -640 495 -427 640 -640 480 -640 575 -640 398 -434 640 -640 480 -428 640 -427 640 -640 478 -640 426 -640 428 -500 326 -640 441 -640 418 -427 640 -479 640 -640 480 -612 612 -332 500 -375 500 -480 640 -425 640 -640 480 -500 313 -640 427 -640 426 -640 425 -640 480 -640 428 -427 640 -427 640 -640 480 -640 640 -640 427 -640 428 -640 480 -480 640 -640 427 -640 480 -640 416 -640 480 -640 426 -640 480 -427 640 -640 480 -640 480 -427 640 -428 640 -427 640 -480 640 -640 480 -640 480 -480 640 -640 427 -640 480 -640 480 -640 473 -500 375 -640 528 -427 640 -640 427 -640 427 -640 427 -500 333 -500 500 -426 640 -480 640 -500 375 -500 375 -287 500 -612 612 -640 427 -480 640 -640 480 -473 640 -573 640 -640 427 -480 640 -640 361 -500 333 -500 335 -480 640 -640 478 -640 480 -424 640 -640 428 -640 640 -640 480 -612 612 -640 531 -640 480 -640 480 -640 426 -640 435 -640 424 -640 346 -480 640 -640 427 -640 480 -640 427 -375 500 -640 480 -640 480 -640 480 -640 476 -500 320 -640 428 -640 480 -640 427 -612 612 -640 483 -439 640 -640 431 -500 375 -500 375 -640 480 -640 427 -480 640 -640 424 -640 426 -640 480 -640 436 -478 640 -640 427 -640 480 -640 350 -640 427 -640 427 -640 480 -640 480 -478 640 -640 480 -640 480 -480 640 -640 640 -640 425 -480 640 -640 427 -480 640 -480 640 -640 583 -640 427 -640 480 -640 480 -640 360 -640 480 -640 480 -640 480 -640 480 -640 480 -441 640 -640 480 -612 612 -640 480 -431 640 -640 426 -375 500 -640 481 -500 375 -640 480 -599 640 -640 426 -640 427 -500 300 -640 427 -640 480 -640 380 -500 333 -640 443 -426 640 -640 427 -364 500 -640 480 -640 480 -640 426 -427 640 -640 480 -640 480 -640 480 -424 640 -427 640 -640 480 -640 480 -612 612 -640 480 -640 324 -640 449 -640 329 -640 426 -640 360 -640 480 -500 332 -500 375 -640 480 -640 480 -640 480 -375 500 -640 360 -640 504 -560 640 -480 640 -500 327 -640 426 -640 426 -362 500 -427 640 -500 358 -640 428 -640 425 -640 480 -640 427 -640 351 -640 426 -640 428 -640 429 -640 427 -640 503 -640 427 -640 428 -640 480 -640 427 -640 480 -640 361 -640 360 -640 480 -375 500 -480 640 -640 480 -640 427 -640 428 -640 480 -640 480 -640 359 -640 360 -351 500 -434 640 -640 480 -426 640 -640 427 -640 428 -640 480 -640 427 -640 427 -640 429 -640 426 -640 424 -640 254 -387 604 -640 486 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -359 640 -640 480 -480 640 -640 480 -427 640 -612 612 -640 321 -500 500 -640 428 -640 427 -640 480 -640 534 -640 479 -500 375 -640 480 -500 429 -640 428 -500 375 -640 640 -640 640 -640 425 -640 419 -514 597 -640 480 -612 612 -640 479 -640 511 -640 425 -640 427 -400 343 -640 428 -640 426 -640 427 -640 480 -640 426 -640 480 -640 640 -640 480 -640 413 -640 387 -640 426 -428 640 -640 480 -640 427 -640 427 -640 426 -640 480 -640 512 -425 640 -640 424 -640 488 -500 332 -640 426 -640 524 -480 640 -640 480 -500 375 -593 640 -640 427 -640 426 -478 640 -640 427 -408 640 -427 640 -640 480 -640 480 -640 428 -640 428 -640 485 -500 375 -640 480 -480 640 -640 427 -480 640 -640 408 -640 480 -500 399 -480 640 -480 640 -640 424 -640 480 -375 500 -500 375 -640 427 -640 480 -640 170 -640 415 -480 640 -640 402 -500 378 -480 640 -480 640 -500 332 -640 511 -640 427 -640 480 -640 427 -640 421 -640 428 -640 424 -640 388 -640 640 -640 480 -640 427 -640 425 -640 457 -640 427 -480 640 -640 427 -500 375 -640 480 -500 375 -640 428 -500 333 -480 640 -640 512 -480 640 -640 480 -427 640 -640 480 -640 480 -500 333 -640 427 -480 640 -640 428 -640 427 -601 640 -640 480 -500 315 -640 480 -640 425 -640 479 -478 640 -640 478 -612 612 -640 480 -427 640 -480 640 -640 396 -614 461 -640 360 -500 375 -640 400 -640 480 -640 468 -640 427 -480 640 -640 426 -640 480 -640 427 -478 640 -480 640 -640 481 -640 480 -500 375 -640 426 -640 329 -640 427 -640 480 -640 427 -640 480 -640 427 -640 427 -480 640 -640 431 -640 512 -640 428 -640 425 -640 480 -508 640 -480 640 -640 427 -480 640 -640 480 -640 425 -640 480 -640 480 -640 428 -640 425 -640 480 -640 427 -640 480 -640 480 -480 640 -640 431 -612 612 -500 333 -559 640 -640 427 -640 480 -640 480 -612 612 -640 480 -480 640 -640 469 -640 396 -640 480 -640 427 -640 480 -640 425 -640 480 -498 640 -640 318 -640 480 -640 480 -500 375 -484 640 -640 427 -640 640 -640 480 -640 427 -640 426 -640 427 -640 346 -640 427 -640 523 -640 428 -400 640 -500 343 -640 480 -640 425 -640 427 -427 640 -428 640 -375 500 -426 640 -640 426 -640 424 -640 462 -640 480 -375 500 -500 375 -640 328 -480 640 -640 359 -640 463 -640 640 -421 640 -640 480 -427 640 -640 564 -640 478 -640 640 -480 640 -640 427 -480 640 -448 299 -640 359 -612 612 -640 427 -640 480 -640 480 -640 427 -640 396 -640 480 -425 640 -640 480 -365 500 -500 375 -427 640 -480 640 -640 480 -300 351 -640 478 -640 480 -640 439 -640 401 -640 427 -640 427 -640 409 -640 512 -450 300 -500 375 -640 480 -480 640 -480 640 -640 427 -640 428 -500 375 -427 640 -500 400 -640 480 -480 640 -480 640 -640 426 -427 640 -640 426 -640 427 -500 375 -612 612 -375 500 -640 427 -640 486 -500 375 -500 332 -640 464 -640 428 -500 332 -640 640 -640 426 -640 481 -480 640 -640 480 -427 640 -500 375 -640 478 -640 480 -640 640 -640 512 -640 480 -640 427 -640 427 -640 480 -640 427 -640 480 -640 425 -500 332 -640 480 -425 640 -446 640 -614 640 -640 480 -640 480 -426 640 -640 428 -500 363 -640 480 -640 480 -640 428 -640 640 -640 480 -640 480 -640 482 -450 600 -640 424 -640 480 -376 500 -640 480 -480 640 -640 480 -640 427 -427 640 -640 480 -640 478 -640 478 -640 480 -640 479 -640 480 -457 640 -375 500 -428 640 -640 261 -640 400 -640 480 -477 640 -428 640 -640 426 -612 612 -480 640 -640 426 -428 640 -640 427 -640 427 -640 480 -500 500 -500 375 -442 640 -640 429 -640 480 -640 480 -480 640 -640 480 -411 411 -375 500 -640 478 -640 427 -640 480 -427 640 -500 375 -640 480 -427 640 -640 427 -640 480 -640 426 -640 463 -640 480 -640 480 -640 480 -427 640 -640 480 -480 640 -640 426 -500 375 -640 427 -640 480 -640 480 -640 434 -425 640 -640 480 -548 640 -333 500 -640 309 -640 480 -640 427 -640 480 -640 359 -640 480 -480 640 -640 360 -640 427 -480 640 -640 427 -640 480 -640 434 -640 480 -500 375 -640 480 -640 318 -640 427 -480 640 -640 427 -480 640 -408 640 -478 640 -500 356 -640 480 -640 428 -640 427 -640 426 -640 427 -640 427 -640 427 -640 480 -640 458 -640 480 -640 480 -427 640 -427 640 -480 640 -640 429 -640 480 -640 480 -640 427 -640 427 -640 480 -375 500 -375 500 -612 612 -640 428 -640 427 -612 612 -640 427 -640 439 -427 640 -640 427 -640 423 -427 640 -500 438 -446 640 -500 356 -640 427 -640 480 -640 480 -640 433 -640 480 -480 640 -640 427 -640 480 -640 426 -640 480 -640 329 -320 240 -640 512 -640 519 -640 427 -640 425 -640 426 -640 435 -640 426 -640 446 -640 480 -375 500 -640 428 -640 513 -640 425 -640 480 -640 423 -640 600 -480 640 -427 640 -480 640 -632 640 -640 480 -640 480 -640 480 -640 425 -427 640 -500 500 -480 640 -640 426 -640 423 -480 640 -427 640 -640 360 -612 612 -640 480 -640 480 -480 640 -640 441 -426 640 -375 500 -640 439 -640 424 -640 428 -640 480 -480 640 -640 453 -640 480 -640 480 -428 640 -640 427 -480 640 -335 500 -375 500 -427 640 -640 425 -500 333 -500 281 -500 375 -640 427 -640 480 -640 385 -640 431 -640 480 -640 480 -640 480 -425 640 -500 331 -640 426 -500 333 -480 640 -640 427 -640 425 -640 639 -640 480 -640 480 -375 500 -333 500 -640 399 -480 640 -640 429 -640 428 -640 478 -640 426 -480 640 -640 558 -640 427 -640 548 -558 640 -640 480 -427 640 -640 360 -640 428 -640 480 -640 428 -640 360 -480 640 -640 480 -640 480 -616 640 -640 427 -500 375 -423 640 -500 375 -375 500 -640 426 -640 428 -640 427 -427 640 -640 476 -640 360 -640 428 -640 426 -640 426 -640 480 -480 640 -500 375 -640 480 -500 400 -480 640 -640 454 -428 640 -640 421 -640 429 -640 480 -640 427 -640 425 -314 640 -640 480 -640 370 -640 427 -632 640 -640 478 -433 640 -640 480 -640 479 -640 427 -427 640 -500 375 -640 430 -333 500 -640 480 -478 640 -640 480 -640 480 -640 428 -612 612 -500 375 -640 400 -640 412 -640 481 -375 500 -333 500 -425 640 -480 640 -640 480 -640 422 -480 640 -432 640 -640 480 -640 359 -640 479 -427 640 -500 384 -640 480 -640 480 -500 400 -640 426 -640 480 -640 404 -640 478 -500 335 -640 480 -640 480 -640 360 -640 457 -640 518 -640 480 -640 381 -427 640 -640 427 -640 425 -640 427 -640 427 -640 427 -500 375 -480 640 -640 480 -640 480 -640 425 -640 425 -640 427 -500 375 -640 428 -640 480 -582 416 -640 388 -640 480 -500 333 -500 333 -640 512 -480 640 -640 425 -640 426 -640 480 -640 640 -640 428 -640 512 -640 426 -640 480 -500 336 -640 480 -427 640 -500 375 -425 640 -603 640 -427 640 -333 500 -612 612 -500 375 -640 480 -640 480 -640 512 -640 639 -640 500 -375 500 -640 426 -640 480 -640 427 -640 426 -640 480 -428 640 -640 480 -640 480 -474 640 -500 375 -480 640 -640 480 -480 640 -640 426 -640 480 -640 426 -640 427 -612 612 -426 640 -640 424 -375 500 -612 612 -640 427 -640 428 -640 427 -428 640 -399 640 -640 480 -421 640 -429 640 -640 406 -500 375 -500 361 -640 480 -640 481 -640 424 -401 500 -640 480 -640 480 -640 194 -640 554 -640 229 -640 462 -427 640 -480 640 -500 334 -500 375 -375 500 -640 516 -640 427 -640 426 -640 480 -640 480 -640 427 -640 359 -427 640 -640 427 -640 420 -425 640 -514 640 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -500 333 -640 453 -478 640 -640 318 -640 480 -640 480 -640 427 -640 480 -640 480 -500 290 -500 375 -640 480 -640 480 -640 427 -640 410 -337 500 -640 426 -640 480 -612 612 -640 480 -640 480 -640 640 -640 480 -421 640 -640 360 -640 427 -500 375 -500 332 -500 375 -640 480 -640 480 -640 480 -640 480 -640 426 -640 427 -500 375 -400 500 -640 427 -399 640 -640 427 -640 427 -640 480 -640 425 -640 431 -500 333 -640 480 -640 571 -640 640 -640 360 -436 640 -480 640 -640 480 -640 480 -480 640 -612 612 -640 553 -480 640 -640 480 -640 426 -479 640 -640 480 -640 480 -500 375 -427 640 -480 640 -640 518 -640 425 -480 640 -640 306 -640 427 -640 424 -640 427 -640 480 -333 500 -640 427 -640 405 -640 329 -457 640 -640 469 -500 375 -425 640 -436 640 -640 480 -494 500 -437 640 -640 480 -640 451 -640 480 -640 427 -500 281 -612 612 -640 480 -640 480 -640 427 -480 640 -640 460 -480 640 -640 427 -640 480 -640 426 -359 640 -500 380 -640 427 -427 640 -640 425 -640 480 -640 480 -640 480 -640 428 -640 424 -640 383 -480 640 -612 612 -640 427 -640 480 -384 640 -640 436 -640 480 -425 640 -479 640 -427 640 -640 478 -482 640 -640 426 -480 640 -640 480 -640 480 -457 640 -640 480 -640 427 -375 500 -517 640 -307 409 -612 612 -640 428 -640 428 -500 333 -640 503 -640 640 -640 616 -640 600 -640 480 -640 427 -640 480 -640 428 -500 375 -640 425 -640 480 -640 428 -640 478 -640 427 -640 421 -640 480 -640 480 -640 480 -500 375 -640 426 -640 423 -640 477 -640 609 -427 640 -427 640 -640 480 -500 311 -375 500 -480 640 -640 427 -640 427 -469 469 -640 480 -640 427 -500 370 -640 454 -640 480 -640 426 -640 427 -426 640 -427 640 -333 500 -426 640 -640 330 -491 500 -424 500 -640 480 -333 500 -413 450 -640 448 -411 640 -640 426 -410 310 -500 332 -640 424 -640 427 -640 640 -500 375 -410 640 -640 480 -380 500 -640 480 -640 480 -480 640 -640 426 -640 480 -478 640 -640 480 -640 429 -500 364 -640 226 -640 148 -480 640 -640 480 -389 640 -640 428 -640 424 -640 471 -480 640 -640 457 -640 513 -640 427 -480 640 -640 419 -316 500 -500 375 -640 427 -640 480 -640 480 -640 480 -428 640 -640 427 -640 427 -640 480 -500 333 -640 480 -500 333 -640 427 -383 500 -640 465 -640 427 -640 427 -500 375 -640 494 -612 612 -640 480 -640 480 -424 640 -640 480 -640 428 -640 480 -640 480 -640 427 -475 640 -640 566 -640 480 -640 427 -500 400 -640 383 -640 427 -612 612 -480 640 -500 400 -612 612 -640 480 -640 453 -480 640 -500 375 -640 427 -640 480 -640 427 -556 640 -480 640 -640 381 -640 480 -640 427 -640 418 -500 375 -500 281 -480 640 -360 640 -640 402 -640 427 -515 640 -500 500 -640 428 -640 427 -640 427 -640 480 -640 480 -618 640 -640 480 -640 480 -640 393 -640 480 -640 426 -640 640 -540 640 -640 640 -640 427 -500 375 -458 640 -640 427 -640 427 -640 481 -500 433 -426 640 -640 480 -640 416 -640 480 -480 640 -640 454 -500 421 -428 640 -640 480 -640 480 -426 640 -640 264 -459 640 -640 426 -640 444 -375 500 -640 467 -640 428 -500 334 -640 480 -427 640 -640 480 -640 478 -640 480 -426 640 -480 640 -375 500 -426 640 -640 480 -427 640 -427 640 -612 612 -640 436 -640 432 -428 640 -640 480 -480 640 -640 428 -640 480 -640 427 -640 480 -640 360 -424 640 -640 359 -640 480 -640 480 -640 427 -640 480 -640 480 -500 375 -500 375 -600 400 -640 480 -375 500 -640 480 -640 512 -480 640 -427 640 -640 480 -388 640 -640 480 -640 480 -640 427 -640 480 -500 375 -441 640 -478 640 -640 427 -425 640 -612 612 -640 428 -640 480 -640 404 -640 480 -640 480 -419 640 -427 640 -640 523 -640 427 -500 375 -640 427 -375 500 -500 381 -640 480 -640 361 -640 480 -640 480 -640 429 -640 480 -640 480 -500 375 -425 640 -612 612 -640 398 -480 640 -480 640 -600 450 -640 309 -500 403 -640 480 -640 480 -427 640 -480 640 -640 541 -640 478 -537 640 -640 427 -480 640 -640 480 -640 426 -640 360 -427 640 -427 640 -640 429 -427 640 -361 640 -640 427 -500 375 -640 340 -640 480 -640 428 -480 640 -640 334 -640 480 -640 273 -640 426 -640 426 -612 612 -500 375 -427 640 -640 480 -640 433 -640 480 -640 342 -640 457 -640 427 -640 480 -640 541 -480 640 -403 500 -480 640 -500 375 -480 640 -633 640 -640 427 -640 426 -640 424 -640 427 -640 480 -640 436 -640 425 -640 480 -480 640 -428 640 -500 375 -640 480 -360 270 -640 428 -640 361 -640 480 -640 480 -640 231 -640 512 -360 640 -640 603 -640 480 -640 428 -426 640 -640 480 -427 640 -640 427 -302 500 -426 640 -640 427 -640 427 -500 333 -640 427 -640 427 -640 426 -640 341 -500 341 -640 428 -480 640 -640 427 -500 447 -640 554 -640 480 -426 640 -640 480 -640 480 -567 470 -480 640 -640 428 -418 640 -480 640 -640 427 -640 480 -640 480 -640 480 -521 640 -640 480 -427 640 -500 334 -640 480 -640 480 -640 426 -640 480 -640 480 -640 477 -640 382 -480 640 -480 640 -640 429 -640 425 -640 427 -640 526 -500 375 -640 426 -640 427 -476 640 -640 480 -640 461 -375 500 -640 426 -640 480 -640 480 -640 294 -640 359 -469 640 -252 640 -640 427 -640 427 -640 480 -427 640 -500 375 -553 640 -640 450 -640 424 -640 480 -500 375 -426 640 -640 428 -427 640 -334 500 -350 640 -640 498 -500 333 -640 480 -640 480 -640 426 -480 640 -240 320 -640 640 -640 480 -640 427 -640 480 -640 531 -500 375 -480 640 -564 640 -640 480 -640 480 -500 473 -640 425 -640 406 -480 640 -640 480 -640 427 -500 375 -640 480 -480 640 -640 480 -360 640 -640 480 -578 640 -480 640 -640 426 -640 478 -640 427 -640 640 -640 480 -640 480 -480 640 -427 640 -640 427 -500 333 -425 640 -503 640 -375 500 -427 640 -640 427 -427 640 -480 640 -640 424 -640 480 -500 375 -640 427 -640 480 -640 479 -433 640 -640 425 -480 640 -458 640 -640 426 -636 478 -479 640 -640 572 -640 462 -640 425 -480 640 -640 480 -640 480 -640 480 -640 426 -640 480 -640 427 -640 480 -640 501 -640 480 -640 444 -640 457 -640 425 -640 427 -640 428 -640 388 -426 640 -640 424 -640 480 -640 386 -640 427 -333 500 -640 480 -480 640 -493 640 -426 640 -480 640 -640 427 -426 640 -640 480 -640 427 -640 511 -640 427 -640 640 -640 480 -458 640 -427 640 -480 640 -640 345 -640 480 -640 426 -480 640 -640 305 -640 480 -640 427 -640 428 -640 480 -640 427 -640 427 -640 427 -498 640 -500 332 -511 640 -478 640 -640 480 -640 480 -427 640 -640 427 -514 640 -424 640 -640 480 -640 425 -500 333 -640 425 -640 480 -500 375 -640 424 -640 360 -640 480 -640 480 -427 640 -640 480 -640 360 -640 480 -430 640 -640 480 -427 640 -640 480 -640 480 -375 500 -474 640 -640 425 -640 480 -640 593 -640 480 -640 425 -480 640 -640 425 -640 427 -500 375 -640 326 -500 375 -640 480 -640 427 -640 480 -612 612 -640 427 -640 458 -500 334 -640 411 -640 358 -500 375 -428 640 -427 640 -612 612 -480 640 -426 640 -526 640 -333 500 -426 640 -640 457 -500 374 -640 392 -612 612 -640 427 -640 393 -640 480 -480 640 -551 640 -612 612 -640 563 -640 427 -640 480 -640 640 -582 640 -640 480 -288 352 -640 427 -640 417 -640 425 -480 640 -500 375 -640 480 -640 470 -640 480 -640 480 -402 500 -640 428 -640 425 -640 428 -640 427 -427 640 -640 480 -640 480 -478 640 -640 480 -480 640 -480 640 -640 428 -640 453 -640 427 -640 427 -640 424 -500 375 -500 375 -427 640 -640 427 -480 640 -640 480 -640 426 -480 640 -400 600 -640 424 -401 401 -640 480 -500 335 -640 480 -640 480 -428 640 -640 480 -640 640 -640 427 -640 480 -640 450 -640 480 -640 480 -640 422 -612 612 -478 640 -640 429 -480 640 -480 640 -640 399 -640 466 -480 640 -640 427 -640 480 -428 640 -480 640 -640 480 -612 612 -480 640 -640 480 -480 640 -640 614 -640 457 -640 457 -640 425 -640 429 -500 375 -640 480 -333 500 -480 640 -634 640 -480 640 -640 359 -640 427 -640 480 -640 428 -500 375 -640 480 -640 426 -640 424 -640 328 -640 428 -375 500 -427 640 -640 427 -428 640 -640 429 -411 640 -427 640 -480 640 -480 640 -640 427 -640 433 -640 361 -333 500 -640 427 -480 640 -640 428 -427 640 -640 427 -640 427 -640 425 -480 640 -640 428 -640 640 -640 480 -640 426 -640 427 -640 480 -640 640 -640 480 -640 480 -612 612 -427 640 -375 500 -500 495 -640 411 -478 640 -612 612 -500 375 -640 480 -640 379 -640 426 -640 480 -480 640 -640 480 -640 479 -426 640 -480 640 -480 640 -640 424 -640 428 -640 425 -640 426 -640 480 -640 425 -427 640 -640 399 -640 423 -640 428 -640 427 -640 480 -640 430 -640 450 -640 480 -480 640 -640 427 -640 457 -640 480 -640 480 -480 640 -640 480 -640 480 -640 426 -640 426 -640 480 -640 421 -640 504 -640 427 -473 640 -640 480 -640 480 -640 480 -640 427 -427 640 -640 423 -500 398 -640 427 -640 427 -640 480 -500 386 -640 426 -640 480 -640 480 -640 428 -427 640 -640 461 -427 640 -640 427 -480 640 -480 640 -500 334 -640 427 -594 640 -488 640 -640 480 -400 604 -640 426 -500 334 -411 640 -640 482 -425 640 -640 359 -640 427 -480 640 -426 640 -640 443 -640 480 -640 445 -427 640 -640 425 -640 464 -427 640 -500 375 -640 480 -640 490 -640 480 -640 509 -640 360 -640 429 -640 639 -425 640 -640 427 -640 429 -640 360 -640 427 -500 375 -640 427 -640 480 -333 500 -640 480 -500 375 -640 480 -640 480 -500 334 -500 382 -557 640 -640 360 -640 427 -427 640 -640 425 -640 480 -640 478 -640 480 -500 461 -640 458 -640 426 -640 387 -640 427 -640 501 -640 480 -500 334 -640 426 -500 333 -640 425 -480 640 -375 500 -480 640 -640 427 -640 480 -640 417 -640 480 -500 375 -640 428 -426 640 -640 456 -640 429 -333 500 -612 612 -500 333 -640 427 -428 640 -331 500 -640 512 -427 640 -640 428 -640 480 -640 509 -640 427 -640 427 -500 333 -427 640 -640 481 -480 640 -480 640 -640 427 -409 640 -640 426 -426 640 -640 428 -640 480 -640 359 -640 427 -500 375 -640 476 -612 612 -425 640 -640 480 -640 480 -640 480 -640 480 -480 640 -640 359 -453 640 -600 422 -203 179 -640 427 -640 426 -640 463 -640 426 -640 425 -480 640 -480 640 -316 425 -640 469 -640 359 -457 640 -640 427 -640 640 -332 500 -640 480 -500 423 -500 500 -640 426 -415 640 -640 428 -640 480 -640 640 -538 640 -640 480 -640 427 -640 480 -500 352 -640 480 -640 436 -500 375 -640 425 -640 457 -400 400 -640 427 -640 427 -480 640 -427 640 -640 480 -486 640 -640 427 -480 640 -640 427 -640 427 -425 640 -640 359 -500 375 -640 480 -640 478 -480 640 -640 480 -640 480 -640 480 -640 298 -640 491 -640 480 -428 640 -640 359 -640 360 -427 640 -428 640 -640 480 -478 640 -478 640 -427 640 -640 480 -640 480 -640 425 -338 500 -500 375 -500 281 -640 480 -480 640 -640 427 -640 513 -428 640 -375 500 -500 375 -612 612 -640 422 -426 640 -425 640 -500 375 -537 640 -640 480 -640 480 -640 480 -427 640 -640 427 -612 612 -640 480 -640 450 -640 457 -640 480 -334 500 -480 640 -640 427 -640 480 -350 350 -427 640 -640 427 -640 427 -500 346 -640 480 -319 500 -336 500 -640 427 -612 612 -640 480 -640 480 -480 640 -527 640 -333 500 -640 512 -500 375 -500 375 -320 240 -640 480 -480 640 -640 480 -480 640 -640 428 -640 480 -480 640 -640 427 -640 423 -640 480 -640 480 -428 640 -640 480 -500 333 -640 480 -427 640 -427 640 -640 480 -640 481 -640 480 -640 427 -640 425 -406 640 -640 164 -640 480 -640 640 -640 428 -500 375 -500 375 -640 408 -640 480 -640 381 -640 425 -480 640 -427 640 -400 500 -640 425 -640 426 -333 500 -426 640 -480 640 -480 640 -640 480 -640 480 -640 425 -640 428 -640 427 -480 640 -640 480 -640 427 -640 424 -640 426 -640 478 -640 427 -426 640 -500 375 -640 480 -640 459 -640 428 -500 375 -640 426 -640 640 -427 640 -640 404 -640 426 -640 425 -360 640 -640 480 -640 426 -640 361 -500 375 -640 480 -640 480 -383 640 -640 427 -500 375 -480 640 -640 480 -640 480 -480 640 -640 428 -640 480 -640 480 -500 343 -640 426 -640 480 -424 640 -640 446 -426 640 -640 480 -600 399 -427 640 -300 225 -480 640 -363 640 -640 480 -640 434 -398 640 -640 426 -640 428 -480 640 -500 334 -425 640 -640 480 -640 427 -640 480 -480 640 -640 480 -640 480 -480 640 -640 428 -640 427 -640 427 -480 640 -640 480 -480 640 -427 640 -640 496 -480 640 -640 512 -640 480 -640 433 -640 427 -640 427 -426 640 -427 640 -352 288 -640 426 -640 427 -500 375 -640 426 -640 480 -640 427 -640 425 -427 640 -640 480 -640 426 -640 480 -500 434 -640 480 -640 426 -426 640 -375 500 -406 500 -427 640 -640 467 -476 640 -421 640 -640 480 -640 427 -500 375 -448 640 -640 480 -640 426 -640 418 -640 480 -500 375 -640 448 -427 640 -480 640 -640 373 -640 426 -640 443 -428 640 -640 466 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 427 -640 428 -600 450 -640 429 -375 500 -640 428 -426 640 -640 427 -640 512 -640 426 -640 480 -500 318 -640 428 -500 375 -500 376 -640 480 -640 427 -640 428 -448 336 -640 480 -640 480 -640 443 -640 480 -500 333 -500 333 -640 480 -422 640 -640 479 -500 333 -640 479 -640 480 -640 640 -640 425 -480 640 -640 425 -640 480 -441 640 -500 333 -640 570 -500 375 -640 429 -480 640 -640 481 -640 386 -640 437 -640 480 -640 428 -640 480 -640 425 -640 427 -640 320 -500 356 -500 286 -640 426 -427 640 -640 480 -640 480 -427 640 -640 480 -640 427 -628 640 -480 640 -640 427 -426 640 -640 480 -612 612 -640 480 -480 640 -640 639 -480 640 -375 500 -375 500 -640 480 -640 429 -640 426 -500 343 -640 480 -640 425 -426 640 -640 427 -640 480 -426 640 -500 375 -640 425 -640 427 -640 427 -434 296 -640 426 -612 612 -500 375 -640 480 -640 480 -640 426 -480 640 -640 480 -640 427 -640 546 -478 640 -640 480 -640 480 -480 640 -612 612 -640 427 -640 427 -640 480 -640 489 -500 333 -640 440 -640 427 -427 640 -640 426 -640 480 -640 427 -640 639 -640 480 -500 350 -467 640 -640 427 -426 640 -446 640 -640 481 -480 640 -640 426 -640 510 -640 480 -477 640 -640 427 -612 612 -640 480 -640 512 -640 480 -640 429 -640 427 -640 428 -509 640 -429 640 -640 299 -640 480 -640 480 -500 332 -640 480 -500 400 -640 401 -640 480 -640 480 -640 427 -640 480 -640 480 -640 538 -334 500 -480 640 -640 480 -640 424 -500 334 -640 480 -362 640 -640 360 -640 501 -640 457 -640 426 -640 428 -480 640 -640 425 -515 640 -640 480 -640 426 -640 480 -480 640 -640 429 -640 429 -480 640 -640 480 -640 480 -640 480 -500 375 -640 339 -640 372 -500 333 -640 480 -500 375 -427 640 -640 480 -369 520 -640 427 -640 480 -427 640 -500 334 -640 480 -640 480 -500 332 -640 480 -500 375 -640 428 -640 427 -640 480 -640 426 -640 480 -640 460 -640 480 -458 640 -640 480 -640 640 -640 387 -640 480 -640 428 -640 428 -640 480 -640 426 -640 480 -640 425 -640 379 -480 640 -427 640 -640 480 -640 427 -612 612 -640 276 -640 480 -640 426 -640 427 -640 427 -465 640 -640 480 -400 500 -640 476 -640 428 -640 480 -640 446 -640 480 -640 480 -376 500 -640 427 -640 427 -640 426 -500 333 -640 480 -500 375 -640 406 -640 361 -640 478 -612 612 -640 310 -500 496 -640 426 -640 427 -640 359 -640 480 -640 427 -640 480 -480 640 -640 360 -640 425 -604 453 -640 421 -500 354 -500 375 -640 467 -640 480 -500 335 -425 640 -640 427 -640 427 -480 640 -640 413 -640 427 -640 480 -640 518 -640 480 -640 427 -640 336 -640 480 -640 427 -427 640 -640 640 -566 640 -480 640 -500 346 -640 480 -480 640 -480 640 -427 640 -640 425 -426 640 -640 559 -640 480 -500 342 -500 500 -640 448 -640 380 -640 424 -426 640 -640 427 -640 427 -640 427 -640 427 -500 419 -480 640 -480 640 -640 427 -640 480 -640 427 -640 425 -640 427 -640 427 -500 333 -375 500 -640 480 -640 480 -640 434 -640 480 -426 640 -375 500 -612 612 -480 640 -640 427 -640 427 -480 640 -640 426 -640 427 -640 360 -640 480 -640 427 -640 427 -640 480 -600 402 -640 428 -428 640 -640 512 -640 428 -408 500 -640 480 -640 480 -640 427 -500 375 -426 640 -640 640 -480 640 -480 640 -640 360 -640 427 -640 427 -640 426 -640 424 -480 640 -640 433 -360 480 -500 375 -640 479 -640 480 -427 640 -640 480 -640 457 -640 640 -640 490 -500 333 -446 640 -640 480 -640 567 -640 480 -640 404 -640 427 -640 478 -640 426 -500 441 -357 640 -640 429 -640 425 -640 427 -640 427 -612 612 -640 480 -360 640 -640 424 -640 386 -640 480 -640 480 -500 335 -640 480 -640 484 -457 640 -640 436 -480 360 -640 427 -427 640 -500 375 -640 439 -640 427 -479 640 -640 427 -640 512 -354 500 -640 457 -500 375 -418 640 -480 640 -640 480 -427 640 -480 640 -640 360 -480 640 -612 612 -612 612 -375 500 -500 333 -640 428 -500 338 -640 480 -640 480 -640 480 -626 476 -448 640 -375 500 -640 360 -360 360 -640 425 -640 427 -640 426 -640 427 -640 428 -640 480 -480 640 -640 480 -640 427 -480 640 -640 480 -640 479 -640 480 -427 640 -375 500 -640 480 -612 612 -478 640 -640 313 -640 424 -373 640 -480 640 -640 480 -480 640 -640 480 -640 480 -640 427 -640 573 -640 427 -640 480 -640 435 -288 352 -640 480 -640 451 -548 640 -375 500 -640 428 -640 480 -640 476 -383 640 -640 360 -640 478 -640 480 -640 480 -640 426 -612 612 -640 328 -640 480 -480 640 -427 640 -640 403 -400 435 -640 480 -375 500 -640 480 -640 427 -480 640 -640 640 -640 424 -640 428 -480 640 -640 360 -426 640 -612 612 -375 500 -640 480 -640 444 -478 640 -480 640 -500 375 -426 640 -640 425 -640 480 -640 479 -640 429 -640 427 -640 426 -557 640 -640 480 -640 447 -640 480 -426 640 -500 375 -640 427 -640 616 -426 640 -500 332 -640 427 -640 480 -640 480 -428 640 -640 480 -500 405 -480 640 -640 502 -426 640 -640 480 -640 480 -640 424 -640 480 -640 480 -428 640 -640 425 -424 640 -380 285 -640 427 -640 480 -640 427 -427 640 -640 429 -640 480 -640 480 -427 640 -458 640 -537 640 -640 427 -640 640 -408 640 -640 467 -640 598 -375 500 -640 480 -640 480 -229 350 -640 480 -640 426 -480 640 -640 480 -375 500 -640 297 -640 480 -640 483 -640 428 -640 427 -612 612 -500 375 -640 426 -640 480 -640 427 -640 480 -480 640 -640 480 -500 375 -640 482 -640 427 -640 572 -640 516 -640 427 -640 427 -640 481 -640 480 -640 414 -640 427 -640 440 -640 480 -640 480 -500 320 -640 383 -640 354 -480 640 -640 427 -480 640 -640 480 -640 480 -640 480 -640 427 -473 640 -640 359 -640 480 -640 425 -500 334 -553 640 -560 640 -426 640 -640 480 -500 375 -640 480 -480 640 -640 444 -640 480 -640 480 -640 480 -413 640 -640 485 -332 500 -500 273 -375 500 -617 640 -640 480 -640 480 -500 375 -640 427 -500 375 -480 640 -640 425 -425 640 -409 640 -640 426 -640 480 -500 375 -640 480 -500 375 -640 427 -640 480 -334 500 -640 481 -640 445 -360 640 -500 375 -640 427 -640 480 -640 425 -480 640 -640 427 -372 464 -480 640 -640 428 -500 375 -500 375 -640 429 -469 640 -640 426 -500 375 -612 612 -640 427 -640 427 -640 480 -612 612 -640 427 -640 427 -640 361 -500 375 -640 427 -320 240 -640 362 -640 480 -640 428 -640 480 -640 429 -640 426 -640 480 -640 480 -640 480 -640 480 -500 359 -640 480 -480 640 -640 480 -640 480 -426 640 -461 640 -640 427 -427 640 -640 479 -640 480 -640 427 -426 640 -640 427 -333 500 -640 360 -612 612 -480 640 -640 428 -640 480 -640 427 -640 480 -640 429 -640 427 -640 303 -640 480 -500 375 -640 480 -640 424 -640 480 -640 480 -640 622 -640 480 -640 480 -640 480 -640 427 -375 500 -612 612 -332 500 -600 400 -427 640 -640 433 -640 480 -480 640 -350 500 -500 500 -480 640 -480 640 -612 612 -423 640 -640 427 -424 640 -478 640 -640 426 -640 427 -480 640 -422 640 -640 427 -500 333 -640 427 -640 425 -640 480 -500 375 -346 504 -640 480 -640 441 -500 342 -457 640 -640 426 -640 426 -640 480 -640 569 -426 640 -640 427 -640 438 -640 427 -640 429 -640 480 -640 427 -422 640 -503 640 -640 551 -640 573 -640 480 -640 463 -640 427 -426 640 -640 480 -500 334 -640 480 -640 480 -640 480 -427 640 -640 480 -640 446 -424 640 -640 428 -612 612 -612 612 -640 478 -640 428 -640 501 -640 427 -480 640 -640 425 -500 401 -640 427 -640 429 -640 429 -451 640 -640 427 -480 640 -500 333 -333 500 -640 424 -640 427 -500 500 -640 427 -480 640 -640 426 -480 640 -427 640 -612 612 -640 427 -640 480 -500 334 -480 640 -640 426 -640 428 -640 480 -500 375 -640 480 -640 426 -640 425 -424 640 -640 480 -640 425 -640 427 -640 493 -500 367 -375 500 -640 374 -640 480 -333 500 -480 640 -640 430 -640 480 -640 427 -500 375 -500 375 -640 381 -640 427 -640 480 -640 424 -480 640 -640 425 -640 427 -640 466 -640 480 -500 333 -640 480 -640 427 -640 428 -640 510 -640 427 -359 640 -426 640 -335 500 -425 640 -640 479 -480 640 -500 346 -640 427 -640 320 -500 334 -498 640 -500 400 -480 640 -500 375 -640 480 -500 375 -640 427 -640 480 -480 640 -640 480 -640 427 -640 186 -640 427 -640 427 -480 640 -640 426 -640 479 -480 640 -640 480 -640 429 -640 427 -640 427 -500 333 -640 427 -429 640 -640 480 -480 640 -375 500 -640 427 -640 480 -426 640 -385 308 -640 427 -640 480 -500 375 -640 478 -640 427 -640 427 -480 640 -500 375 -640 427 -640 360 -640 480 -640 427 -640 480 -640 427 -640 390 -640 427 -457 640 -500 500 -500 375 -359 640 -500 375 -640 431 -600 400 -640 509 -428 640 -427 640 -427 640 -640 428 -640 425 -612 612 -640 424 -375 500 -335 500 -640 425 -640 480 -500 405 -640 426 -640 480 -640 564 -640 427 -480 640 -408 500 -640 480 -640 640 -640 480 -640 480 -640 513 -640 480 -474 640 -640 427 -500 322 -508 640 -640 439 -425 640 -427 640 -640 480 -500 375 -320 240 -640 480 -332 500 -640 427 -640 426 -480 640 -640 427 -640 427 -640 512 -640 478 -640 480 -640 480 -640 427 -500 375 -640 480 -500 375 -425 640 -640 605 -640 480 -640 538 -640 360 -427 640 -334 500 -480 640 -640 425 -427 640 -640 426 -640 428 -640 640 -640 427 -640 480 -640 478 -640 424 -640 480 -640 425 -469 640 -426 640 -500 288 -640 359 -640 366 -640 427 -640 482 -640 428 -640 263 -640 427 -640 426 -640 479 -640 480 -328 500 -640 480 -480 640 -480 640 -640 427 -612 612 -634 640 -640 426 -478 640 -439 500 -640 426 -640 480 -640 460 -640 640 -346 500 -428 640 -500 375 -640 480 -640 480 -478 640 -640 468 -640 426 -500 333 -480 640 -640 381 -640 426 -640 480 -640 478 -640 426 -640 480 -640 428 -480 640 -640 480 -640 480 -335 500 -640 427 -640 425 -640 480 -640 418 -500 375 -640 640 -640 378 -640 443 -480 640 -480 640 -640 480 -640 480 -640 383 -640 427 -518 640 -640 627 -500 228 -640 426 -640 426 -427 640 -640 480 -612 612 -640 470 -640 480 -600 600 -640 480 -640 425 -640 480 -640 480 -640 480 -500 375 -480 640 -640 480 -640 482 -225 640 -428 640 -439 640 -640 480 -400 300 -489 640 -640 427 -640 204 -640 427 -640 396 -500 333 -640 481 -640 428 -640 428 -640 424 -500 375 -451 298 -640 425 -640 428 -500 375 -640 480 -500 375 -640 426 -474 640 -640 425 -640 424 -364 640 -500 333 -640 606 -427 640 -640 427 -497 640 -457 640 -640 427 -640 427 -640 427 -480 640 -640 480 -640 486 -640 427 -640 426 -640 433 -640 471 -479 640 -640 427 -640 426 -480 640 -640 480 -500 375 -375 500 -640 480 -640 480 -396 500 -500 375 -640 480 -640 480 -480 640 -640 427 -640 360 -429 640 -640 427 -640 427 -640 431 -612 612 -640 480 -640 429 -640 434 -500 333 -500 367 -640 480 -427 640 -427 640 -640 428 -480 640 -500 333 -640 427 -640 480 -640 259 -640 480 -640 428 -640 463 -640 426 -640 427 -375 500 -640 480 -584 640 -500 375 -640 640 -640 427 -640 480 -640 426 -480 640 -640 480 -480 640 -640 480 -426 640 -425 640 -640 426 -640 480 -640 427 -478 640 -640 484 -437 640 -640 427 -640 428 -500 333 -500 375 -640 453 -640 427 -480 640 -640 428 -640 427 -640 500 -480 640 -427 640 -500 375 -640 427 -640 480 -640 427 -500 332 -500 375 -502 640 -640 640 -640 425 -640 360 -640 426 -640 499 -640 359 -640 428 -640 480 -640 480 -640 251 -640 480 -640 427 -640 480 -640 427 -375 500 -480 640 -640 480 -640 480 -517 640 -640 480 -480 640 -612 612 -480 640 -640 424 -640 480 -640 480 -640 421 -427 640 -640 427 -640 480 -640 427 -640 387 -480 640 -640 407 -640 360 -640 439 -640 404 -640 482 -640 480 -427 640 -640 427 -640 480 -375 500 -640 428 -640 480 -640 391 -480 640 -640 480 -640 480 -640 427 -612 612 -640 480 -640 428 -400 325 -458 640 -640 442 -640 428 -427 640 -632 640 -640 622 -640 429 -427 640 -640 480 -427 640 -640 428 -548 411 -640 426 -484 640 -640 426 -640 480 -640 480 -514 640 -500 333 -500 500 -640 627 -424 640 -444 640 -640 426 -640 424 -640 427 -640 480 -640 426 -640 480 -480 640 -640 480 -333 500 -640 480 -640 480 -376 500 -640 426 -427 640 -640 426 -500 375 -429 640 -480 640 -640 480 -640 457 -640 374 -640 480 -640 480 -500 377 -640 373 -640 480 -500 375 -640 360 -640 485 -640 640 -640 480 -640 480 -333 500 -640 426 -640 426 -640 451 -640 480 -640 444 -640 523 -480 640 -480 640 -640 480 -375 500 -458 640 -480 640 -500 375 -640 426 -640 457 -640 480 -375 500 -640 418 -640 427 -640 434 -640 428 -640 425 -640 436 -640 426 -640 319 -640 480 -500 375 -640 427 -640 427 -500 332 -640 427 -375 500 -640 480 -640 495 -640 361 -478 640 -480 640 -640 424 -640 384 -612 612 -640 426 -640 480 -500 500 -640 356 -480 640 -426 640 -640 640 -500 375 -640 360 -640 478 -480 640 -640 480 -425 640 -640 423 -480 640 -480 640 -640 480 -640 427 -640 464 -483 640 -480 640 -640 359 -612 612 -640 531 -640 396 -640 427 -640 480 -640 480 -500 352 -640 480 -640 427 -640 480 -640 541 -640 427 -640 427 -480 640 -640 427 -640 427 -427 640 -640 555 -640 480 -640 426 -640 428 -424 640 -500 333 -640 426 -640 427 -512 640 -640 360 -640 427 -427 640 -500 198 -640 480 -375 500 -480 640 -640 426 -640 480 -640 428 -640 459 -640 427 -640 426 -640 480 -640 391 -640 480 -640 428 -640 480 -640 427 -480 640 -640 427 -640 427 -640 427 -640 478 -640 426 -640 480 -320 240 -480 640 -427 640 -640 480 -640 453 -640 428 -480 640 -480 640 -640 426 -640 478 -640 480 -640 480 -640 432 -640 483 -640 361 -640 427 -480 640 -480 640 -500 374 -640 480 -640 480 -640 359 -640 360 -480 640 -427 640 -430 640 -640 427 -640 408 -480 640 -333 500 -640 480 -428 640 -480 640 -640 427 -425 640 -640 480 -640 480 -375 500 -500 362 -332 500 -375 500 -640 400 -640 454 -435 640 -334 500 -424 640 -640 480 -500 375 -480 640 -640 424 -640 480 -640 427 -640 640 -640 378 -640 427 -640 480 -500 406 -640 360 -640 360 -424 640 -427 640 -640 427 -640 480 -640 427 -640 480 -640 458 -640 425 -640 459 -640 480 -640 480 -640 480 -480 640 -640 426 -640 480 -640 427 -640 426 -640 400 -640 480 -640 480 -640 427 -640 513 -500 361 -639 640 -481 640 -640 427 -640 425 -640 426 -500 308 -640 480 -640 458 -640 428 -612 612 -452 640 -640 426 -480 640 -511 640 -640 426 -640 480 -427 640 -640 480 -500 328 -640 480 -640 480 -383 640 -640 480 -500 330 -640 427 -500 375 -640 427 -500 332 -428 640 -640 502 -640 425 -640 426 -500 375 -640 480 -640 388 -640 427 -427 640 -639 640 -640 640 -640 427 -640 431 -640 480 -640 426 -640 428 -480 640 -640 426 -640 427 -500 375 -640 640 -640 475 -640 412 -640 428 -500 333 -640 480 -640 512 -375 500 -454 640 -500 371 -640 427 -640 425 -640 480 -640 640 -640 640 -640 360 -640 426 -640 426 -640 480 -612 612 -480 640 -640 428 -640 360 -640 480 -375 500 -478 640 -640 427 -640 480 -427 640 -360 640 -600 400 -612 612 -640 480 -640 482 -640 424 -640 480 -640 480 -640 340 -640 426 -640 427 -427 640 -640 427 -640 480 -480 640 -640 428 -495 640 -640 480 -640 480 -480 640 -640 480 -640 480 -480 640 -640 425 -640 427 -640 480 -427 640 -640 428 -640 640 -640 425 -480 640 -640 427 -640 480 -640 427 -640 512 -500 375 -640 427 -640 480 -640 412 -436 640 -640 426 -500 375 -640 428 -640 640 -640 360 -640 427 -640 480 -640 428 -640 427 -500 375 -640 480 -640 427 -640 480 -640 304 -500 375 -427 640 -640 428 -640 480 -640 481 -428 640 -480 640 -640 458 -500 375 -640 480 -640 480 -640 383 -640 425 -500 375 -640 426 -640 480 -640 427 -640 427 -427 640 -640 480 -640 480 -640 480 -640 640 -480 640 -640 426 -640 480 -640 483 -640 360 -640 478 -640 427 -640 424 -612 612 -640 481 -640 480 -640 426 -480 640 -640 426 -480 640 -640 428 -640 480 -375 500 -480 640 -640 480 -500 370 -640 480 -640 427 -500 368 -500 375 -640 543 -427 640 -500 361 -498 640 -640 427 -640 480 -500 356 -640 480 -640 462 -640 480 -480 640 -640 480 -640 480 -385 289 -640 480 -500 333 -478 640 -640 480 -640 383 -640 481 -640 457 -640 443 -640 425 -480 640 -640 480 -640 426 -640 480 -640 428 -480 640 -500 375 -500 375 -640 425 -640 361 -640 427 -640 480 -640 480 -500 400 -640 427 -640 478 -640 427 -640 427 -500 333 -640 421 -500 375 -640 425 -640 423 -480 640 -480 640 -500 375 -640 480 -640 399 -335 500 -640 480 -640 424 -427 640 -640 427 -640 480 -640 425 -335 500 -640 426 -640 426 -640 426 -640 480 -640 384 -640 374 -426 640 -333 500 -500 375 -480 640 -640 337 -640 459 -640 480 -640 358 -640 480 -629 640 -427 640 -640 426 -640 458 -640 640 -563 640 -640 497 -640 480 -480 640 -640 413 -640 426 -500 376 -640 427 -640 640 -426 640 -480 640 -640 480 -640 428 -640 426 -426 640 -480 640 -427 640 -640 480 -429 640 -480 640 -640 512 -427 640 -640 368 -640 480 -640 480 -640 480 -640 480 -640 428 -640 429 -640 426 -612 612 -640 480 -427 640 -480 640 -640 427 -640 360 -640 426 -640 480 -500 346 -640 621 -640 360 -640 480 -640 428 -640 399 -500 375 -640 480 -480 640 -640 475 -500 333 -640 424 -500 400 -640 360 -495 640 -640 484 -640 427 -640 427 -500 334 -640 480 -500 398 -640 449 -640 480 -501 640 -500 334 -640 427 -640 439 -640 427 -640 427 -640 480 -580 640 -640 480 -480 640 -640 360 -428 640 -513 640 -640 427 -640 480 -440 640 -640 427 -562 640 -640 427 -640 480 -500 375 -426 640 -640 427 -640 427 -640 416 -640 425 -640 512 -500 375 -478 640 -521 640 -500 375 -640 433 -640 513 -640 428 -640 383 -640 427 -640 454 -640 427 -640 483 -640 426 -458 640 -640 480 -640 480 -640 428 -612 612 -564 640 -640 480 -500 333 -640 424 -640 426 -509 640 -640 425 -427 640 -640 341 -500 375 -457 640 -480 640 -640 428 -500 334 -640 480 -480 640 -640 429 -640 425 -428 640 -500 333 -480 640 -404 640 -640 480 -640 480 -640 426 -640 502 -640 425 -527 640 -640 425 -640 427 -427 640 -640 428 -425 640 -640 434 -640 480 -640 480 -640 427 -640 424 -640 480 -640 440 -640 439 -640 424 -640 360 -640 427 -640 480 -640 480 -640 424 -478 640 -640 481 -640 426 -640 480 -640 480 -500 496 -640 373 -640 439 -640 310 -640 640 -500 393 -640 428 -640 478 -640 424 -640 480 -640 480 -640 427 -500 334 -640 426 -500 453 -516 640 -640 488 -500 375 -640 424 -640 427 -640 480 -333 500 -640 366 -640 425 -425 640 -500 333 -581 640 -427 640 -480 640 -640 480 -640 363 -612 612 -640 427 -640 480 -640 480 -640 480 -428 640 -640 360 -640 458 -640 400 -640 427 -304 500 -640 480 -500 375 -640 436 -640 425 -427 640 -640 480 -640 427 -640 463 -554 640 -500 344 -375 500 -500 500 -640 480 -500 375 -500 333 -640 433 -640 464 -426 640 -640 512 -480 640 -500 375 -640 554 -640 427 -640 469 -640 480 -640 512 -374 500 -480 640 -263 500 -640 427 -426 640 -609 640 -640 427 -640 360 -640 480 -640 480 -480 640 -640 512 -640 451 -640 480 -640 480 -426 640 -640 480 -640 457 -640 441 -612 612 -577 640 -640 480 -333 500 -640 427 -640 480 -640 425 -512 640 -640 512 -612 612 -640 360 -480 640 -640 480 -424 640 -640 480 -640 428 -640 427 -500 375 -423 640 -640 480 -640 480 -375 500 -640 501 -500 331 -640 425 -612 612 -640 640 -428 640 -500 375 -640 427 -640 441 -500 375 -640 480 -640 481 -425 640 -480 640 -640 425 -640 480 -640 480 -640 480 -480 640 -640 360 -640 480 -432 287 -640 427 -357 500 -640 427 -500 375 -457 640 -640 401 -640 426 -412 200 -427 640 -640 479 -612 612 -375 500 -478 640 -612 612 -640 423 -640 396 -500 333 -640 351 -500 333 -640 428 -500 375 -640 427 -640 434 -500 375 -640 428 -640 427 -346 500 -480 640 -608 640 -640 501 -640 480 -640 480 -640 480 -480 640 -640 392 -375 500 -640 427 -640 427 -480 640 -640 640 -460 640 -640 428 -500 455 -640 425 -640 427 -640 480 -640 480 -640 480 -640 465 -640 428 -500 375 -500 281 -640 427 -640 424 -612 612 -640 429 -500 416 -584 414 -480 640 -640 459 -640 426 -497 640 -425 640 -480 640 -640 427 -640 427 -640 360 -640 480 -426 640 -640 480 -640 427 -640 427 -480 640 -640 338 -640 480 -427 640 -640 424 -427 640 -480 640 -424 640 -480 640 -640 427 -640 480 -640 422 -640 458 -640 427 -640 480 -640 480 -612 612 -640 480 -640 428 -640 480 -640 364 -375 500 -640 640 -640 426 -480 640 -640 480 -640 481 -640 480 -640 480 -640 480 -640 534 -640 480 -640 426 -640 480 -640 480 -500 354 -640 425 -640 426 -427 640 -640 480 -640 480 -640 480 -640 480 -640 425 -478 640 -427 640 -640 573 -479 640 -640 480 -640 480 -640 360 -640 480 -640 441 -480 640 -500 333 -480 640 -480 640 -640 480 -640 427 -640 479 -640 399 -640 425 -640 493 -640 425 -480 640 -480 640 -400 533 -640 589 -640 480 -640 505 -640 426 -500 375 -640 426 -640 425 -375 500 -500 370 -385 289 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -416 640 -500 375 -640 360 -640 480 -640 640 -480 640 -640 428 -640 457 -375 500 -640 480 -640 480 -612 612 -640 427 -640 480 -480 640 -640 481 -640 418 -640 415 -500 438 -640 431 -640 480 -640 428 -640 480 -640 480 -335 500 -640 480 -640 480 -640 427 -640 428 -640 478 -500 375 -640 480 -640 480 -640 416 -640 425 -640 427 -500 313 -640 464 -640 428 -640 480 -640 426 -640 486 -640 480 -640 480 -640 427 -276 500 -640 480 -457 640 -640 482 -640 428 -480 640 -500 374 -500 376 -500 332 -640 359 -393 500 -500 332 -458 640 -478 640 -640 478 -640 480 -640 399 -640 428 -436 640 -524 640 -640 480 -450 450 -640 427 -640 427 -640 426 -640 480 -640 480 -640 424 -428 640 -640 424 -450 600 -480 640 -640 320 -640 425 -350 500 -472 640 -640 640 -480 640 -640 514 -640 480 -640 603 -640 583 -568 320 -640 427 -500 400 -480 640 -640 427 -600 400 -612 612 -640 480 -640 480 -424 640 -640 389 -640 426 -480 640 -480 640 -640 480 -640 480 -640 406 -500 334 -640 480 -428 640 -640 438 -640 480 -550 640 -640 426 -500 332 -500 381 -640 424 -308 300 -640 472 -640 480 -375 500 -428 640 -640 427 -640 480 -612 612 -640 428 -427 640 -500 264 -480 640 -640 480 -640 427 -640 439 -500 335 -375 500 -381 500 -500 333 -640 425 -500 375 -640 480 -500 340 -640 480 -640 480 -640 480 -334 500 -640 472 -480 640 -640 425 -427 640 -640 426 -640 459 -640 480 -376 500 -500 375 -500 387 -411 640 -640 426 -427 640 -375 500 -480 640 -432 640 -640 480 -429 640 -500 375 -640 427 -566 640 -640 480 -640 480 -640 480 -500 333 -640 480 -640 480 -640 427 -640 473 -480 640 -640 427 -640 426 -640 640 -640 427 -640 640 -640 425 -640 478 -333 500 -640 480 -640 426 -640 621 -427 640 -640 429 -640 427 -466 640 -480 640 -640 425 -334 500 -427 640 -640 457 -427 640 -375 500 -640 423 -600 400 -640 427 -500 333 -375 500 -612 612 -427 640 -426 640 -640 480 -640 409 -640 480 -341 500 -640 426 -640 420 -383 640 -640 428 -640 480 -640 316 -640 427 -640 480 -640 480 -640 427 -480 640 -640 360 -500 353 -425 640 -640 480 -640 480 -640 427 -640 425 -375 500 -640 480 -640 427 -640 424 -500 332 -500 375 -480 640 -640 479 -640 480 -640 480 -500 375 -640 480 -500 283 -640 427 -500 375 -500 375 -640 360 -480 640 -640 353 -640 458 -433 640 -640 480 -640 480 -480 640 -640 424 -640 480 -378 640 -640 425 -640 414 -480 640 -640 480 -640 427 -612 612 -640 386 -640 360 -640 426 -375 500 -500 333 -500 400 -640 480 -480 640 -433 640 -144 190 -640 407 -640 427 -640 480 -640 480 -640 425 -640 480 -640 480 -640 426 -640 427 -500 333 -640 478 -640 425 -640 427 -500 375 -640 480 -427 640 -640 427 -640 538 -640 468 -500 375 -640 480 -500 375 -427 640 -500 375 -640 478 -426 640 -480 640 -640 425 -640 427 -480 640 -640 427 -640 426 -640 480 -511 640 -640 480 -640 480 -640 480 -640 480 -480 640 -640 427 -480 640 -640 426 -640 427 -640 426 -640 426 -500 375 -640 426 -500 375 -640 480 -640 425 -640 478 -640 427 -375 500 -500 375 -640 426 -385 289 -640 428 -640 427 -333 500 -640 426 -500 375 -334 500 -500 334 -500 375 -394 500 -640 427 -640 427 -640 480 -444 640 -640 480 -640 427 -640 480 -445 590 -640 425 -426 640 -552 640 -480 640 -640 413 -640 451 -640 427 -480 640 -428 640 -480 640 -640 429 -640 443 -640 640 -640 266 -427 640 -425 640 -640 427 -500 375 -500 333 -427 640 -480 640 -415 625 -500 375 -640 493 -640 461 -640 482 -640 434 -480 640 -640 400 -480 640 -500 375 -500 333 -454 342 -500 334 -640 428 -640 622 -640 480 -640 480 -427 640 -640 183 -640 420 -428 640 -640 426 -425 640 -640 427 -640 480 -640 427 -493 640 -640 480 -640 426 -640 480 -640 480 -612 612 -640 503 -640 427 -640 481 -640 480 -640 640 -480 640 -455 640 -640 480 -640 480 -500 375 -640 427 -480 640 -480 640 -640 428 -640 424 -640 426 -640 640 -427 640 -361 640 -427 640 -640 426 -640 427 -612 612 -427 640 -480 640 -375 500 -500 375 -640 427 -640 429 -640 427 -640 481 -640 480 -332 500 -640 421 -640 430 -640 481 -500 375 -640 458 -640 426 -480 640 -640 480 -640 427 -375 500 -640 428 -640 427 -480 640 -640 480 -640 426 -480 640 -640 480 -640 480 -640 468 -640 480 -426 640 -640 427 -636 640 -480 640 -427 640 -640 466 -640 489 -500 375 -500 337 -375 500 -640 426 -640 427 -494 640 -640 427 -640 480 -640 427 -375 500 -500 333 -640 427 -500 375 -640 426 -600 402 -640 480 -360 640 -640 427 -480 640 -640 480 -640 640 -640 426 -424 640 -640 480 -500 375 -640 480 -640 480 -640 480 -427 640 -640 458 -640 463 -480 640 -640 480 -640 480 -640 427 -640 480 -640 424 -427 640 -640 480 -612 612 -640 428 -500 375 -640 427 -426 640 -640 480 -333 500 -523 640 -427 640 -640 427 -511 640 -480 640 -612 612 -612 612 -480 640 -500 375 -480 640 -640 427 -640 427 -640 480 -526 640 -640 360 -333 500 -427 640 -640 628 -640 458 -640 428 -427 640 -500 305 -480 640 -375 500 -640 427 -640 480 -427 640 -640 480 -640 480 -355 500 -640 424 -640 487 -640 427 -375 500 -480 640 -500 375 -612 612 -500 375 -640 480 -640 427 -640 427 -640 429 -500 375 -640 378 -612 612 -426 640 -640 480 -632 640 -500 375 -418 640 -640 499 -640 478 -350 500 -640 427 -640 480 -640 480 -640 480 -640 425 -640 360 -640 480 -640 427 -640 427 -439 640 -473 600 -500 473 -640 408 -640 427 -640 480 -427 640 -640 427 -500 375 -640 640 -640 426 -640 427 -640 428 -500 333 -640 480 -640 427 -612 612 -427 640 -640 480 -640 480 -640 480 -640 425 -480 640 -640 410 -480 640 -640 427 -640 478 -640 427 -612 612 -640 427 -640 425 -640 470 -348 500 -599 640 -640 316 -427 640 -640 480 -640 480 -427 640 -442 640 -320 240 -640 425 -500 375 -427 640 -640 480 -500 500 -479 640 -500 333 -640 480 -426 640 -640 427 -640 640 -640 480 -640 427 -640 427 -640 429 -640 428 -375 500 -640 480 -640 426 -640 426 -640 425 -640 638 -640 429 -640 425 -480 640 -640 478 -640 360 -480 640 -480 640 -640 426 -500 333 -612 612 -480 640 -500 375 -640 427 -332 500 -500 375 -320 480 -640 423 -375 500 -640 425 -500 375 -640 480 -392 640 -640 569 -500 334 -640 425 -500 375 -480 640 -640 480 -640 427 -640 427 -640 480 -480 640 -640 306 -640 424 -500 348 -500 350 -500 332 -424 640 -640 425 -640 480 -428 640 -640 480 -500 286 -640 480 -640 480 -480 640 -640 401 -640 424 -640 427 -480 640 -386 500 -640 414 -640 414 -480 640 -640 489 -640 457 -480 640 -640 427 -640 526 -434 640 -478 640 -640 480 -640 279 -640 427 -425 640 -333 500 -640 360 -640 480 -457 640 -374 500 -500 375 -480 640 -640 435 -640 480 -316 500 -640 427 -333 500 -640 426 -474 640 -640 480 -640 478 -640 426 -640 424 -427 640 -640 480 -640 489 -416 500 -640 478 -640 480 -640 427 -640 427 -452 500 -400 400 -427 640 -336 254 -640 401 -333 500 -640 427 -640 366 -640 458 -480 640 -640 427 -500 375 -640 359 -500 375 -480 640 -480 640 -640 480 -640 424 -640 480 -640 429 -640 532 -640 478 -480 640 -640 426 -640 400 -640 359 -640 427 -640 512 -640 480 -640 427 -640 480 -640 481 -640 426 -640 432 -427 640 -500 375 -427 640 -640 480 -425 640 -480 640 -480 640 -640 430 -640 480 -640 480 -640 427 -600 450 -640 360 -640 480 -640 424 -640 425 -612 612 -640 482 -640 480 -640 429 -640 480 -640 480 -480 640 -640 480 -480 640 -640 427 -640 428 -640 480 -640 428 -640 545 -640 426 -480 640 -640 480 -410 500 -640 427 -640 597 -640 480 -640 427 -640 428 -612 612 -479 640 -640 482 -640 480 -500 375 -640 425 -640 480 -640 480 -640 480 -640 480 -612 612 -428 640 -500 375 -480 640 -640 428 -640 427 -500 375 -640 359 -640 426 -640 480 -640 478 -332 500 -640 480 -427 640 -640 480 -480 640 -640 427 -640 480 -640 480 -640 432 -500 333 -640 480 -480 640 -480 640 -526 640 -640 480 -640 480 -640 440 -500 334 -384 640 -640 354 -375 500 -480 640 -640 418 -640 480 -640 426 -640 427 -640 427 -640 424 -500 375 -480 640 -640 424 -500 398 -640 480 -640 427 -640 480 -640 480 -375 500 -424 640 -640 480 -640 478 -480 640 -427 640 -500 373 -425 640 -640 480 -640 427 -480 640 -484 640 -480 640 -640 426 -640 381 -480 640 -427 640 -640 512 -640 424 -426 640 -640 400 -640 480 -640 442 -640 480 -480 640 -500 375 -425 640 -640 457 -426 640 -640 432 -480 640 -640 480 -640 480 -427 640 -640 425 -375 500 -640 480 -427 640 -640 428 -612 612 -640 361 -640 466 -450 360 -640 624 -500 335 -428 640 -640 427 -480 640 -640 425 -640 427 -640 480 -500 375 -480 640 -640 298 -640 480 -500 449 -640 426 -336 448 -500 375 -640 480 -640 640 -427 640 -640 360 -640 427 -478 640 -640 427 -640 427 -640 476 -544 640 -640 480 -640 478 -426 640 -640 480 -640 426 -428 640 -480 640 -300 400 -640 603 -640 480 -428 640 -383 640 -480 640 -640 480 -640 418 -375 500 -640 439 -500 333 -640 427 -640 491 -640 482 -500 333 -640 428 -640 427 -427 640 -640 480 -639 640 -640 480 -640 473 -640 480 -640 480 -640 544 -640 456 -480 640 -640 384 -640 427 -500 281 -640 480 -640 312 -640 457 -640 427 -640 427 -500 348 -640 480 -427 640 -640 426 -640 425 -640 480 -640 480 -500 375 -480 640 -425 640 -640 588 -640 480 -640 434 -640 427 -367 500 -506 380 -375 500 -640 428 -640 424 -624 640 -425 640 -500 375 -639 640 -600 400 -500 375 -640 480 -400 600 -480 640 -500 375 -640 436 -640 480 -428 640 -640 452 -480 640 -640 428 -612 612 -640 512 -500 384 -375 500 -426 640 -479 640 -640 480 -640 411 -640 480 -640 427 -640 359 -640 478 -640 480 -337 500 -640 416 -427 640 -640 480 -640 480 -612 612 -612 612 -480 640 -375 500 -640 427 -640 480 -640 426 -425 640 -480 640 -640 480 -640 480 -640 427 -640 428 -640 427 -640 480 -480 640 -640 426 -640 501 -640 480 -480 640 -640 480 -549 640 -372 500 -640 480 -640 640 -426 640 -500 375 -640 482 -640 427 -640 426 -333 500 -426 640 -500 334 -640 439 -640 429 -640 480 -480 640 -640 426 -500 375 -333 500 -640 587 -500 375 -640 425 -640 426 -640 425 -640 427 -640 429 -500 375 -427 640 -640 480 -640 361 -427 640 -500 375 -640 480 -640 424 -452 640 -640 480 -640 480 -640 480 -640 480 -640 427 -500 375 -640 480 -433 640 -640 480 -640 480 -547 640 -640 428 -640 427 -640 428 -640 427 -640 545 -480 640 -640 640 -640 476 -640 480 -640 438 -500 424 -480 640 -428 640 -500 332 -457 640 -427 640 -500 375 -640 464 -513 640 -640 480 -640 427 -640 359 -640 426 -640 426 -640 428 -640 480 -640 480 -338 500 -457 640 -640 427 -500 375 -640 426 -500 375 -640 428 -640 480 -612 612 -640 425 -401 288 -640 425 -640 426 -640 425 -500 375 -640 512 -640 428 -513 640 -640 428 -474 640 -640 425 -322 214 -612 612 -640 480 -640 512 -640 480 -426 640 -640 513 -640 640 -640 480 -640 425 -427 640 -640 428 -640 480 -534 640 -640 480 -640 480 -400 640 -425 640 -640 428 -640 427 -640 480 -640 480 -640 428 -640 480 -427 640 -640 360 -640 427 -640 480 -640 480 -640 502 -640 588 -640 480 -640 480 -640 480 -640 427 -480 640 -375 500 -612 612 -640 480 -480 640 -427 640 -427 640 -500 332 -640 427 -500 375 -640 480 -640 427 -640 427 -480 640 -640 424 -640 480 -640 480 -640 480 -640 427 -640 529 -426 640 -640 329 -640 480 -640 480 -330 500 -640 429 -640 453 -640 383 -640 437 -640 457 -640 640 -500 375 -640 539 -640 427 -640 426 -640 425 -375 500 -640 427 -640 480 -500 300 -480 640 -500 335 -640 480 -640 427 -640 480 -640 427 -640 480 -640 480 -640 427 -638 394 -640 480 -640 427 -640 427 -479 640 -493 640 -480 640 -640 465 -500 375 -500 381 -640 478 -498 640 -473 640 -640 425 -640 480 -480 640 -640 428 -640 356 -640 426 -640 480 -640 425 -640 427 -480 640 -640 482 -480 640 -640 427 -640 480 -640 427 -640 426 -640 427 -427 640 -640 413 -640 480 -500 375 -640 424 -640 610 -371 640 -640 361 -500 375 -640 427 -640 480 -640 480 -640 426 -640 425 -500 312 -640 426 -427 640 -640 427 -640 480 -375 500 -640 480 -640 480 -640 427 -640 360 -640 480 -480 640 -640 427 -640 427 -640 427 -425 640 -640 427 -640 480 -640 427 -640 427 -333 500 -640 427 -375 500 -539 640 -640 478 -640 480 -640 427 -493 640 -640 427 -612 612 -334 500 -480 640 -640 558 -640 512 -640 480 -640 426 -640 480 -640 479 -480 640 -500 375 -640 480 -640 480 -640 478 -480 640 -612 612 -640 423 -500 334 -640 425 -640 478 -360 640 -513 640 -640 428 -640 425 -640 427 -427 640 -500 415 -640 427 -640 640 -640 427 -640 473 -500 375 -334 500 -640 480 -640 480 -640 428 -640 480 -640 499 -640 427 -640 450 -640 411 -640 481 -425 640 -427 640 -640 427 -480 640 -576 640 -640 480 -640 480 -500 375 -640 480 -640 429 -500 333 -640 480 -640 480 -480 640 -480 640 -640 424 -640 427 -640 413 -640 291 -500 375 -612 612 -640 425 -640 429 -640 480 -640 426 -640 640 -426 640 -640 480 -640 640 -640 480 -640 425 -640 428 -500 375 -640 480 -427 640 -640 426 -640 480 -640 427 -612 612 -640 427 -640 406 -640 479 -500 333 -640 480 -640 480 -375 500 -640 480 -640 360 -313 500 -480 640 -375 500 -640 480 -640 481 -640 428 -640 428 -480 640 -427 640 -640 360 -500 375 -640 359 -480 640 -361 640 -640 474 -640 427 -500 375 -640 426 -480 640 -640 396 -640 480 -640 480 -640 481 -480 640 -640 425 -640 480 -640 480 -443 640 -427 640 -640 480 -640 480 -640 426 -514 640 -426 640 -612 612 -500 333 -500 458 -640 423 -333 500 -640 458 -640 413 -640 486 -640 427 -500 333 -500 332 -612 612 -640 480 -425 640 -426 640 -640 480 -640 480 -640 513 -640 473 -640 480 -640 480 -640 428 -640 392 -333 500 -640 480 -640 480 -612 612 -640 401 -478 640 -640 427 -640 480 -640 427 -595 640 -500 352 -500 333 -640 426 -640 480 -640 480 -640 494 -640 480 -640 427 -640 480 -640 426 -480 640 -640 360 -640 428 -640 427 -450 600 -500 415 -640 480 -450 640 -640 480 -640 424 -351 640 -500 375 -640 427 -428 640 -640 415 -640 427 -612 612 -640 480 -640 426 -640 480 -640 480 -500 328 -640 480 -478 640 -640 487 -640 360 -480 640 -640 480 -640 424 -478 640 -480 640 -640 425 -427 640 -640 480 -640 480 -300 300 -640 480 -640 427 -427 640 -640 480 -640 426 -530 640 -640 480 -640 427 -640 425 -640 480 -640 427 -640 424 -640 478 -640 396 -480 640 -500 333 -640 480 -640 478 -640 484 -640 480 -640 427 -640 640 -640 428 -480 640 -500 331 -640 528 -426 640 -640 480 -640 478 -640 288 -640 428 -424 640 -256 200 -640 128 -640 425 -640 427 -500 500 -640 480 -333 500 -640 480 -640 480 -640 427 -640 480 -480 640 -640 544 -640 480 -640 339 -349 480 -426 640 -640 480 -336 450 -640 512 -500 400 -640 431 -640 480 -480 640 -640 457 -480 640 -640 428 -640 427 -640 451 -375 500 -640 480 -640 480 -640 425 -640 480 -640 428 -426 640 -427 640 -640 480 -640 480 -451 338 -500 332 -480 640 -500 375 -500 333 -333 500 -640 478 -427 640 -500 446 -640 425 -480 640 -640 427 -520 360 -427 640 -640 480 -356 500 -640 427 -640 427 -333 500 -500 375 -640 480 -640 609 -600 399 -640 485 -640 427 -500 492 -375 500 -640 480 -640 429 -375 500 -480 640 -427 640 -375 500 -640 427 -640 427 -640 480 -640 480 -640 480 -640 428 -640 427 -640 480 -640 426 -549 640 -480 640 -582 640 -640 529 -639 640 -640 428 -640 366 -640 480 -640 427 -640 640 -640 476 -640 480 -640 427 -500 333 -640 427 -640 426 -480 640 -640 427 -640 324 -640 427 -334 500 -640 480 -336 500 -494 367 -640 426 -640 425 -500 375 -634 640 -475 640 -640 480 -500 298 -640 480 -640 601 -640 480 -640 341 -640 485 -640 425 -432 640 -640 513 -640 428 -640 393 -640 425 -500 299 -640 426 -480 640 -480 640 -418 640 -640 480 -640 480 -480 640 -640 424 -640 360 -633 640 -480 640 -375 500 -426 640 -640 427 -480 640 -640 425 -426 640 -640 400 -640 361 -424 640 -640 480 -640 438 -640 480 -500 333 -640 399 -640 428 -319 640 -359 500 -640 360 -640 428 -480 640 -640 451 -640 480 -500 260 -640 480 -640 480 -640 427 -640 480 -640 427 -612 612 -375 500 -480 640 -640 480 -640 480 -480 640 -640 427 -427 640 -480 640 -640 426 -640 427 -640 420 -640 640 -375 500 -390 500 -640 377 -480 640 -640 480 -640 425 -375 500 -488 640 -640 427 -640 427 -500 407 -500 333 -640 426 -640 427 -480 640 -640 428 -640 378 -640 480 -427 640 -348 500 -428 640 -316 500 -640 512 -480 640 -640 480 -640 425 -640 480 -428 640 -500 384 -640 480 -640 360 -427 640 -640 426 -640 451 -640 360 -640 427 -482 640 -640 426 -479 640 -426 640 -640 480 -640 427 -640 361 -640 480 -500 375 -640 480 -500 375 -500 375 -640 426 -640 428 -480 640 -640 480 -425 640 -640 484 -640 453 -640 429 -426 640 -500 375 -480 640 -500 375 -640 312 -500 334 -640 427 -640 427 -640 427 -640 425 -640 616 -640 633 -640 569 -640 427 -640 426 -612 612 -500 375 -480 640 -640 425 -427 640 -640 425 -640 426 -640 427 -640 426 -512 640 -500 400 -480 640 -640 480 -640 457 -500 375 -640 427 -640 428 -640 400 -640 428 -375 500 -640 480 -640 426 -640 512 -640 480 -640 413 -640 480 -500 373 -467 640 -640 480 -640 426 -640 429 -480 640 -480 640 -640 427 -427 640 -463 640 -640 425 -640 383 -640 425 -640 480 -427 640 -640 427 -500 330 -500 333 -640 480 -480 640 -640 424 -640 428 -640 290 -640 480 -480 640 -640 480 -640 369 -640 480 -500 375 -640 480 -464 640 -428 640 -640 484 -640 480 -640 480 -640 427 -464 640 -612 612 -480 640 -640 427 -426 640 -480 640 -640 640 -640 480 -640 480 -640 311 -500 332 -640 454 -640 480 -480 640 -640 427 -480 360 -640 427 -500 375 -640 480 -375 500 -640 480 -640 366 -640 480 -640 558 -535 357 -640 480 -640 480 -427 640 -640 480 -426 640 -640 480 -612 612 -500 375 -480 640 -640 425 -640 480 -480 640 -640 480 -640 480 -427 640 -640 428 -640 174 -427 640 -640 457 -640 524 -640 480 -640 480 -640 480 -640 480 -640 640 -411 640 -640 427 -640 427 -427 640 -640 511 -640 480 -586 430 -480 640 -640 480 -640 480 -640 480 -640 361 -427 640 -640 480 -500 435 -612 612 -207 640 -425 640 -425 640 -640 427 -640 426 -480 640 -640 427 -480 640 -500 333 -640 436 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -640 480 -612 612 -640 480 -640 427 -640 480 -452 640 -640 425 -640 475 -640 356 -500 375 -640 425 -427 640 -500 375 -640 427 -500 375 -640 427 -640 512 -640 423 -640 456 -480 640 -640 427 -500 335 -250 306 -416 640 -640 480 -640 515 -500 375 -500 333 -640 424 -427 640 -640 424 -500 375 -640 425 -466 640 -640 469 -640 480 -640 480 -640 480 -457 640 -480 640 -500 640 -427 640 -640 427 -640 480 -640 513 -480 640 -640 480 -640 427 -640 394 -640 360 -640 429 -500 375 -402 640 -640 427 -480 640 -640 427 -640 480 -640 360 -427 640 -500 375 -640 480 -500 375 -640 427 -500 375 -640 480 -640 478 -480 640 -478 640 -500 332 -640 439 -640 480 -640 480 -469 640 -333 500 -640 419 -640 194 -640 480 -640 480 -640 426 -612 612 -640 360 -640 428 -500 375 -640 425 -640 457 -640 480 -640 480 -640 425 -500 375 -600 416 -640 424 -500 375 -640 480 -640 480 -640 428 -640 480 -335 500 -640 640 -427 640 -640 428 -480 640 -500 331 -500 374 -375 500 -640 480 -640 426 -640 480 -640 366 -480 640 -640 427 -640 480 -640 480 -640 425 -640 424 -640 427 -640 428 -640 429 -640 492 -640 427 -640 480 -399 640 -640 480 -640 480 -640 480 -640 361 -640 427 -426 640 -640 425 -640 427 -640 640 -640 480 -640 427 -640 640 -640 426 -640 480 -640 480 -640 480 -500 410 -640 480 -640 427 -500 500 -383 640 -640 480 -640 480 -640 428 -360 439 -480 640 -500 480 -640 427 -422 640 -426 640 -500 375 -640 480 -596 640 -426 640 -640 480 -500 332 -612 612 -640 480 -640 480 -640 480 -640 278 -640 480 -640 426 -640 427 -640 427 -612 612 -311 308 -640 427 -640 429 -640 428 -640 480 -612 612 -500 335 -640 480 -640 427 -640 481 -500 333 -640 480 -640 480 -640 479 -640 480 -450 395 -640 480 -640 479 -640 427 -480 640 -640 480 -640 426 -426 640 -640 360 -427 640 -423 640 -640 480 -437 500 -640 481 -640 426 -640 480 -640 480 -640 427 -640 480 -640 480 -500 332 -640 480 -640 426 -640 480 -640 362 -640 479 -640 480 -640 426 -497 640 -640 427 -640 429 -640 427 -640 541 -480 640 -600 418 -640 480 -500 333 -640 480 -448 299 -640 427 -500 333 -640 480 -375 500 -375 500 -480 640 -640 480 -640 427 -640 480 -478 640 -640 426 -426 640 -427 640 -640 427 -640 427 -480 640 -640 280 -640 425 -375 500 -480 640 -640 447 -425 640 -640 426 -428 640 -640 480 -415 500 -640 640 -640 468 -427 640 -640 480 -640 464 -640 361 -640 480 -640 640 -612 612 -640 444 -640 427 -640 427 -640 427 -500 468 -640 442 -426 640 -640 388 -480 640 -640 480 -427 640 -640 444 -500 333 -427 640 -600 400 -640 427 -640 427 -640 435 -640 360 -640 426 -640 428 -480 640 -640 427 -640 428 -640 354 -640 186 -640 426 -640 430 -500 377 -480 640 -640 428 -640 480 -640 559 -427 640 -500 333 -640 427 -523 640 -640 426 -640 480 -640 480 -500 333 -500 375 -401 500 -375 500 -640 428 -480 640 -305 229 -480 640 -480 640 -640 426 -640 480 -640 409 -640 427 -640 425 -640 428 -375 500 -640 501 -500 375 -640 480 -500 375 -640 480 -640 480 -612 612 -640 425 -427 640 -424 640 -640 480 -640 480 -640 425 -427 640 -512 640 -640 428 -640 429 -640 427 -640 480 -640 427 -612 612 -640 480 -640 474 -612 612 -640 424 -405 640 -640 480 -612 612 -640 480 -640 480 -500 375 -640 616 -640 427 -480 640 -480 640 -500 333 -640 427 -500 375 -480 640 -640 480 -640 426 -640 424 -640 523 -640 427 -443 640 -640 427 -640 424 -640 421 -500 334 -640 640 -640 479 -427 640 -640 434 -401 640 -640 426 -640 428 -612 612 -491 640 -428 640 -480 640 -640 490 -640 480 -480 640 -640 427 -480 640 -500 375 -640 480 -640 481 -500 333 -640 480 -640 457 -419 640 -640 480 -640 427 -426 640 -640 427 -640 429 -500 375 -426 640 -640 401 -640 426 -480 640 -640 359 -374 500 -479 640 -500 333 -640 480 -640 504 -612 612 -640 457 -500 401 -640 429 -640 449 -500 298 -640 426 -500 375 -375 500 -640 412 -640 385 -640 406 -640 478 -640 427 -640 427 -500 375 -640 480 -640 440 -640 480 -640 530 -480 360 -480 640 -640 480 -640 480 -480 640 -640 429 -640 431 -640 481 -640 469 -640 479 -640 480 -481 640 -640 427 -640 480 -426 640 -640 480 -425 640 -480 640 -640 425 -500 375 -628 640 -640 565 -500 375 -330 500 -374 500 -500 333 -640 427 -500 333 -640 440 -640 426 -480 640 -612 612 -428 640 -480 640 -640 428 -575 640 -640 425 -640 427 -500 375 -500 366 -427 640 -500 281 -428 640 -398 640 -640 480 -640 427 -640 428 -640 428 -500 400 -500 373 -500 375 -640 426 -640 425 -640 424 -500 333 -640 418 -425 640 -640 427 -640 480 -640 583 -640 481 -640 349 -480 640 -640 428 -640 427 -640 480 -640 480 -640 640 -640 427 -640 427 -480 640 -640 480 -640 480 -640 463 -499 640 -640 426 -640 302 -427 640 -640 427 -640 480 -640 443 -500 333 -640 480 -511 640 -640 463 -426 640 -500 336 -640 480 -640 382 -640 480 -640 427 -640 513 -428 640 -479 640 -640 360 -640 425 -427 640 -640 427 -640 428 -480 640 -640 480 -640 502 -640 354 -500 375 -486 500 -500 333 -640 426 -480 640 -640 421 -640 427 -640 480 -640 480 -640 512 -640 427 -640 512 -500 333 -640 363 -640 427 -640 427 -402 640 -361 640 -427 640 -640 640 -500 375 -640 427 -500 333 -640 480 -640 594 -640 427 -456 640 -640 480 -640 434 -640 536 -640 427 -640 582 -640 549 -640 428 -640 516 -640 480 -640 480 -640 480 -640 480 -640 348 -640 480 -480 640 -640 425 -480 640 -480 640 -640 427 -640 425 -640 426 -640 427 -480 640 -640 427 -640 360 -427 640 -640 425 -640 480 -640 428 -640 480 -640 339 -427 640 -640 480 -640 480 -640 427 -640 423 -640 427 -640 426 -640 427 -640 428 -411 640 -640 420 -640 480 -488 640 -500 334 -431 640 -640 403 -640 428 -500 375 -500 375 -640 480 -327 500 -500 333 -480 640 -598 640 -500 375 -640 480 -500 375 -640 431 -640 480 -500 375 -640 480 -427 640 -640 480 -640 425 -480 640 -500 375 -640 480 -640 426 -640 480 -640 360 -640 480 -640 456 -500 375 -640 398 -471 640 -481 640 -640 359 -500 381 -640 524 -383 640 -640 427 -640 481 -640 480 -640 480 -428 640 -478 640 -500 329 -640 425 -375 500 -640 480 -640 426 -640 424 -500 455 -480 640 -612 612 -500 312 -640 480 -640 428 -640 480 -512 640 -640 434 -640 640 -478 640 -640 369 -640 480 -511 640 -500 332 -612 612 -640 281 -640 427 -427 640 -640 480 -640 428 -640 425 -640 480 -426 640 -640 640 -640 480 -425 640 -640 434 -640 514 -640 480 -480 640 -640 480 -640 484 -439 640 -640 431 -480 640 -371 500 -426 640 -640 334 -640 353 -427 640 -427 640 -427 640 -640 427 -480 640 -424 640 -426 640 -640 425 -640 480 -333 500 -426 640 -640 429 -640 640 -640 427 -500 375 -640 428 -640 480 -640 480 -427 640 -640 424 -552 640 -640 506 -640 424 -640 427 -640 480 -500 333 -500 375 -640 392 -640 570 -640 424 -640 427 -500 401 -640 427 -478 640 -640 425 -640 480 -640 480 -640 513 -640 480 -425 640 -640 640 -640 427 -640 480 -356 533 -500 375 -640 360 -427 640 -426 640 -640 427 -640 480 -640 480 -640 480 -640 480 -640 425 -640 480 -640 479 -640 425 -600 399 -640 366 -640 443 -500 375 -640 434 -640 428 -640 418 -640 480 -426 640 -513 640 -640 416 -640 428 -640 427 -500 375 -640 480 -519 640 -500 313 -640 480 -345 500 -640 334 -640 402 -640 427 -612 612 -480 640 -640 480 -640 413 -640 427 -640 426 -480 640 -640 426 -640 426 -427 640 -640 480 -612 612 -480 640 -500 375 -640 518 -640 480 -640 359 -500 375 -640 427 -500 375 -640 480 -640 480 -612 612 -640 429 -640 427 -640 427 -640 425 -640 426 -640 427 -640 428 -500 316 -640 480 -640 640 -640 436 -640 427 -480 640 -640 425 -640 480 -640 480 -479 640 -640 480 -640 427 -640 480 -427 640 -640 640 -640 359 -612 612 -640 480 -640 480 -640 480 -640 480 -425 640 -640 444 -640 480 -326 500 -457 640 -640 480 -579 640 -640 360 -640 435 -640 480 -362 500 -640 480 -428 640 -640 458 -375 500 -640 480 -480 640 -529 640 -375 500 -640 534 -640 480 -640 505 -640 428 -500 375 -640 426 -640 427 -500 375 -640 314 -640 480 -304 640 -640 480 -480 640 -468 405 -426 640 -519 640 -640 480 -640 480 -640 427 -640 480 -640 480 -640 426 -640 427 -500 375 -640 292 -640 480 -640 566 -427 640 -640 526 -640 480 -640 427 -427 640 -640 424 -640 427 -640 426 -640 480 -640 427 -640 426 -640 480 -428 640 -640 424 -640 425 -640 483 -429 640 -424 640 -640 426 -612 612 -640 480 -640 480 -640 430 -640 480 -512 640 -467 640 -640 426 -640 427 -500 241 -640 480 -640 480 -481 640 -427 640 -640 480 -640 326 -640 564 -640 640 -480 640 -640 286 -425 640 -480 640 -423 640 -640 424 -640 426 -640 428 -640 427 -640 426 -640 480 -480 640 -640 640 -375 500 -640 628 -640 426 -640 399 -640 428 -640 427 -612 612 -640 477 -640 425 -612 612 -640 480 -640 480 -640 427 -640 480 -640 480 -428 640 -480 640 -640 444 -640 501 -480 640 -500 333 -619 640 -640 427 -640 498 -640 480 -640 480 -426 640 -500 375 -640 426 -640 480 -640 640 -480 640 -640 426 -640 428 -468 640 -640 427 -640 480 -640 427 -375 500 -640 480 -640 427 -640 359 -640 427 -640 425 -640 426 -640 361 -640 480 -640 427 -389 640 -427 640 -640 393 -612 612 -480 640 -427 640 -640 428 -640 491 -428 640 -472 640 -640 427 -640 428 -508 640 -640 427 -433 640 -425 640 -588 640 -500 370 -640 427 -640 428 -640 480 -640 426 -640 448 -640 480 -640 499 -612 612 -640 427 -500 375 -578 640 -500 375 -640 426 -640 427 -640 480 -640 426 -640 640 -500 375 -640 480 -480 640 -480 640 -612 612 -640 427 -428 640 -640 427 -640 640 -480 640 -640 480 -640 480 -640 428 -640 480 -640 640 -640 480 -640 427 -640 640 -640 427 -640 481 -640 479 -320 240 -427 640 -640 427 -332 500 -500 500 -640 427 -640 480 -640 427 -640 480 -640 428 -640 376 -640 480 -333 500 -480 640 -640 428 -640 480 -640 480 -640 427 -480 640 -500 375 -640 480 -640 427 -426 640 -640 426 -640 640 -640 427 -640 494 -640 321 -640 425 -640 427 -500 375 -640 348 -640 238 -640 427 -640 453 -640 433 -640 427 -640 480 -640 480 -500 500 -640 480 -480 640 -640 480 -640 480 -480 640 -640 480 -640 480 -427 640 -640 360 -384 640 -480 640 -640 448 -500 375 -478 640 -375 500 -640 480 -640 480 -640 480 -640 424 -640 480 -640 480 -288 160 -640 468 -640 474 -427 640 -640 480 -640 480 -640 427 -640 468 -640 480 -640 427 -500 244 -640 427 -500 375 -640 222 -640 480 -640 480 -640 480 -640 427 -640 427 -640 480 -640 406 -480 640 -640 425 -640 480 -640 427 -640 429 -500 333 -640 427 -500 375 -640 391 -640 480 -640 480 -640 425 -640 427 -640 480 -480 640 -640 427 -640 480 -640 427 -640 427 -640 493 -640 428 -640 425 -640 480 -480 640 -426 640 -480 640 -480 640 -428 640 -425 640 -500 333 -500 375 -640 427 -640 427 -640 488 -640 480 -640 427 -514 640 -500 451 -640 480 -474 640 -640 425 -640 426 -640 425 -480 640 -640 498 -640 480 -640 480 -640 459 -640 480 -598 640 -640 480 -480 640 -429 640 -640 360 -500 500 -326 640 -640 427 -640 426 -640 427 -640 480 -640 428 -640 427 -640 425 -600 400 -640 619 -640 640 -426 640 -500 374 -640 480 -640 482 -480 640 -480 640 -640 428 -612 612 -640 480 -480 640 -480 640 -640 640 -640 427 -427 640 -640 480 -640 427 -640 480 -500 375 -640 569 -480 640 -640 461 -640 428 -480 640 -640 361 -640 429 -375 500 -640 427 -500 375 -640 384 -640 427 -640 428 -436 640 -600 450 -480 640 -427 640 -484 640 -640 480 -640 427 -427 640 -478 640 -480 640 -640 640 -640 480 -640 423 -500 333 -640 427 -480 640 -480 640 -640 453 -419 640 -426 640 -640 636 -640 480 -640 426 -640 427 -612 612 -640 478 -640 480 -640 427 -500 375 -640 480 -640 424 -427 640 -640 427 -640 486 -482 640 -512 640 -640 400 -427 640 -500 375 -347 500 -640 633 -640 426 -480 640 -500 336 -640 382 -640 484 -500 333 -640 425 -640 427 -640 427 -640 427 -640 427 -640 427 -640 427 -427 640 -640 512 -500 334 -640 427 -640 573 -425 640 -640 427 -480 640 -640 427 -640 480 -400 266 -640 480 -480 640 -640 427 -640 481 -640 480 -500 375 -640 640 -536 640 -640 480 -640 480 -640 480 -640 425 -640 480 -640 427 -270 360 -640 480 -640 480 -640 512 -394 401 -500 342 -320 240 -424 640 -500 333 -640 468 -383 640 -640 427 -425 640 -640 492 -640 425 -640 480 -640 416 -480 640 -640 427 -640 480 -640 453 -640 427 -640 427 -640 426 -640 489 -480 640 -426 640 -549 640 -640 427 -640 478 -640 427 -640 425 -480 640 -480 640 -640 428 -640 427 -640 440 -640 506 -500 375 -612 612 -640 426 -640 480 -640 352 -640 427 -480 640 -640 415 -640 480 -640 413 -640 504 -640 401 -500 375 -612 612 -500 375 -640 426 -427 640 -640 480 -640 359 -427 640 -640 480 -500 276 -500 375 -640 439 -640 427 -500 314 -480 640 -640 622 -640 423 -500 435 -640 432 -640 480 -640 640 -500 403 -375 500 -640 426 -500 375 -640 425 -640 425 -640 427 -640 640 -580 640 -640 313 -640 640 -612 612 -640 386 -640 427 -640 427 -640 480 -612 612 -640 427 -640 480 -640 424 -612 612 -640 517 -426 640 -640 433 -640 418 -640 441 -640 426 -640 425 -480 640 -640 360 -640 310 -640 425 -640 480 -640 425 -500 333 -640 427 -640 428 -480 640 -640 427 -640 428 -640 484 -481 640 -503 480 -640 159 -640 480 -425 640 -480 640 -640 427 -456 640 -640 354 -425 640 -552 640 -640 427 -640 552 -640 480 -640 427 -640 480 -640 426 -640 640 -640 427 -640 480 -640 480 -425 640 -640 480 -640 428 -640 480 -640 480 -640 640 -640 425 -640 415 -640 483 -640 361 -640 427 -640 427 -500 330 -640 425 -640 427 -640 426 -500 333 -640 480 -640 360 -640 427 -640 426 -640 426 -427 640 -425 640 -640 430 -640 480 -426 640 -640 427 -480 640 -612 612 -640 356 -375 500 -425 640 -640 480 -640 428 -640 360 -389 500 -500 375 -427 640 -640 427 -640 428 -640 423 -478 640 -640 427 -640 424 -640 427 -423 640 -334 500 -640 427 -640 427 -640 480 -640 480 -640 360 -640 519 -480 640 -640 390 -640 425 -500 325 -640 421 -478 640 -640 425 -500 375 -640 424 -640 422 -500 375 -640 640 -332 500 -640 426 -640 427 -640 308 -480 640 -457 640 -640 480 -612 612 -640 480 -640 434 -450 420 -640 480 -640 400 -640 428 -640 582 -640 427 -640 386 -500 400 -640 480 -640 427 -640 499 -640 480 -375 500 -640 425 -480 640 -480 640 -500 375 -640 390 -480 640 -640 425 -500 400 -425 640 -500 374 -640 480 -500 333 -640 469 -640 444 -640 428 -418 640 -640 431 -500 281 -640 426 -423 640 -413 640 -500 375 -425 640 -480 640 -640 427 -640 489 -500 325 -640 480 -500 340 -640 359 -640 427 -640 480 -480 640 -480 640 -640 427 -640 387 -480 640 -480 640 -400 280 -640 480 -640 480 -640 480 -331 500 -640 481 -640 454 -640 480 -640 480 -640 426 -640 480 -640 427 -640 360 -640 480 -640 480 -500 345 -640 427 -640 480 -428 640 -500 375 -640 427 -640 426 -640 426 -480 640 -612 612 -640 439 -640 427 -640 599 -640 428 -640 428 -500 375 -640 512 -427 640 -640 360 -640 427 -640 480 -500 375 -500 375 -500 291 -480 640 -480 640 -640 480 -500 375 -612 612 -443 640 -640 561 -640 427 -467 640 -427 640 -640 427 -640 426 -640 424 -480 640 -427 640 -375 500 -640 480 -640 427 -528 640 -640 360 -640 480 -640 427 -333 500 -640 478 -400 640 -500 375 -640 427 -640 481 -640 427 -480 640 -640 426 -640 480 -427 640 -640 480 -640 419 -640 427 -480 640 -640 428 -640 427 -640 534 -640 425 -640 480 -480 640 -640 480 -393 316 -640 445 -640 480 -480 640 -480 640 -427 640 -640 480 -640 417 -425 640 -640 427 -640 426 -500 281 -585 640 -640 480 -500 375 -640 480 -640 480 -640 427 -640 421 -640 427 -587 640 -640 452 -640 427 -640 480 -640 425 -640 640 -640 488 -480 640 -640 359 -640 503 -640 480 -500 332 -640 521 -427 640 -640 428 -640 480 -640 427 -640 480 -375 500 -640 367 -640 480 -640 480 -427 640 -640 480 -640 427 -640 512 -640 480 -500 333 -640 480 -640 427 -640 333 -640 424 -640 480 -640 427 -640 427 -640 480 -640 427 -640 425 -480 640 -500 375 -640 428 -640 427 -640 480 -612 612 -375 500 -500 375 -500 333 -500 375 -640 480 -640 427 -640 480 -500 375 -640 478 -640 426 -640 480 -500 400 -375 500 -640 428 -640 499 -640 360 -640 427 -640 480 -640 480 -640 427 -640 480 -640 485 -427 640 -375 500 -640 456 -640 464 -473 640 -640 359 -640 425 -612 612 -640 427 -444 640 -640 480 -640 428 -640 414 -500 375 -333 500 -500 333 -640 437 -612 612 -333 500 -640 548 -640 480 -640 512 -480 640 -640 428 -640 480 -375 500 -640 429 -333 500 -640 480 -640 438 -379 640 -640 427 -640 426 -479 640 -640 480 -500 375 -640 429 -500 375 -640 480 -640 426 -640 480 -640 480 -640 427 -640 467 -427 640 -640 426 -427 640 -640 434 -480 640 -612 612 -640 425 -640 427 -640 427 -442 640 -500 333 -480 640 -640 480 -640 431 -476 261 -640 427 -640 427 -480 640 -640 427 -480 640 -480 640 -640 640 -500 334 -640 425 -640 427 -427 640 -640 427 -480 640 -500 375 -640 427 -640 480 -478 640 -640 480 -640 466 -478 640 -512 640 -640 418 -640 478 -480 640 -640 427 -640 480 -640 480 -500 375 -500 375 -480 640 -640 480 -640 427 -480 640 -427 640 -375 500 -640 427 -640 480 -640 426 -480 640 -425 640 -640 428 -445 640 -640 427 -640 427 -427 640 -640 522 -500 334 -640 427 -640 360 -640 425 -480 640 -441 640 -640 480 -640 469 -640 427 -427 640 -612 612 -500 375 -400 600 -640 360 -426 640 -640 480 -640 480 -640 480 -640 356 -640 480 -640 480 -640 480 -640 426 -640 360 -640 426 -640 480 -640 480 -600 402 -640 480 -480 640 -385 289 -640 360 -640 480 -640 480 -640 480 -640 426 -640 480 -640 480 -640 426 -427 640 -640 479 -428 640 -480 640 -500 375 -640 406 -334 500 -640 413 -427 640 -375 500 -427 640 -480 640 -640 480 -636 640 -640 426 -500 375 -480 640 -480 640 -640 576 -640 640 -640 426 -612 612 -640 426 -640 429 -640 342 -428 640 -480 640 -480 640 -427 640 -640 480 -640 479 -640 427 -640 425 -500 400 -427 640 -500 375 -640 480 -640 427 -480 640 -640 478 -640 480 -480 640 -427 640 -640 428 -500 375 -640 396 -375 500 -300 500 -640 429 -428 640 -640 426 -480 640 -640 480 -480 640 -640 429 -640 389 -640 427 -640 428 -640 480 -480 640 -480 640 -426 640 -640 480 -640 480 -640 443 -640 480 -480 640 -640 494 -640 425 -427 640 -442 640 -640 424 -640 450 -640 286 -426 640 -480 640 -640 480 -640 480 -640 480 -640 480 -427 640 -640 480 -640 484 -500 375 -500 485 -640 427 -640 480 -640 427 -543 640 -640 427 -640 480 -640 480 -640 427 -500 376 -640 425 -640 480 -640 273 -480 640 -640 427 -640 426 -428 640 -640 360 -640 425 -640 480 -640 429 -500 368 -640 482 -640 480 -427 640 -640 427 -640 480 -640 427 -640 480 -640 479 -640 640 -640 428 -500 375 -640 427 -640 428 -500 333 -480 640 -396 297 -640 479 -640 425 -598 640 -640 582 -640 553 -640 480 -480 640 -640 480 -500 332 -640 425 -640 480 -427 640 -640 480 -500 335 -640 427 -640 480 -427 640 -640 480 -600 400 -427 640 -640 480 -640 426 -640 426 -640 427 -480 640 -480 640 -589 640 -640 480 -640 428 -640 424 -640 427 -428 640 -640 480 -640 454 -424 640 -640 427 -640 425 -640 480 -640 427 -640 427 -480 640 -612 612 -333 500 -640 480 -640 480 -572 640 -640 439 -640 427 -427 640 -640 426 -426 640 -640 480 -640 427 -640 480 -457 640 -640 419 -640 418 -480 640 -425 640 -480 640 -480 640 -500 332 -640 424 -640 396 -640 427 -640 640 -640 480 -640 406 -500 375 -640 512 -640 424 -640 480 -640 480 -640 374 -640 354 -640 427 -640 428 -500 375 -640 480 -480 640 -640 480 -640 480 -500 281 -640 539 -640 625 -426 640 -359 640 -640 427 -640 478 -428 640 -500 333 -375 500 -480 640 -640 426 -500 375 -640 458 -640 457 -640 427 -612 612 -500 375 -640 480 -640 478 -640 480 -640 400 -640 480 -375 500 -640 480 -426 640 -640 640 -612 612 -640 480 -640 424 -480 640 -640 480 -640 427 -640 427 -640 359 -640 427 -640 480 -640 480 -640 424 -640 427 -500 375 -612 612 -640 427 -427 640 -335 500 -640 480 -640 480 -640 427 -428 640 -640 427 -375 500 -500 375 -640 393 -640 546 -640 384 -640 480 -500 375 -333 500 -480 640 -640 428 -640 326 -640 360 -533 640 -640 427 -640 427 -640 422 -640 480 -427 640 -640 478 -640 360 -640 480 -600 398 -480 640 -640 480 -426 640 -640 427 -640 411 -480 640 -640 427 -461 640 -640 427 -480 640 -478 640 -640 480 -640 427 -640 428 -438 500 -426 640 -480 640 -480 640 -500 373 -500 375 -640 508 -640 480 -500 434 -640 480 -640 427 -640 480 -640 427 -426 640 -421 640 -640 383 -427 640 -640 480 -640 428 -500 334 -375 500 -640 480 -640 541 -640 424 -640 478 -426 640 -426 640 -480 640 -640 427 -640 480 -640 422 -640 360 -478 640 -640 476 -504 337 -528 400 -612 612 -500 333 -640 480 -640 480 -427 640 -480 640 -640 427 -480 640 -375 500 -612 612 -640 427 -474 640 -375 500 -640 381 -426 640 -500 375 -640 429 -375 500 -480 640 -640 480 -640 480 -640 480 -640 426 -335 500 -640 480 -640 427 -640 480 -612 612 -640 427 -640 512 -612 612 -640 480 -640 426 -640 427 -640 427 -640 480 -640 427 -425 640 -500 400 -640 636 -640 427 -640 427 -480 640 -640 427 -375 500 -640 413 -640 427 -640 427 -640 426 -640 480 -429 640 -640 480 -640 427 -480 640 -640 480 -640 427 -480 640 -640 427 -500 333 -495 640 -500 406 -640 427 -640 480 -640 480 -480 640 -640 303 -375 500 -612 612 -500 334 -640 528 -640 427 -640 480 -435 640 -640 289 -640 480 -640 480 -427 640 -640 496 -640 427 -612 612 -640 398 -448 640 -640 426 -640 426 -480 640 -640 427 -640 457 -640 427 -640 480 -640 427 -500 375 -333 500 -640 480 -640 295 -640 480 -640 480 -640 427 -500 334 -527 640 -640 558 -640 433 -332 500 -640 425 -500 333 -640 427 -480 640 -500 375 -640 429 -640 480 -640 480 -640 427 -640 480 -500 333 -640 426 -612 612 -500 375 -400 300 -640 428 -612 612 -640 480 -640 480 -640 480 -640 450 -640 427 -640 364 -640 433 -640 427 -640 427 -400 500 -640 428 -640 480 -640 480 -640 480 -640 640 -333 500 -426 640 -420 640 -640 480 -640 427 -640 480 -500 375 -640 478 -640 434 -480 640 -329 500 -640 480 -640 424 -640 426 -612 612 -640 480 -640 480 -640 427 -640 480 -427 640 -640 480 -640 480 -500 385 -427 640 -640 478 -640 376 -640 427 -478 640 -625 505 -640 388 -480 640 -640 433 -640 480 -640 426 -640 427 -640 480 -640 480 -500 295 -640 329 -332 291 -500 375 -640 480 -640 458 -640 426 -424 640 -640 427 -500 375 -500 376 -640 480 -640 246 -480 640 -640 427 -640 427 -640 480 -500 336 -359 640 -428 640 -640 426 -512 640 -640 480 -640 480 -640 450 -480 640 -480 640 -500 375 -640 427 -481 640 -375 500 -333 500 -640 428 -467 640 -500 434 -640 480 -480 640 -640 360 -640 414 -480 640 -480 640 -500 375 -640 427 -480 640 -640 426 -640 468 -500 375 -640 425 -640 426 -640 494 -640 427 -640 480 -640 427 -640 425 -478 640 -478 640 -640 488 -640 480 -640 426 -426 640 -640 427 -640 346 -640 480 -640 408 -640 426 -415 640 -640 480 -640 407 -640 480 -640 427 -640 427 -500 375 -640 480 -640 427 -640 419 -480 640 -640 499 -480 640 -425 640 -612 612 -640 639 -640 427 -640 495 -640 480 -480 640 -640 427 -640 480 -640 425 -427 640 -640 506 -640 480 -640 480 -640 448 -640 399 -640 480 -640 301 -640 481 -500 375 -640 514 -640 374 -640 359 -436 640 -640 427 -640 426 -640 441 -500 400 -428 640 -640 427 -640 480 -640 457 -640 428 -640 480 -640 480 -500 375 -640 427 -612 612 -500 333 -428 640 -640 480 -640 426 -640 427 -640 427 -640 426 -480 640 -640 478 -640 480 -640 480 -600 449 -640 480 -640 431 -640 480 -640 427 -480 640 -640 425 -480 640 -640 480 -426 640 -640 480 -640 480 -640 480 -640 418 -640 426 -640 535 -640 438 -426 640 -640 480 -640 498 -427 640 -640 440 -640 533 -426 640 -640 427 -612 612 -320 240 -640 513 -640 428 -640 480 -480 640 -480 640 -640 299 -500 334 -640 438 -500 375 -341 500 -640 372 -426 640 -640 512 -500 390 -640 480 -512 640 -640 640 -640 360 -375 500 -480 640 -480 640 -640 480 -640 480 -375 500 -607 640 -500 375 -640 445 -640 464 -480 640 -500 343 -640 480 -640 427 -640 427 -640 480 -640 480 -640 480 -640 480 -640 360 -427 640 -425 640 -500 333 -640 480 -640 428 -640 480 -524 640 -640 458 -500 375 -500 375 -561 640 -640 483 -640 457 -640 578 -478 640 -640 425 -640 480 -500 370 -500 375 -333 500 -640 429 -640 427 -500 333 -640 426 -500 375 -640 480 -640 480 -640 427 -480 640 -640 482 -640 480 -480 640 -480 640 -640 480 -640 480 -512 384 -640 426 -375 500 -640 417 -480 640 -640 426 -640 480 -375 500 -640 518 -640 427 -640 427 -640 480 -426 640 -640 427 -640 427 -640 496 -640 370 -640 359 -640 432 -640 480 -612 612 -426 640 -640 359 -383 640 -640 426 -640 426 -478 640 -640 480 -500 374 -427 640 -500 283 -612 612 -640 399 -640 480 -640 480 -640 427 -640 428 -500 375 -640 480 -483 640 -640 480 -385 308 -500 375 -480 640 -640 426 -640 426 -612 612 -332 500 -640 480 -640 426 -640 427 -640 426 -640 480 -640 478 -556 640 -500 375 -478 640 -640 428 -640 480 -425 640 -640 478 -640 480 -640 434 -640 427 -500 480 -640 427 -425 640 -640 429 -640 370 -512 640 -640 480 -640 426 -640 427 -640 427 -640 480 -640 480 -429 640 -640 480 -640 448 -640 480 -640 427 -426 640 -640 480 -640 426 -640 480 -640 426 -458 640 -500 375 -500 376 -640 480 -612 612 -480 640 -424 640 -640 480 -640 639 -640 427 -640 480 -500 333 -500 375 -640 503 -315 500 -333 500 -400 272 -640 480 -640 480 -500 333 -640 478 -640 591 -500 294 -640 426 -640 427 -640 425 -640 457 -480 640 -480 640 -640 427 -640 480 -480 640 -640 428 -640 432 -640 343 -428 640 -640 480 -640 429 -640 360 -640 480 -332 500 -640 480 -640 426 -640 640 -640 425 -640 427 -500 333 -500 375 -640 480 -640 480 -427 640 -640 480 -640 427 -480 640 -375 500 -640 426 -640 398 -640 427 -640 427 -640 427 -640 427 -453 640 -427 640 -640 480 -640 524 -640 427 -640 479 -640 480 -375 500 -640 480 -640 458 -640 522 -640 427 -500 375 -500 333 -500 375 -640 426 -640 480 -640 480 -640 426 -436 640 -500 375 -375 500 -500 375 -640 480 -640 480 -640 480 -500 321 -500 375 -640 426 -640 480 -640 427 -640 480 -426 640 -640 360 -413 640 -640 382 -640 425 -640 480 -640 480 -427 640 -640 383 -640 480 -478 640 -640 480 -427 640 -428 640 -500 333 -640 480 -612 612 -339 500 -640 427 -640 376 -640 360 -640 428 -480 640 -640 426 -640 480 -500 500 -269 480 -629 640 -640 480 -640 480 -612 612 -640 491 -640 480 -640 601 -640 480 -426 640 -640 480 -640 397 -640 426 -424 640 -480 640 -640 526 -640 386 -480 640 -375 500 -640 469 -640 601 -615 310 -640 480 -640 448 -547 640 -480 640 -480 640 -518 640 -640 427 -427 640 -433 640 -640 439 -640 480 -480 640 -612 612 -640 281 -640 480 -640 427 -640 480 -640 427 -640 428 -437 640 -640 428 -640 480 -640 480 -640 424 -500 336 -425 640 -500 308 -640 360 -640 424 -640 425 -446 640 -640 252 -640 483 -640 480 -640 627 -640 428 -500 480 -640 453 -612 612 -640 428 -375 500 -640 480 -640 480 -640 417 -640 378 -640 425 -640 480 -480 640 -640 481 -640 504 -595 640 -640 480 -640 597 -500 375 -640 427 -479 640 -640 512 -640 426 -500 416 -500 375 -640 400 -500 375 -472 640 -500 375 -500 375 -640 480 -480 640 -640 561 -427 640 -640 426 -640 480 -640 427 -480 640 -640 428 -640 480 -640 426 -640 562 -640 428 -500 334 -640 426 -640 427 -640 480 -640 425 -640 491 -500 375 -640 426 -396 640 -480 640 -640 426 -480 640 -640 480 -640 480 -427 640 -640 427 -500 337 -427 640 -457 640 -375 500 -612 612 -480 640 -640 480 -500 375 -612 612 -640 480 -640 427 -640 423 -612 612 -480 640 -378 500 -480 640 -500 238 -640 447 -640 480 -640 427 -640 480 -480 640 -640 480 -640 480 -640 368 -640 424 -640 427 -640 359 -500 375 -640 480 -640 362 -500 398 -640 514 -640 480 -640 480 -500 375 -480 640 -480 640 -478 640 -640 427 -640 427 -480 360 -380 500 -424 640 -640 426 -640 480 -640 320 -640 480 -640 428 -640 426 -335 500 -640 427 -375 500 -640 425 -640 478 -640 427 -426 640 -640 480 -427 640 -543 640 -483 640 -640 480 -640 480 -480 640 -500 375 -640 428 -424 640 -640 480 -427 640 -640 426 -640 434 -427 640 -500 334 -480 640 -640 480 -480 640 -426 640 -640 480 -640 425 -640 427 -640 480 -640 480 -500 272 -640 480 -640 480 -640 480 -428 640 -500 375 -424 640 -375 500 -640 360 -612 612 -640 427 -640 432 -425 640 -640 359 -426 640 -640 427 -640 430 -480 640 -640 427 -640 426 -339 500 -640 479 -640 427 -500 326 -500 333 -464 640 -463 640 -640 426 -640 480 -500 375 -640 427 -640 427 -640 427 -480 640 -640 423 -640 483 -640 479 -640 320 -640 608 -640 427 -640 425 -378 500 -426 640 -640 480 -640 480 -432 640 -640 480 -478 640 -640 415 -640 530 -640 372 -640 424 -640 360 -640 480 -480 640 -640 426 -395 640 -640 359 -640 427 -500 333 -640 480 -480 640 -640 360 -640 480 -500 334 -425 640 -640 480 -640 427 -640 480 -640 425 -500 374 -480 640 -640 429 -640 480 -640 426 -357 640 -496 640 -640 426 -640 425 -640 425 -640 480 -427 640 -640 427 -640 438 -480 640 -640 377 -640 480 -640 428 -640 480 -612 612 -640 527 -640 427 -375 500 -640 424 -640 480 -640 457 -500 334 -640 425 -525 640 -640 428 -333 500 -480 640 -640 419 -480 640 -640 426 -640 480 -640 426 -640 468 -640 480 -480 640 -640 425 -512 640 -640 427 -427 640 -500 375 -515 640 -480 640 -428 640 -331 500 -500 332 -480 640 -640 480 -640 427 -640 427 -640 480 -500 335 -640 480 -640 425 -640 360 -640 480 -625 640 -480 640 -480 640 -478 640 -640 426 -428 640 -640 480 -640 480 -640 396 -500 376 -506 640 -640 514 -500 333 -640 480 -480 640 -612 612 -480 640 -640 480 -425 640 -548 640 -640 427 -640 480 -640 480 -640 427 -640 429 -640 426 -640 427 -640 427 -640 480 -480 640 -640 427 -640 512 -640 480 -640 480 -324 328 -640 361 -640 480 -640 427 -640 428 -640 426 -640 480 -640 359 -640 480 -500 334 -480 640 -640 427 -640 480 -640 480 -640 427 -640 400 -640 561 -640 480 -640 360 -640 425 -640 480 -428 640 -480 640 -460 640 -480 640 -640 428 -334 500 -425 640 -640 428 -640 529 -640 427 -640 606 -305 229 -640 480 -640 361 -333 500 -640 480 -640 490 -640 424 -640 433 -640 425 -427 640 -640 428 -640 424 -558 558 -640 427 -640 480 -640 426 -640 480 -640 563 -375 500 -640 480 -335 500 -640 360 -640 424 -375 500 -573 640 -640 480 -640 480 -640 425 -425 640 -640 360 -640 480 -640 425 -640 480 -480 640 -640 360 -640 480 -640 426 -640 480 -640 427 -640 425 -640 424 -640 480 -426 640 -640 427 -375 500 -500 360 -500 375 -640 427 -500 257 -640 424 -356 500 -640 494 -426 640 -640 480 -412 640 -640 480 -433 640 -640 480 -427 640 -375 500 -500 369 -612 612 -640 480 -427 640 -396 640 -612 612 -640 480 -500 332 -480 640 -640 480 -640 428 -640 426 -640 397 -640 534 -500 375 -640 427 -640 480 -640 480 -480 640 -640 427 -427 640 -640 480 -640 480 -640 480 -640 359 -640 337 -480 640 -308 500 -375 500 -640 578 -640 480 -640 427 -360 640 -480 640 -640 480 -612 612 -640 443 -612 612 -640 480 -640 427 -500 500 -640 391 -478 640 -639 640 -332 500 -332 500 -428 640 -425 640 -640 480 -480 640 -640 480 -500 375 -640 480 -427 640 -640 480 -640 427 -640 428 -640 480 -640 381 -640 427 -612 612 -640 426 -640 427 -640 480 -640 427 -612 612 -248 500 -500 208 -640 544 -640 427 -640 427 -500 358 -640 428 -640 480 -640 427 -640 480 -640 360 -640 425 -500 375 -480 640 -640 427 -640 376 -640 480 -640 424 -640 360 -500 375 -640 427 -640 471 -640 360 -640 475 -640 428 -415 640 -640 334 -640 426 -640 427 -300 400 -640 480 -640 480 -612 612 -640 426 -640 425 -480 640 -640 452 -500 375 -640 476 -600 455 -640 480 -640 640 -640 480 -500 335 -479 640 -640 427 -500 375 -640 426 -428 640 -480 640 -640 480 -640 480 -640 427 -640 424 -640 428 -623 640 -640 425 -640 438 -640 480 -640 427 -640 425 -640 480 -640 640 -640 480 -640 480 -640 329 -591 640 -640 480 -427 640 -612 612 -399 600 -640 364 -640 489 -640 480 -375 500 -640 426 -426 640 -429 640 -427 640 -640 427 -640 427 -640 614 -640 427 -640 312 -640 427 -640 427 -504 640 -427 640 -427 640 -640 589 -426 640 -640 606 -640 427 -427 640 -640 640 -640 480 -640 427 -500 333 -464 640 -640 426 -427 640 -640 480 -640 480 -612 612 -640 480 -500 366 -640 480 -640 425 -640 640 -640 484 -500 375 -640 359 -351 500 -640 480 -640 320 -640 427 -640 473 -640 480 -640 427 -640 411 -500 331 -640 480 -480 640 -640 480 -612 612 -640 427 -640 470 -500 375 -512 640 -640 640 -640 480 -640 480 -640 427 -640 480 -500 375 -640 480 -480 640 -640 425 -640 425 -640 427 -640 464 -500 500 -640 427 -640 480 -640 423 -500 333 -640 311 -640 449 -640 427 -472 500 -640 640 -433 640 -640 383 -640 480 -640 427 -640 425 -427 640 -640 480 -640 480 -640 480 -640 480 -480 640 -640 504 -640 425 -640 478 -640 429 -640 426 -640 480 -426 640 -425 640 -500 375 -640 427 -500 375 -478 640 -500 375 -640 480 -480 640 -640 480 -640 429 -612 612 -428 640 -640 154 -640 427 -375 500 -640 480 -640 480 -640 480 -640 480 -640 427 -640 360 -640 395 -640 480 -640 640 -480 640 -640 480 -640 428 -640 480 -480 640 -640 480 -427 640 -500 478 -640 427 -612 612 -428 640 -640 480 -640 480 -640 456 -640 359 -640 450 -263 640 -640 427 -640 409 -640 480 -640 394 -640 480 -640 524 -640 511 -425 640 -640 427 -640 427 -640 426 -640 425 -427 640 -600 625 -640 427 -640 480 -600 400 -640 428 -640 426 -640 359 -500 335 -426 640 -500 336 -375 500 -640 480 -455 640 -321 500 -500 375 -353 640 -426 640 -450 216 -612 612 -454 640 -480 640 -427 640 -500 375 -500 375 -482 640 -640 480 -640 480 -612 612 -428 640 -640 480 -640 426 -640 480 -428 640 -640 480 -607 640 -640 428 -428 640 -640 480 -640 293 -640 433 -426 640 -640 428 -640 480 -640 411 -640 381 -480 640 -335 500 -450 302 -640 425 -640 480 -480 640 -457 640 -427 640 -480 640 -480 640 -500 375 -640 478 -640 427 -640 480 -640 427 -640 424 -640 360 -640 427 -640 480 -640 419 -640 480 -640 480 -640 494 -640 426 -640 423 -444 640 -640 480 -640 480 -640 480 -640 427 -500 375 -640 459 -640 428 -640 426 -640 481 -480 640 -640 425 -375 500 -515 640 -640 480 -640 480 -427 640 -640 413 -640 480 -640 480 -500 333 -427 640 -640 427 -640 428 -640 465 -480 640 -640 480 -640 428 -640 428 -640 214 -359 640 -640 478 -640 480 -640 320 -336 248 -500 400 -640 427 -640 529 -480 640 -640 427 -480 640 -640 427 -500 334 -481 640 -500 334 -480 640 -640 458 -427 640 -640 424 -640 426 -500 333 -640 523 -640 428 -640 487 -612 612 -500 375 -640 480 -640 517 -333 500 -348 500 -640 448 -640 428 -500 375 -500 375 -500 375 -640 426 -640 480 -640 480 -640 427 -640 414 -640 441 -640 480 -640 530 -640 640 -483 640 -640 480 -640 480 -427 640 -640 424 -640 428 -640 429 -375 500 -640 427 -640 480 -640 480 -640 512 -640 427 -479 640 -640 428 -640 408 -612 612 -640 480 -640 480 -375 500 -640 425 -640 427 -640 480 -480 640 -640 480 -480 640 -427 640 -640 480 -640 432 -640 427 -480 640 -640 480 -480 640 -640 480 -640 480 -640 480 -640 480 -640 480 -640 427 -449 640 -512 640 -427 640 -640 427 -500 375 -640 427 -640 519 -448 640 -640 427 -512 640 -640 391 -640 480 -640 480 -640 428 -424 640 -428 640 -640 427 -640 427 -640 425 -640 428 -447 640 -500 333 -500 334 -480 640 -640 446 -478 640 -640 480 -640 480 -640 425 -640 454 -640 426 -360 640 -500 334 -500 375 -640 427 -640 433 -480 640 -480 640 -640 426 -640 427 -640 359 -640 480 -640 480 -640 640 -500 375 -640 640 -480 640 -640 474 -640 480 -640 480 -640 427 -640 428 -500 375 -480 640 -640 480 -640 398 -427 640 -480 640 -500 375 -514 640 -500 375 -640 480 -640 427 -640 480 -500 375 -640 480 -640 480 -640 427 -480 640 -640 480 -640 425 -640 427 -640 480 -640 480 -640 424 -640 427 -640 438 -640 480 -640 427 -640 428 -424 640 -640 531 -480 640 -640 427 -500 333 -640 425 -640 425 -428 640 -480 640 -640 429 -640 480 -640 480 -375 500 -428 640 -500 375 -640 424 -640 480 -640 428 -425 640 -480 640 -640 425 -426 640 -640 480 -635 640 -500 332 -640 480 -640 480 -640 566 -640 480 -640 419 -426 640 -500 375 -425 640 -640 428 -334 500 -640 546 -519 640 -640 480 -500 375 -640 427 -612 612 -640 479 -614 640 -480 640 -480 640 -640 427 -640 480 -500 375 -640 480 -640 360 -640 480 -213 320 -500 406 -500 445 -480 640 -640 468 -640 427 -427 640 -640 427 -640 480 -500 486 -480 360 -640 428 -640 480 -480 640 -403 640 -640 480 -640 316 -425 640 -480 640 -640 429 -640 426 -640 427 -640 426 -500 375 -427 640 -612 612 -640 480 -640 480 -640 427 -640 418 -428 640 -500 324 -523 640 -640 426 -640 427 -640 427 -480 640 -640 427 -640 426 -500 500 -640 480 -640 427 -640 437 -480 640 -359 640 -640 428 -640 480 -640 424 -500 335 -500 375 -640 424 -427 640 -640 480 -405 640 -640 640 -427 640 -640 480 -333 500 -640 444 -640 426 -640 480 -500 375 -640 344 -640 394 -500 393 -375 500 -500 281 -477 558 -640 480 -640 428 -640 360 -426 640 -640 428 -640 480 -427 640 -640 480 -640 508 -640 427 -640 480 -640 480 -640 480 -640 427 -612 612 -640 428 -332 500 -640 427 -640 480 -428 640 -612 612 -640 425 -640 482 -640 419 -500 375 -640 486 -640 428 -640 428 -640 480 -500 333 -640 478 -360 640 -640 480 -640 428 -500 396 -640 424 -375 500 -640 480 -640 480 -612 612 -640 480 -640 428 -640 427 -640 447 -640 480 -640 640 -500 375 -640 480 -612 612 -640 427 -359 640 -640 424 -500 375 -640 480 -640 427 -640 479 -640 480 -640 428 -368 500 -640 640 -640 451 -544 640 -640 480 -640 439 -640 426 -640 425 -583 640 -640 429 -640 427 -640 480 -640 512 -640 480 -640 480 -640 427 -457 640 -640 429 -500 334 -640 480 -428 640 -428 640 -640 480 -480 640 -500 375 -427 640 -640 427 -406 640 -478 640 -640 480 -640 383 -612 612 -500 333 -640 427 -500 371 -612 612 -640 427 -375 500 -612 612 -468 640 -640 480 -426 640 -640 478 -640 480 -640 478 -640 480 -640 480 -640 411 -500 375 -640 427 -480 640 -640 449 -640 480 -640 480 -488 640 -640 480 -640 427 -480 640 -640 480 -480 640 -424 640 -577 640 -640 382 -480 640 -640 360 -640 480 -333 500 -333 500 -640 370 -640 480 -640 416 -640 480 -350 263 -640 480 -640 480 -640 427 -500 375 -640 516 -640 424 -426 640 -640 363 -480 640 -640 427 -640 426 -640 480 -640 425 -640 427 -640 546 -640 427 -640 427 -640 426 -375 500 -478 640 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 427 -500 356 -640 428 -640 428 -640 480 -640 427 -287 640 -640 480 -640 427 -640 427 -640 427 -640 427 -640 480 -375 500 -480 640 -480 640 -500 333 -500 240 -640 427 -640 428 -640 480 -500 350 -640 427 -640 480 -427 640 -361 500 -640 480 -426 640 -640 480 -375 500 -640 480 -640 480 -320 240 -640 480 -640 393 -480 640 -640 447 -500 454 -640 480 -640 428 -487 640 -640 480 -375 500 -640 480 -640 429 -640 480 -480 640 -176 144 -480 640 -640 480 -640 496 -474 640 -427 640 -612 612 -427 640 -640 480 -640 396 -640 480 -393 600 -612 612 -640 426 -640 480 -640 428 -640 480 -640 293 -640 287 -640 426 -500 375 -640 427 -480 640 -640 428 -640 427 -480 640 -640 480 -640 427 -333 500 -640 427 -640 480 -640 480 -500 336 -640 480 -640 427 -428 640 -480 640 -640 478 -640 512 -640 480 -640 480 -427 640 -640 480 -640 464 -640 426 -333 500 -500 378 -640 406 -640 427 -640 426 -426 640 -457 640 -640 478 -640 480 -640 480 -428 640 -500 375 -478 640 -500 333 -640 640 -640 426 -640 427 -640 457 -640 480 -640 398 -500 345 -640 480 -640 617 -640 361 -640 427 -640 426 -480 640 -640 640 -640 400 -640 480 -640 480 -640 480 -640 416 -480 640 -316 480 -640 429 -640 480 -640 425 -640 403 -640 425 -640 457 -640 480 -427 640 -333 500 -640 424 -640 427 -640 427 -460 640 -585 640 -640 480 -427 640 -640 479 -640 480 -500 375 -425 640 -640 480 -640 480 -640 480 -500 358 -640 480 -640 427 -640 480 -480 640 -500 375 -640 640 -427 640 -500 375 -640 428 -640 480 -640 344 -500 375 -640 480 -640 425 -640 426 -640 359 -640 469 -640 426 -480 640 -640 426 -500 375 -640 426 -480 640 -427 640 -500 375 -480 640 -640 480 -426 640 -426 640 -480 640 -426 640 -640 640 -508 640 -640 427 -427 640 -428 640 -640 480 -640 640 -480 640 -500 375 -640 480 -640 427 -640 400 -640 427 -640 480 -334 500 -409 640 -500 484 -640 424 -640 360 -612 612 -640 427 -500 327 -640 640 -640 360 -640 424 -640 428 -640 622 -640 480 -500 333 -427 640 -320 240 -640 480 -640 481 -427 640 -640 480 -640 424 -640 480 -640 480 -375 500 -640 425 -640 598 -640 425 -640 427 -612 612 -640 480 -640 215 -375 500 -537 640 -612 612 -640 480 -640 428 -640 427 -640 480 -550 640 -333 500 -640 371 -640 427 -612 612 -640 480 -480 640 -640 426 -640 427 -640 480 -415 640 -640 480 -640 480 -640 480 -640 426 -488 640 -640 428 -640 426 -640 427 -640 426 -480 640 -500 333 -512 640 -480 640 -496 640 -640 478 -618 640 -500 375 -640 480 -640 480 -589 640 -640 480 -640 426 -640 427 -640 512 -640 428 -640 480 -427 640 -640 421 -640 426 -640 611 -640 456 -640 429 -480 640 -640 480 -640 480 -375 500 -427 640 -640 480 -480 640 -640 427 -640 427 -500 375 -500 375 -500 375 -500 335 -640 309 -640 419 -640 459 -640 480 -640 518 -640 480 -640 480 -640 426 -640 480 -480 640 -427 640 -640 428 -640 480 -640 427 -640 489 -612 612 -413 640 -640 427 -640 602 -640 428 -480 640 -640 480 -500 375 -640 480 -640 481 -640 480 -640 427 -640 480 -640 480 -640 480 -640 361 -640 427 -480 640 -640 480 -640 428 -424 640 -588 640 -480 640 -500 333 -439 640 -640 427 -640 505 -640 480 -511 640 -427 640 -480 640 -480 640 -640 427 -612 612 -640 427 -432 640 -500 333 -640 480 -640 427 -640 480 -640 320 -640 427 -640 427 -640 426 -640 480 -500 375 -640 427 -480 640 -640 480 -640 425 -383 640 -612 612 -640 480 -427 640 -640 426 -375 500 -480 640 -612 612 -486 640 -640 462 -640 428 -640 426 -640 427 -427 640 -640 480 -612 612 -512 640 -640 428 -640 480 -640 478 -480 640 -640 407 -640 480 -640 480 -480 640 -428 640 -640 426 -640 428 -640 427 -640 480 -640 427 -640 504 -480 640 -640 427 -500 333 -640 427 -640 425 -640 481 -426 640 -640 427 -640 427 -640 425 -480 640 -480 640 -424 500 -640 427 -500 337 -640 480 -500 333 -427 640 -640 418 -640 354 -640 425 -640 427 -640 503 -640 427 -640 424 -500 333 -640 483 -640 426 -640 426 -640 480 -640 480 -640 426 -500 375 -640 427 -640 480 -480 640 -640 428 -427 640 -640 480 -426 640 -640 480 -640 480 -640 480 -500 375 -640 480 -640 480 -640 428 -640 428 -640 480 -640 480 -640 316 -640 513 -640 424 -480 640 -640 480 -640 428 -638 640 -640 425 -640 480 -640 480 -640 480 -640 427 -640 480 -640 478 -640 480 -640 427 -640 604 -640 361 -640 427 -480 640 -500 375 -640 480 -480 640 -640 427 -480 640 -640 429 -640 427 -640 420 -640 428 -640 427 -640 425 -640 426 -439 640 -640 480 -640 480 -640 427 -640 428 -640 427 -640 346 -640 427 -640 438 -640 427 -640 428 -500 375 -640 480 -640 431 -640 426 -640 480 -640 480 -333 500 -480 640 -640 480 -640 512 -640 340 -354 375 -640 424 -640 480 -640 480 -640 480 -640 425 -640 480 -427 640 -480 640 -500 375 -425 640 -640 480 -374 500 -500 476 -640 640 -640 427 -425 640 -400 302 -640 480 -463 500 -426 640 -640 480 -426 640 -640 427 -640 360 -640 480 -426 640 -640 480 -640 480 -640 427 -500 392 -640 378 -640 480 -640 343 -640 427 -640 426 -640 427 -640 426 -400 500 -500 333 -640 399 -640 512 -640 366 -612 612 -640 426 -640 480 -640 425 -598 640 -640 427 -480 640 -500 375 -508 640 -424 640 -640 427 -640 480 -480 640 -379 500 -640 318 -640 428 -427 640 -640 361 -640 427 -612 612 -640 427 -427 640 -480 640 -427 640 -640 427 -640 493 -640 425 -640 426 -612 612 -640 480 -640 427 -640 531 -500 333 -480 640 -640 425 -500 375 -640 399 -640 489 -640 426 -500 375 -640 427 -640 426 -640 480 -512 640 -427 640 -640 480 -406 640 -480 640 -612 612 -500 375 -640 480 -640 428 -480 640 -640 383 -640 480 -640 454 -640 480 -640 427 -425 640 -375 500 -640 480 -640 426 -640 480 -640 425 -640 427 -424 640 -469 640 -640 480 -640 480 -640 426 -375 500 -640 425 -640 457 -500 334 -640 426 -480 640 -640 480 -640 427 -640 480 -640 629 -480 640 -478 640 -480 640 -640 480 -640 426 -424 640 -640 427 -640 480 -640 480 -640 201 -640 480 -640 420 -640 480 -500 375 -640 478 -640 433 -482 640 -500 375 -640 480 -500 375 -375 500 -640 500 -640 481 -640 432 -640 425 -640 480 -640 480 -640 425 -640 400 -640 480 -640 414 -640 443 -640 425 -500 495 -640 480 -500 375 -640 480 -375 500 -640 427 -415 500 -640 427 -640 427 -500 333 -640 425 -612 612 -640 426 -426 640 -640 424 -500 290 -640 428 -640 357 -480 640 -480 640 -478 640 -640 427 -640 480 -500 333 -640 427 -640 426 -640 428 -640 569 -640 480 -457 640 -612 612 -640 428 -359 640 -640 428 -500 375 -453 640 -640 480 -640 427 -480 640 -640 427 -500 334 -333 500 -640 517 -640 425 -461 640 -490 640 -640 480 -500 375 -640 480 -480 640 -640 480 -480 640 -640 486 -640 480 -500 334 -640 480 -612 612 -640 427 -640 428 -640 310 -640 427 -612 612 -425 640 -427 640 -300 500 -640 438 -332 500 -640 427 -500 316 -427 640 -480 640 -640 480 -500 352 -640 428 -640 412 -640 480 -427 640 -413 640 -500 375 -640 226 -640 496 -640 612 -640 433 -640 464 -640 426 -640 480 -375 500 -502 640 -640 480 -500 375 -640 425 -640 480 -480 640 -640 480 -640 427 -640 480 -480 640 -480 640 -427 640 -640 393 -500 332 -640 360 -332 500 -640 427 -500 332 -640 428 -640 426 -500 375 -478 640 -640 427 -640 640 -640 427 -485 640 -478 640 -612 612 -640 425 -640 457 -545 640 -480 640 -500 375 -640 480 -512 640 -640 427 -333 500 -640 427 -640 480 -640 413 -640 480 -512 640 -640 433 -640 594 -426 640 -640 424 -480 640 -640 544 -640 427 -640 600 -640 480 -480 640 -640 349 -480 640 -334 500 -500 365 -333 500 -640 389 -640 480 -640 480 -640 421 -640 480 -375 500 -480 640 -478 640 -640 480 -640 480 -500 375 -640 425 -640 430 -640 360 -479 640 -480 640 -640 426 -640 480 -425 640 -640 480 -640 480 -640 480 -640 480 -500 335 -640 480 -480 640 -640 363 -486 640 -480 640 -640 427 -500 281 -640 416 -640 427 -480 640 -600 399 -500 350 -454 640 -640 427 -640 480 -640 480 -427 640 -640 480 -640 427 -640 461 -640 513 -640 427 -333 500 -640 427 -640 512 -640 480 -640 480 -612 612 -640 480 -500 333 -362 500 -640 427 -500 375 -500 334 -640 427 -640 425 -480 640 -640 425 -427 640 -640 427 -640 480 -448 640 -640 426 -640 427 -640 427 -480 640 -640 401 -640 427 -640 480 -640 480 -640 425 -640 435 -640 425 -640 427 -375 500 -640 480 -612 612 -640 427 -640 427 -640 480 -427 640 -640 480 -640 480 -427 640 -640 480 -640 427 -640 341 -581 640 -640 480 -480 640 -640 360 -640 409 -332 500 -640 429 -640 427 -433 640 -375 500 -640 480 -640 480 -640 512 -640 480 -640 427 -640 480 -640 427 -640 480 -640 426 -480 640 -640 480 -424 640 -640 428 -481 640 -640 426 -480 640 -640 480 -640 427 -500 375 -640 426 -640 480 -480 640 -640 480 -429 640 -640 480 -440 640 -480 640 -400 300 -640 426 -614 640 -500 455 -640 480 -640 427 -640 427 -640 425 -640 480 -640 480 -640 480 -480 640 -500 426 -500 375 -640 427 -500 335 -500 375 -500 375 -640 536 -640 640 -480 640 -640 426 -640 426 -429 640 -640 426 -640 427 -640 427 -480 640 -640 480 -640 499 -640 427 -483 640 -640 427 -640 477 -640 480 -640 512 -640 234 -640 427 -640 480 -640 480 -640 427 -640 424 -640 424 -480 640 -473 303 -500 375 -332 500 -640 427 -640 415 -478 640 -640 480 -640 425 -640 427 -640 427 -640 480 -500 333 -640 478 -640 422 -640 430 -640 480 -640 480 -500 375 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -500 375 -360 270 -393 640 -640 428 -478 640 -640 480 -557 640 -640 427 -333 500 -427 640 -317 500 -640 425 -480 640 -640 478 -640 427 -640 427 -640 374 -480 640 -640 480 -640 427 -375 500 -480 640 -427 640 -640 384 -640 480 -640 480 -394 640 -640 480 -640 480 -640 437 -640 427 -430 640 -640 160 -480 640 -427 640 -640 478 -640 354 -640 425 -500 333 -640 427 -427 640 -640 480 -500 375 -500 375 -640 428 -640 427 -640 478 -640 427 -480 640 -640 425 -640 480 -640 424 -640 457 -640 480 -500 333 -500 378 -375 500 -640 448 -500 333 -640 480 -640 423 -640 428 -640 494 -640 480 -480 640 -640 391 -640 479 -480 640 -640 510 -640 427 -425 640 -640 480 -427 640 -480 640 -480 640 -640 381 -640 480 -500 333 -518 640 -478 640 -640 640 -640 426 -640 414 -640 424 -372 500 -480 640 -480 640 -480 640 -640 480 -640 457 -427 640 -640 428 -640 360 -500 500 -612 499 -640 427 -480 640 -640 427 -426 640 -640 425 -640 411 -640 480 -640 480 -640 480 -640 428 -467 640 -640 480 -640 510 -640 427 -640 427 -640 427 -640 480 -640 428 -640 480 -640 426 -500 375 -333 500 -375 500 -640 480 -500 458 -640 640 -480 640 -640 427 -640 359 -640 480 -591 640 -464 640 -640 427 -384 500 -480 640 -480 640 -640 427 -640 427 -640 428 -640 428 -500 375 -378 500 -500 333 -640 480 -640 480 -640 360 -500 331 -640 480 -500 375 -501 640 -640 427 -426 640 -640 427 -640 480 -427 640 -640 404 -640 403 -427 640 -640 480 -640 427 -640 428 -640 480 -640 427 -427 640 -518 640 -463 640 -417 640 -640 640 -394 640 -640 310 -500 375 -426 640 -640 480 -426 640 -640 427 -640 178 -480 640 -640 480 -428 640 -640 480 -640 480 -640 428 -426 640 -640 480 -427 640 -612 612 -640 480 -427 640 -640 480 -640 480 -640 480 -480 640 -640 425 -427 640 -640 360 -640 427 -640 427 -640 427 -640 426 -640 427 -640 425 -640 427 -500 375 -480 640 -486 500 -600 600 -640 480 -640 425 -640 480 -640 436 -640 425 -480 640 -640 480 -640 360 -640 424 -640 426 -640 427 -500 375 -612 612 -640 425 -425 640 -496 640 -640 474 -500 375 -640 480 -640 396 -640 459 -480 640 -640 425 -427 640 -640 480 -480 640 -480 640 -640 427 -640 360 -640 425 -427 640 -500 334 -426 640 -429 640 -533 640 -640 428 -561 640 -334 500 -640 428 -480 320 -640 432 -640 424 -500 375 -640 427 -640 480 -426 640 -424 640 -640 446 -640 480 -640 426 -640 427 -500 333 -640 480 -640 427 -500 375 -480 640 -640 427 -375 500 -480 640 -640 426 -640 428 -640 427 -612 612 -640 428 -427 640 -640 480 -640 480 -448 640 -426 640 -640 425 -640 427 -640 464 -640 640 -425 640 -640 427 -384 500 -480 640 -480 640 -640 427 -500 358 -640 425 -640 480 -425 640 -417 640 -612 612 -640 480 -640 480 -640 480 -480 640 -640 359 -640 485 -640 640 -640 480 -300 225 -640 640 -640 480 -500 332 -640 423 -480 640 -640 480 -640 480 -640 424 -640 427 -640 425 -640 480 -640 427 -640 427 -640 457 -640 480 -427 640 -640 480 -640 419 -427 640 -640 427 -640 480 -640 480 -640 427 -500 360 -480 640 -640 480 -640 480 -640 480 -480 640 -640 427 -640 427 -640 428 -640 427 -640 427 -640 427 -640 330 -640 424 -640 386 -640 427 -640 480 -640 480 -640 480 -480 640 -375 500 -640 398 -640 426 -640 436 -640 426 -640 427 -640 480 -500 375 -640 426 -427 640 -640 426 -640 426 -640 359 -640 480 -640 427 -640 480 -640 428 -640 303 -519 631 -640 480 -640 480 -640 513 -640 360 -612 612 -480 640 -500 371 -640 480 -640 426 -640 427 -640 360 -640 512 -640 422 -640 427 -640 480 -640 480 -640 533 -640 426 -500 347 -397 640 -640 425 -640 480 -640 427 -640 640 -640 480 -640 534 -640 428 -640 480 -500 354 -640 427 -640 480 -640 425 -640 427 -480 640 -333 500 -639 640 -640 413 -640 508 -500 333 -640 427 -640 427 -480 640 -640 480 -640 429 -500 375 -480 640 -623 640 -452 640 -640 431 -480 640 -640 424 -640 427 -603 640 -500 375 -640 428 -640 376 -640 427 -640 427 -640 480 -640 426 -640 427 -480 640 -640 427 -640 426 -640 425 -640 427 -640 426 -640 451 -640 427 -480 640 -428 640 -636 477 -427 640 -640 389 -450 640 -640 480 -640 480 -426 640 -640 480 -640 427 -640 424 -480 640 -640 427 -489 640 -640 525 -640 425 -500 376 -640 427 -640 480 -640 446 -640 480 -640 427 -640 480 -500 375 -640 429 -480 640 -622 640 -640 428 -478 640 -640 426 -640 480 -640 360 -375 500 -500 375 -480 640 -640 480 -640 466 -500 375 -640 329 -541 640 -426 640 -640 640 -640 397 -640 425 -500 336 -640 359 -640 430 -640 427 -640 427 -480 640 -640 360 -640 480 -640 427 -591 640 -480 640 -640 428 -640 480 -428 640 -640 480 -375 500 -640 480 -640 480 -484 500 -612 612 -427 640 -640 383 -500 333 -640 427 -407 640 -640 433 -640 480 -500 375 -500 429 -425 640 -640 425 -612 612 -640 480 -500 375 -640 480 -640 480 -426 640 -500 348 -640 480 -488 500 -640 427 -500 375 -478 640 -640 480 -500 312 -333 500 -640 429 -640 480 -640 429 -640 427 -640 518 -640 474 -640 480 -640 480 -480 360 -640 427 -640 513 -622 640 -640 480 -398 640 -640 427 -640 426 -332 500 -469 640 -640 480 -640 429 -640 427 -640 375 -640 424 -426 640 -640 427 -640 480 -450 338 -480 640 -640 427 -640 640 -640 427 -640 427 -486 365 -427 640 -640 427 -640 480 -500 375 -640 428 -640 427 -640 425 -612 612 -640 423 -640 465 -640 511 -640 427 -640 480 -375 500 -640 424 -640 480 -640 425 -640 359 -500 335 -480 640 -640 480 -640 480 -640 427 -478 640 -640 480 -500 333 -640 640 -640 423 -640 427 -500 375 -640 426 -640 480 -411 640 -640 428 -640 427 -612 612 -640 480 -640 426 -424 640 -640 477 -640 423 -640 480 -640 416 -640 429 -640 481 -480 640 -640 449 -640 480 -640 427 -612 612 -500 333 -640 480 -640 472 -640 640 -640 480 -480 640 -640 426 -640 428 -480 640 -640 426 -480 640 -427 640 -640 480 -640 480 -375 500 -640 480 -360 640 -640 480 -640 486 -640 480 -640 480 -640 480 -425 640 -520 640 -640 426 -640 480 -640 480 -500 281 -500 375 -640 427 -427 640 -535 640 -612 612 -480 640 -360 640 -640 480 -640 480 -395 640 -579 640 -377 500 -640 480 -640 480 -640 427 -640 480 -500 375 -482 640 -427 640 -640 480 -480 640 -480 640 -500 375 -640 480 -400 266 -500 375 -640 480 -640 639 -640 480 -375 500 -480 640 -640 480 -426 640 -480 640 -427 640 -640 427 -426 640 -640 480 -640 289 -640 480 -640 427 -500 434 -640 637 -640 428 -640 480 -640 478 -640 383 -640 427 -440 500 -359 640 -640 480 -640 427 -425 640 -376 500 -427 640 -640 640 -640 356 -640 480 -236 236 -375 500 -640 427 -480 640 -640 480 -427 640 -415 500 -640 427 -640 427 -640 427 -640 466 -500 375 -640 480 -375 500 -480 640 -640 480 -480 640 -640 339 -640 251 -640 426 -427 640 -500 333 -640 459 -640 427 -640 419 -375 500 -426 640 -640 480 -640 480 -640 480 -421 640 -640 427 -333 500 -640 425 -640 425 -640 400 -640 426 -640 480 -500 332 -480 640 -640 480 -640 480 -640 523 -640 480 -640 480 -640 444 -540 640 -472 640 -500 333 -640 531 -640 425 -640 480 -640 478 -500 375 -640 480 -640 440 -640 480 -640 415 -640 455 -640 428 -359 640 -429 640 -640 480 -480 640 -640 480 -640 427 -427 640 -640 480 -512 640 -428 640 -480 640 -640 555 -640 429 -640 427 -359 640 -640 427 -640 427 -640 442 -500 375 -640 434 -428 640 -500 333 -640 426 -640 427 -640 427 -640 480 -640 424 -640 359 -640 590 -480 640 -640 360 -427 640 -512 640 -640 480 -511 640 -640 428 -640 447 -640 480 -640 428 -640 480 -640 480 -422 640 -640 480 -480 640 -500 375 -375 500 -640 425 -640 439 -640 480 -500 375 -375 500 -640 426 -500 338 -640 427 -640 480 -500 400 -640 360 -640 426 -640 640 -612 612 -640 360 -640 360 -500 375 -612 612 -640 427 -640 334 -640 428 -640 427 -640 425 -427 640 -428 640 -585 640 -500 344 -640 360 -426 640 -462 640 -640 427 -480 640 -513 640 -500 375 -500 377 -624 416 -427 640 -508 640 -640 480 -640 639 -640 428 -640 428 -640 428 -640 437 -375 500 -640 427 -640 427 -640 427 -640 360 -640 480 -640 428 -480 640 -640 425 -640 427 -480 640 -480 640 -640 427 -640 428 -425 640 -640 429 -500 375 -640 426 -640 427 -640 491 -640 480 -640 480 -427 640 -640 429 -640 426 -640 426 -640 480 -640 426 -640 392 -640 425 -458 640 -640 424 -640 480 -640 480 -640 480 -640 480 -640 480 -446 640 -640 480 -640 480 -500 333 -640 427 -640 428 -427 640 -477 640 -640 426 -640 496 -640 426 -640 428 -507 640 -640 427 -640 480 -480 640 -480 640 -640 427 -640 480 -334 500 -640 455 -640 431 -640 428 -512 326 -602 640 -640 485 -640 640 -612 612 -640 419 -480 640 -500 333 -333 500 -640 433 -640 480 -640 426 -640 427 -480 640 -427 640 -640 480 -640 427 -500 375 -640 480 -640 480 -640 480 -480 640 -640 480 -640 480 -640 480 -640 480 -640 429 -640 427 -640 427 -640 466 -500 332 -426 640 -480 640 -640 410 -640 480 -640 480 -640 359 -640 480 -424 640 -640 396 -640 427 -640 480 -640 427 -640 480 -480 640 -427 640 -480 640 -640 480 -440 640 -333 500 -640 427 -640 480 -640 427 -426 640 -640 427 -500 500 -640 427 -549 640 -500 300 -480 640 -640 427 -640 424 -640 427 -640 425 -480 640 -640 326 -428 640 -640 434 -480 640 -360 640 -480 640 -500 375 -640 427 -478 640 -640 427 -640 427 -640 640 -640 480 -640 456 -427 640 -640 480 -478 640 -375 500 -435 640 -640 425 -640 471 -640 404 -640 480 -480 640 -427 640 -640 480 -640 427 -640 481 -640 480 -640 480 -640 426 -640 480 -333 500 -640 480 -640 429 -500 333 -640 427 -606 640 -500 333 -640 427 -640 480 -640 428 -375 500 -640 427 -640 427 -640 425 -640 480 -640 480 -640 427 -640 181 -480 640 -640 480 -640 438 -640 480 -640 480 -640 480 -480 640 -640 425 -480 640 -500 333 -640 480 -375 500 -480 640 -359 640 -640 480 -480 640 -640 383 -500 304 -640 427 -640 480 -640 457 -640 428 -640 425 -480 640 -500 333 -480 640 -640 427 -383 640 -640 426 -480 640 -612 612 -640 480 -640 480 -426 640 -640 366 -375 500 -640 360 -640 427 -428 640 -640 427 -640 427 -640 401 -640 425 -640 427 -640 564 -640 481 -640 427 -500 333 -640 480 -383 640 -478 640 -640 640 -500 500 -640 432 -500 375 -427 640 -480 640 -640 424 -640 480 -640 426 -480 640 -640 480 -640 567 -640 429 -640 427 -500 334 -480 640 -640 480 -500 333 -640 480 -427 640 -640 424 -640 480 -640 480 -640 359 -640 421 -428 640 -640 427 -640 426 -640 427 -640 426 -579 640 -640 366 -640 426 -480 640 -640 480 -500 335 -480 640 -480 640 -640 480 -411 640 -427 640 -640 480 -375 500 -527 640 -500 374 -341 500 -500 375 -640 480 -427 640 -640 427 -421 640 -480 640 -640 480 -640 427 -492 500 -640 427 -640 425 -640 427 -640 480 -640 424 -640 424 -640 427 -640 481 -500 332 -640 441 -640 480 -403 640 -500 375 -480 640 -640 427 -432 640 -426 640 -640 428 -640 427 -500 375 -480 640 -640 426 -640 427 -455 640 -487 640 -640 427 -640 427 -428 640 -640 480 -500 500 -640 401 -640 480 -640 480 -640 427 -375 500 -640 464 -640 424 -612 612 -640 426 -640 426 -640 480 -640 426 -640 480 -427 640 -640 425 -612 612 -640 454 -640 427 -640 427 -500 332 -320 240 -453 640 -640 535 -640 539 -427 640 -480 640 -347 640 -480 640 -427 640 -427 640 -409 640 -480 640 -500 346 -427 640 -640 427 -426 640 -640 480 -640 480 -425 640 -500 332 -480 640 -500 375 -426 640 -426 640 -640 480 -640 480 -480 640 -640 427 -428 640 -375 500 -640 426 -500 209 -427 640 -640 427 -480 640 -640 425 -480 640 -436 640 -640 425 -640 438 -640 426 -640 495 -640 424 -500 333 -640 426 -480 640 -428 640 -640 427 -640 499 -640 480 -640 426 -640 480 -500 375 -640 480 -426 640 -640 555 -640 480 -640 483 -640 425 -375 500 -640 480 -500 333 -640 480 -640 426 -630 640 -425 640 -640 421 -480 640 -500 375 -480 640 -500 375 -640 427 -640 427 -640 427 -640 474 -333 500 -640 457 -640 480 -640 417 -442 442 -640 408 -640 427 -640 425 -640 360 -427 640 -476 640 -638 640 -640 425 -500 281 -500 375 -426 640 -640 480 -640 426 -338 500 -640 480 -640 427 -640 428 -640 480 -640 640 -640 427 -640 493 -640 427 -543 640 -640 360 -640 480 -640 480 -612 612 -425 640 -640 434 -640 480 -500 400 -500 325 -500 400 -640 480 -640 511 -640 457 -640 427 -640 480 -429 640 -640 425 -640 454 -640 428 -634 640 -612 612 -640 480 -640 479 -640 480 -640 480 -480 360 -640 427 -640 480 -640 425 -500 335 -513 640 -612 612 -640 527 -640 427 -640 343 -640 426 -612 612 -640 427 -640 480 -640 427 -640 360 -467 640 -640 359 -500 334 -640 480 -640 426 -640 480 -640 428 -640 343 -640 640 -640 424 -640 408 -476 640 -438 640 -479 640 -426 640 -480 640 -409 255 -640 428 -640 480 -640 427 -640 480 -500 333 -640 428 -480 640 -480 640 -640 426 -426 640 -640 426 -640 427 -373 495 -640 416 -480 640 -480 640 -640 425 -500 326 -640 426 -640 480 -500 400 -500 335 -640 480 -640 475 -640 480 -612 612 -640 480 -427 640 -640 427 -640 427 -640 480 -640 427 -428 640 -640 427 -640 640 -640 427 -640 398 -640 505 -640 427 -584 640 -640 480 -640 401 -500 281 -612 612 -500 375 -640 426 -500 375 -500 341 -640 424 -640 390 -500 307 -640 401 -640 424 -500 375 -640 427 -549 640 -640 427 -640 427 -500 375 -640 361 -375 500 -640 427 -424 640 -640 480 -640 213 -438 640 -640 442 -480 640 -640 428 -394 640 -640 424 -640 313 -640 480 -640 480 -640 480 -612 612 -480 640 -486 640 -640 413 -640 427 -625 640 -640 413 -640 512 -640 429 -640 426 -640 429 -640 480 -640 427 -500 333 -640 480 -640 436 -640 414 -500 375 -428 640 -640 425 -640 480 -480 640 -640 424 -480 640 -500 500 -640 480 -640 480 -640 427 -500 403 -640 480 -500 375 -640 480 -640 427 -640 480 -640 480 -640 360 -640 427 -375 500 -640 480 -640 427 -427 640 -640 480 -612 612 -427 640 -426 640 -640 425 -640 480 -640 427 -640 427 -640 426 -500 375 -640 480 -640 480 -640 439 -500 334 -640 480 -640 480 -500 333 -500 375 -500 375 -500 333 -640 427 -640 480 -402 500 -640 444 -640 426 -640 427 -458 640 -640 480 -640 427 -640 480 -640 478 -640 640 -640 480 -640 480 -640 480 -640 427 -640 482 -425 640 -640 427 -640 480 -640 480 -640 427 -640 480 -401 603 -640 640 -640 346 -640 384 -640 427 -640 480 -640 480 -640 510 -640 480 -419 640 -640 428 -640 427 -640 480 -640 480 -425 640 -640 478 -480 640 -640 427 -640 349 -640 640 -640 480 -640 427 -640 588 -640 434 -640 366 -640 480 -640 458 -480 640 -612 612 -480 640 -640 480 -640 427 -640 429 -640 480 -400 224 -640 428 -240 160 -500 385 -640 480 -640 414 -640 501 -640 480 -448 640 -375 500 -640 425 -640 426 -640 470 -640 480 -640 424 -640 480 -640 480 -640 428 -640 480 -640 358 -375 500 -640 480 -483 640 -480 640 -640 427 -640 483 -625 480 -640 480 -640 480 -640 425 -640 480 -640 427 -600 450 -500 336 -640 480 -640 427 -640 479 -640 480 -640 425 -480 640 -640 426 -640 427 -640 480 -640 433 -640 458 -640 436 -500 375 -500 332 -640 480 -427 640 -640 556 -640 428 -640 428 -640 475 -480 640 -375 500 -375 500 -640 428 -640 480 -640 427 -427 640 -640 474 -480 640 -480 640 -640 480 -640 457 -612 612 -500 333 -640 480 -640 480 -640 359 -480 640 -640 428 -375 500 -640 480 -640 440 -427 640 -500 313 -500 333 -640 427 -640 460 -640 426 -640 427 -427 640 -640 427 -640 480 -500 375 -426 640 -640 427 -500 425 -640 480 -480 640 -640 424 -496 640 -640 515 -640 360 -500 374 -640 640 -640 480 -458 640 -500 375 -640 433 -333 500 -640 360 -640 427 -640 427 -425 640 -640 427 -640 480 -640 429 -480 640 -500 422 -425 640 -480 640 -640 421 -640 480 -640 480 -500 375 -500 333 -640 518 -640 479 -640 471 -640 427 -640 480 -427 640 -640 427 -640 382 -500 375 -500 305 -640 350 -640 425 -427 640 -640 479 -640 426 -486 640 -640 512 -640 427 -480 640 -640 480 -640 480 -500 375 -640 480 -640 392 -478 640 -640 309 -612 612 -640 428 -247 500 -640 480 -640 480 -640 521 -640 427 -640 480 -640 480 -518 640 -640 480 -640 426 -500 375 -640 480 -640 480 -427 640 -640 480 -356 640 -600 400 -640 418 -640 480 -516 640 -640 256 -640 396 -640 484 -640 436 -382 500 -612 612 -640 426 -640 400 -480 640 -640 428 -640 422 -425 640 -612 612 -640 392 -640 426 -426 640 -640 428 -640 480 -480 640 -370 251 -640 427 -640 479 -427 640 -640 383 -640 425 -640 427 -640 480 -640 427 -640 425 -640 480 -480 640 -640 426 -640 386 -640 383 -612 612 -640 428 -640 425 -640 480 -428 640 -640 425 -640 480 -640 480 -480 640 -640 480 -640 425 -640 426 -534 640 -640 480 -640 426 -640 428 -500 375 -640 360 -500 333 -640 427 -480 640 -640 360 -500 400 -640 424 -500 330 -640 588 -640 480 -480 640 -640 347 -385 289 -640 480 -640 423 -640 480 -640 480 -640 450 -640 480 -480 640 -425 640 -640 480 -500 332 -640 480 -612 612 -640 457 -640 480 -468 304 -640 427 -425 640 -640 427 -640 480 -480 640 -640 425 -640 480 -640 427 -640 478 -500 500 -640 480 -500 375 -375 500 -640 480 -480 640 -640 425 -640 424 -640 480 -640 415 -640 480 -640 329 -640 425 -437 640 -640 427 -640 427 -480 640 -640 426 -500 375 -640 480 -333 500 -640 426 -640 446 -640 480 -480 640 -500 333 -482 625 -640 480 -480 640 -484 640 -466 640 -640 427 -640 480 -640 427 -640 424 -500 333 -640 480 -640 400 -640 480 -640 427 -480 640 -640 429 -640 480 -640 427 -640 427 -640 425 -480 640 -640 427 -480 640 -375 500 -500 333 -500 317 -640 427 -451 640 -480 640 -640 480 -427 640 -640 428 -640 426 -480 640 -320 240 -640 480 -640 427 -640 426 -640 480 -640 436 -640 429 -640 427 -640 480 -640 410 -500 360 -640 480 -640 480 -640 640 -640 427 -640 543 -428 640 -640 489 -640 570 -500 375 -613 640 -500 431 -640 432 -428 640 -640 479 -640 480 -640 480 -612 612 -640 480 -500 375 -640 480 -500 375 -640 421 -640 426 -640 424 -640 427 -476 640 -612 612 -640 480 -640 428 -640 480 -640 480 -480 640 -640 417 -480 640 -640 425 -640 480 -640 456 -640 480 -448 640 -588 640 -640 425 -500 375 -640 427 -640 480 -427 640 -424 640 -480 640 -640 428 -640 480 -480 640 -640 480 -500 375 -480 360 -480 640 -640 426 -480 640 -640 427 -640 426 -640 422 -427 640 -480 640 -640 427 -500 364 -640 428 -334 500 -375 500 -640 438 -427 640 -640 480 -640 480 -500 333 -640 435 -640 480 -500 333 -640 480 -427 640 -500 333 -640 480 -640 425 -640 480 -640 412 -480 640 -640 480 -464 640 -640 480 -480 640 -640 360 -640 428 -640 355 -640 427 -640 427 -640 480 -500 333 -640 480 -640 480 -500 375 -640 427 -375 500 -546 640 -339 500 -640 427 -640 429 -425 640 -640 427 -640 427 -640 361 -640 427 -640 321 -640 427 -640 426 -640 427 -640 480 -375 500 -640 425 -500 333 -640 480 -640 459 -640 490 -640 427 -640 480 -640 427 -640 425 -375 500 -320 408 -640 457 -500 366 -640 427 -640 512 -480 640 -640 588 -640 625 -427 640 -640 426 -480 640 -425 640 -612 612 -640 419 -640 480 -500 316 -635 640 -500 378 -640 424 -640 426 -640 360 -640 460 -640 480 -640 424 -500 375 -640 480 -640 480 -426 640 -427 640 -640 360 -640 479 -640 427 -640 480 -500 333 -640 426 -640 427 -612 612 -500 333 -640 429 -500 418 -427 640 -640 425 -480 640 -640 480 -640 428 -640 480 -640 480 -427 640 -640 420 -640 427 -640 427 -640 427 -500 357 -480 640 -480 640 -640 482 -500 375 -640 480 -640 433 -464 640 -467 640 -500 332 -500 375 -640 349 -640 427 -640 480 -640 480 -334 500 -375 500 -640 423 -640 480 -640 428 -500 451 -640 428 -640 427 -517 640 -640 426 -640 427 -480 640 -383 640 -480 640 -640 428 -640 426 -640 428 -479 640 -640 360 -335 198 -640 480 -640 426 -640 480 -510 640 -640 426 -612 612 -640 424 -630 640 -640 427 -640 427 -640 427 -640 428 -640 480 -480 640 -472 640 -500 375 -640 480 -425 640 -640 480 -640 428 -378 640 -427 640 -640 480 -375 500 -640 480 -427 640 -281 500 -640 436 -480 640 -375 500 -640 567 -640 427 -640 427 -375 500 -640 424 -640 480 -640 493 -640 360 -640 497 -258 344 -640 480 -640 427 -441 640 -333 500 -360 640 -500 375 -640 480 -427 640 -640 428 -640 427 -640 428 -500 375 -640 427 -500 289 -640 359 -640 301 -640 428 -428 640 -640 480 -473 640 -640 427 -640 426 -480 640 -612 612 -640 479 -640 427 -640 480 -640 480 -429 640 -640 480 -640 480 -500 375 -640 480 -640 480 -640 427 -427 640 -453 640 -500 390 -640 393 -500 375 -500 334 -640 346 -480 640 -640 480 -427 640 -640 427 -640 426 -640 427 -640 428 -640 480 -427 640 -640 480 -640 433 -640 425 -640 427 -640 480 -472 640 -640 480 -640 427 -640 640 -640 480 -639 640 -640 360 -361 640 -640 480 -333 500 -640 427 -640 480 -640 368 -426 640 -640 427 -480 640 -640 359 -427 640 -640 480 -640 408 -640 429 -640 478 -640 480 -640 417 -640 427 -640 426 -500 375 -640 480 -640 427 -640 480 -640 480 -640 409 -640 480 -640 427 -640 427 -480 640 -480 640 -640 480 -640 428 -612 612 -333 500 -640 438 -640 427 -616 640 -500 375 -640 480 -500 339 -640 427 -640 428 -640 480 -640 480 -640 480 -640 427 -640 480 -640 359 -640 428 -640 359 -640 480 -640 381 -640 480 -480 640 -640 360 -640 425 -640 479 -640 425 -640 485 -640 426 -640 427 -628 640 -500 375 -500 375 -640 427 -640 423 -425 640 -480 640 -500 375 -640 428 -458 640 -479 640 -640 480 -480 640 -640 480 -288 640 -640 427 -640 477 -640 427 -480 640 -640 480 -640 480 -640 480 -640 359 -640 428 -640 425 -640 449 -500 375 -640 428 -640 480 -640 481 -500 375 -500 333 -640 424 -640 430 -612 612 -640 424 -640 427 -500 375 -640 427 -640 453 -640 422 -640 424 -640 425 -640 425 -640 427 -480 640 -640 480 -640 359 -480 640 -640 426 -640 480 -640 427 -640 426 -640 427 -640 427 -480 640 -429 640 -408 640 -612 612 -427 640 -640 480 -640 480 -500 318 -640 534 -640 479 -640 406 -640 512 -640 427 -640 427 -640 388 -640 426 -640 478 -640 424 -640 480 -480 640 -640 427 -640 640 -640 480 -500 333 -640 433 -640 427 -640 426 -640 427 -640 480 -640 425 -640 428 -640 426 -425 640 -500 375 -640 480 -640 426 -640 434 -640 480 -640 441 -640 425 -640 425 -480 640 -640 427 -565 640 -427 640 -640 480 -640 480 -640 480 -640 427 -640 479 -427 640 -640 640 -500 337 -500 359 -480 640 -427 640 -640 480 -612 612 -640 427 -640 428 -425 640 -640 427 -480 640 -512 640 -640 513 -640 427 -640 480 -500 375 -640 425 -640 480 -428 640 -500 375 -640 425 -500 399 -427 640 -640 427 -500 333 -640 428 -640 428 -640 480 -640 427 -640 428 -413 500 -640 427 -640 424 -640 429 -640 480 -640 480 -640 478 -640 480 -640 452 -640 480 -500 292 -500 375 -640 480 -640 480 -640 480 -640 480 -640 427 -640 426 -480 640 -640 480 -640 427 -640 427 -640 360 -500 333 -640 477 -436 640 -640 426 -640 427 -640 427 -480 640 -612 612 -640 301 -640 311 -640 480 -427 640 -640 457 -640 427 -640 427 -640 480 -640 331 -500 375 -276 640 -640 424 -500 500 -478 640 -612 612 -640 381 -512 640 -433 640 -640 480 -480 640 -640 480 -480 640 -640 480 -427 640 -640 430 -640 480 -640 480 -640 428 -500 373 -640 428 -640 366 -640 475 -640 480 -427 640 -640 427 -500 375 -500 375 -375 500 -640 427 -427 640 -640 480 -640 480 -300 451 -640 383 -640 427 -500 375 -640 424 -500 375 -400 600 -640 478 -640 480 -375 500 -500 375 -640 480 -640 456 -640 427 -480 640 -480 640 -500 375 -500 415 -640 436 -375 500 -480 640 -427 640 -640 480 -640 428 -524 640 -640 489 -612 612 -480 640 -640 426 -640 426 -640 480 -640 425 -640 427 -640 427 -612 612 -640 445 -640 480 -640 427 -480 640 -640 361 -640 427 -640 454 -640 453 -427 640 -640 459 -500 283 -349 500 -640 480 -640 480 -640 480 -640 480 -640 480 -374 500 -480 640 -640 480 -480 640 -500 332 -500 332 -612 612 -640 426 -640 428 -500 333 -640 480 -640 480 -612 612 -640 427 -500 276 -500 332 -640 480 -640 427 -640 480 -640 480 -480 640 -640 480 -480 640 -640 429 -640 480 -640 512 -480 640 -640 480 -640 450 -640 426 -640 427 -640 480 -426 640 -640 427 -640 427 -640 480 -379 640 -640 425 -640 427 -640 400 -640 480 -640 427 -640 427 -640 480 -640 480 -640 427 -480 640 -640 424 -500 374 -640 480 -640 427 -640 480 -640 402 -640 480 -640 480 -640 640 -640 538 -640 480 -640 426 -640 480 -612 612 -480 640 -480 640 -640 427 -640 512 -640 480 -640 427 -640 439 -640 427 -480 640 -426 640 -612 612 -640 332 -500 375 -640 478 -640 433 -480 640 -450 600 -640 480 -640 480 -604 640 -640 243 -640 480 -424 640 -640 480 -401 640 -500 489 -640 397 -500 375 -500 345 -500 429 -481 640 -640 431 -640 366 -286 176 -640 427 -640 480 -428 640 -480 640 -437 500 -472 640 -640 458 -640 480 -612 612 -640 638 -480 640 -354 640 -640 427 -640 480 -640 480 -640 379 -480 640 -640 480 -478 640 -640 480 -640 428 -640 480 -640 480 -640 480 -640 425 -428 640 -640 428 -640 360 -480 640 -603 640 -640 559 -425 640 -640 480 -640 426 -640 427 -640 480 -640 427 -640 426 -640 480 -640 426 -640 360 -640 427 -640 426 -374 640 -480 640 -428 640 -478 640 -612 612 -640 427 -640 480 -640 486 -640 425 -500 363 -640 427 -640 425 -640 423 -533 640 -640 427 -640 428 -612 612 -444 440 -500 375 -425 640 -400 640 -640 480 -640 480 -640 428 -426 640 -640 480 -640 428 -640 480 -600 400 -425 640 -640 510 -500 333 -500 375 -640 427 -640 427 -640 427 -500 354 -640 480 -301 450 -360 640 -640 427 -512 640 -500 332 -427 640 -640 480 -640 427 -427 640 -640 480 -640 480 -500 375 -640 426 -640 384 -640 480 -500 333 -500 375 -640 480 -500 200 -640 480 -640 511 -640 478 -640 475 -500 375 -500 375 -640 480 -640 366 -640 480 -480 640 -640 423 -447 640 -640 640 -640 426 -640 480 -576 640 -360 640 -640 480 -500 281 -640 444 -640 640 -500 332 -560 175 -500 375 -640 366 -640 640 -640 341 -640 478 -640 428 -640 594 -640 363 -640 427 -640 425 -640 480 -590 640 -481 640 -640 640 -640 425 -640 427 -640 427 -640 427 -640 434 -375 500 -640 406 -640 360 -640 480 -640 480 -427 640 -396 640 -640 426 -640 531 -419 640 -640 426 -640 426 -640 480 -500 375 -640 428 -640 480 -640 480 -640 480 -480 640 -480 640 -444 640 -640 427 -320 240 -640 425 -640 480 -640 480 -425 640 -386 500 -640 480 -640 480 -500 333 -480 640 -422 282 -640 480 -640 443 -347 500 -640 480 -478 640 -480 640 -640 444 -640 640 -640 425 -478 640 -640 427 -640 427 -500 283 -640 480 -640 480 -640 412 -500 417 -427 640 -640 427 -640 323 -640 427 -640 471 -427 640 -640 427 -640 427 -368 500 -640 480 -640 427 -640 450 -640 426 -425 640 -640 427 -500 375 -640 427 -640 426 -640 480 -640 428 -640 360 -640 488 -640 425 -640 480 -398 640 -640 414 -640 399 -640 425 -640 480 -640 439 -427 640 -640 480 -428 640 -550 410 -640 427 -640 480 -640 480 -640 494 -428 640 -640 480 -500 375 -640 566 -640 480 -480 640 -640 478 -640 360 -640 427 -640 480 -480 640 -500 375 -500 333 -640 480 -425 640 -426 640 -640 425 -640 427 -640 279 -640 428 -640 376 -640 425 -640 353 -480 640 -640 464 -640 480 -640 492 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 426 -640 427 -640 480 -640 427 -640 379 -500 390 -427 640 -640 510 -640 426 -640 480 -427 640 -480 640 -480 640 -640 469 -640 427 -500 375 -640 528 -427 640 -640 427 -640 519 -640 427 -428 640 -640 427 -640 414 -640 513 -640 427 -640 480 -427 640 -640 427 -640 480 -375 500 -500 375 -640 427 -640 428 -500 375 -640 427 -375 500 -640 480 -640 428 -500 333 -640 427 -640 480 -640 427 -640 427 -640 480 -427 640 -640 427 -640 480 -640 426 -500 375 -378 500 -640 565 -640 427 -640 427 -640 427 -640 480 -640 426 -640 452 -500 375 -640 427 -640 427 -640 480 -640 427 -427 640 -640 457 -640 428 -425 640 -640 480 -480 640 -640 383 -500 332 -640 595 -640 480 -640 404 -640 379 -500 498 -480 640 -640 480 -640 480 -375 500 -640 427 -640 427 -640 640 -640 480 -640 427 -640 427 -640 480 -480 640 -640 479 -640 325 -640 480 -427 640 -640 457 -640 428 -640 480 -640 427 -640 428 -640 480 -640 427 -346 500 -640 480 -640 427 -480 640 -480 320 -640 425 -640 474 -375 500 -478 640 -426 640 -640 426 -640 480 -500 400 -640 480 -640 427 -500 375 -640 426 -499 500 -640 426 -640 480 -640 480 -640 480 -640 427 -640 512 -375 500 -640 427 -480 640 -500 365 -640 480 -480 640 -640 426 -640 480 -640 427 -427 640 -480 640 -640 427 -640 480 -640 480 -425 640 -500 375 -500 338 -640 344 -640 427 -640 425 -640 480 -480 640 -427 640 -486 640 -503 640 -640 480 -427 640 -361 640 -640 457 -640 480 -640 427 -426 640 -640 480 -640 473 -640 361 -640 426 -375 500 -500 375 -640 427 -640 427 -640 431 -640 434 -640 480 -500 375 -640 428 -640 480 -371 640 -475 640 -640 476 -640 427 -500 375 -480 640 -640 426 -640 312 -640 480 -640 480 -640 480 -456 640 -640 427 -640 425 -632 640 -640 360 -640 424 -640 426 -403 640 -426 640 -480 640 -640 393 -359 640 -480 640 -612 612 -640 421 -640 425 -640 478 -640 422 -640 396 -500 375 -640 426 -640 427 -640 427 -640 478 -427 640 -500 336 -640 427 -640 640 -640 555 -612 612 -511 640 -428 640 -640 480 -493 640 -640 427 -640 425 -612 612 -478 640 -640 608 -400 308 -480 640 -640 427 -640 480 -640 512 -640 427 -480 640 -640 318 -480 640 -640 437 -500 385 -427 640 -500 374 -500 375 -640 481 -640 428 -640 289 -640 427 -640 427 -640 388 -480 640 -615 640 -640 480 -640 360 -428 640 -500 333 -640 480 -640 359 -355 640 -480 640 -612 612 -480 640 -640 480 -640 428 -640 480 -425 640 -640 425 -640 480 -640 270 -426 640 -640 480 -640 425 -640 408 -428 640 -640 400 -640 426 -622 640 -640 480 -500 375 -640 480 -640 393 -640 360 -640 428 -640 427 -357 500 -480 640 -640 480 -480 640 -400 500 -391 640 -640 480 -640 480 -640 480 -424 640 -640 427 -640 424 -500 339 -640 480 -640 480 -640 428 -427 640 -640 469 -427 640 -640 445 -640 428 -478 640 -375 500 -640 428 -640 425 -640 426 -427 640 -640 480 -640 480 -478 640 -500 375 -640 480 -500 400 -640 426 -640 512 -640 480 -640 457 -640 425 -640 476 -640 427 -500 375 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -500 375 -640 426 -640 480 -500 375 -640 427 -500 375 -480 640 -640 425 -597 640 -640 480 -640 481 -640 428 -640 512 -640 480 -640 480 -640 480 -427 640 -640 480 -500 334 -640 478 -640 480 -640 444 -480 640 -640 597 -640 427 -640 427 -640 425 -640 478 -640 427 -640 480 -640 427 -451 640 -628 640 -640 640 -500 335 -640 640 -640 318 -640 427 -640 480 -640 480 -640 480 -426 640 -427 640 -500 375 -320 240 -427 640 -640 480 -640 428 -640 429 -427 640 -480 640 -640 427 -640 415 -640 366 -407 500 -640 425 -640 427 -427 640 -480 640 -500 375 -500 360 -478 640 -640 427 -640 510 -640 425 -480 640 -500 334 -640 427 -640 480 -640 427 -333 500 -500 335 -640 427 -375 500 -640 360 -640 427 -640 459 -640 499 -640 473 -480 640 -478 640 -640 438 -640 426 -640 428 -640 441 -640 480 -640 480 -640 526 -640 480 -640 480 -640 480 -640 427 -640 425 -612 612 -398 640 -640 524 -640 478 -427 640 -640 499 -617 640 -640 428 -480 640 -640 423 -500 357 -478 640 -640 360 -640 427 -640 433 -640 425 -545 640 -640 482 -424 640 -640 480 -334 500 -483 640 -427 640 -640 480 -500 333 -500 375 -400 266 -375 500 -640 480 -480 640 -640 428 -500 375 -640 577 -446 640 -640 480 -480 640 -640 480 -640 480 -640 427 -640 426 -362 640 -640 480 -500 375 -500 333 -500 333 -640 426 -640 426 -640 480 -480 640 -640 478 -480 640 -640 427 -500 375 -640 640 -640 480 -640 425 -640 421 -640 427 -640 480 -640 426 -640 426 -640 352 -500 375 -480 640 -640 427 -480 640 -640 427 -426 640 -640 480 -320 400 -640 480 -427 640 -640 358 -640 430 -640 427 -640 426 -500 375 -480 640 -612 612 -480 640 -640 430 -512 512 -640 480 -480 640 -640 427 -640 478 -640 427 -640 427 -640 425 -640 480 -640 425 -640 427 -640 480 -640 427 -500 281 -640 480 -640 480 -428 640 -640 480 -640 480 -425 640 -640 480 -425 640 -480 640 -640 339 -640 427 -427 640 -480 640 -640 425 -427 640 -640 480 -640 423 -442 500 -640 480 -640 427 -480 640 -640 494 -494 500 -480 640 -480 640 -640 480 -640 640 -640 427 -640 480 -640 428 -640 428 -612 612 -480 640 -634 640 -500 333 -500 332 -423 640 -640 427 -480 640 -632 640 -500 323 -640 426 -640 480 -640 480 -640 480 -640 480 -640 480 -640 425 -640 427 -640 432 -332 500 -640 640 -640 478 -640 512 -640 512 -427 640 -500 375 -640 480 -640 480 -640 480 -640 428 -640 480 -640 480 -640 254 -640 480 -500 375 -640 427 -480 640 -640 474 -640 426 -640 480 -640 495 -480 640 -640 480 -640 427 -640 480 -500 333 -640 427 -640 480 -375 500 -640 427 -464 640 -640 480 -480 640 -612 612 -640 421 -640 480 -500 332 -640 480 -640 360 -640 480 -426 640 -500 375 -640 427 -612 612 -640 359 -640 428 -640 360 -640 480 -333 500 -640 360 -640 370 -640 427 -500 372 -640 426 -500 333 -478 640 -500 375 -640 480 -640 368 -500 368 -500 375 -500 332 -640 480 -640 427 -519 640 -640 434 -640 427 -424 640 -640 479 -425 640 -640 478 -640 515 -425 640 -500 375 -600 600 -640 428 -612 612 -640 427 -640 480 -640 466 -640 427 -546 640 -640 480 -640 403 -640 606 -561 640 -427 640 -500 372 -480 640 -477 358 -640 480 -640 428 -640 478 -427 640 -640 355 -640 480 -640 480 -640 512 -427 640 -375 500 -500 332 -480 640 -480 640 -640 473 -612 612 -640 428 -640 427 -640 480 -640 480 -500 400 -640 427 -640 427 -640 426 -640 480 -640 384 -640 427 -428 640 -640 426 -640 480 -640 481 -640 480 -640 480 -640 480 -500 375 -640 329 -333 500 -640 427 -640 348 -640 480 -500 375 -481 481 -640 424 -640 360 -640 427 -640 428 -640 480 -425 640 -640 427 -640 480 -500 375 -426 640 -640 427 -480 640 -500 373 -640 426 -640 480 -640 320 -640 426 -480 640 -426 640 -500 282 -640 417 -640 403 -426 640 -640 480 -640 427 -480 640 -640 425 -511 640 -375 500 -500 335 -640 412 -640 427 -640 427 -500 375 -640 480 -399 640 -640 426 -640 480 -500 375 -480 640 -427 640 -480 640 -360 640 -640 480 -640 427 -612 612 -640 571 -640 427 -640 427 -500 375 -640 429 -640 383 -427 640 -333 500 -640 480 -427 640 -478 640 -500 390 -640 480 -640 480 -640 427 -640 480 -500 328 -480 640 -640 480 -640 426 -456 640 -640 427 -640 427 -640 603 -612 612 -640 427 -480 640 -480 640 -640 480 -640 480 -480 640 -640 443 -640 427 -500 333 -640 427 -640 249 -640 480 -640 426 -640 480 -640 480 -282 454 -640 480 -640 427 -640 480 -427 640 -428 640 -640 425 -567 640 -500 333 -500 375 -640 480 -480 640 -446 640 -500 375 -640 480 -427 640 -427 640 -640 439 -480 640 -640 427 -375 500 -640 480 -640 427 -640 426 -640 426 -480 640 -640 480 -640 480 -612 612 -640 554 -480 640 -640 360 -500 375 -500 375 -640 423 -640 427 -480 640 -640 425 -640 427 -640 426 -640 480 -640 426 -640 427 -640 464 -640 414 -375 500 -482 482 -640 480 -389 640 -478 640 -640 427 -640 361 -640 480 -640 429 -640 427 -640 425 -640 480 -640 480 -640 483 -640 427 -640 427 -500 329 -640 444 -640 428 -640 480 -403 640 -500 333 -640 480 -640 427 -640 269 -640 480 -640 480 -640 360 -640 427 -444 640 -640 428 -640 480 -457 640 -480 640 -612 612 -640 427 -612 612 -333 500 -640 480 -426 640 -640 424 -640 427 -640 418 -500 375 -640 496 -640 457 -640 480 -640 426 -480 640 -640 424 -640 480 -576 640 -640 427 -640 480 -640 399 -480 640 -640 427 -640 480 -500 500 -640 427 -351 500 -640 427 -640 480 -640 640 -640 427 -427 640 -640 373 -500 380 -375 500 -640 480 -425 640 -640 406 -640 427 -640 480 -640 427 -640 427 -500 408 -640 480 -640 480 -640 480 -500 336 -640 480 -480 640 -640 473 -640 428 -640 428 -578 640 -480 640 -640 427 -640 424 -640 427 -404 640 -500 375 -640 400 -500 333 -480 640 -436 640 -409 640 -640 427 -640 523 -640 427 -640 418 -640 480 -640 480 -640 427 -640 426 -500 333 -640 427 -427 640 -640 412 -640 480 -640 427 -478 640 -640 480 -640 427 -332 500 -511 640 -478 640 -640 427 -334 500 -640 427 -640 427 -500 375 -640 480 -640 480 -500 375 -500 400 -640 480 -333 500 -480 640 -640 427 -640 360 -640 480 -640 480 -640 480 -640 388 -427 640 -500 375 -640 426 -640 480 -640 480 -640 480 -612 612 -478 640 -334 500 -640 427 -640 457 -640 480 -640 427 -426 640 -640 425 -500 375 -640 427 -640 416 -426 640 -480 640 -640 425 -640 426 -640 538 -480 640 -640 478 -500 375 -426 640 -480 640 -640 426 -640 428 -640 427 -480 640 -640 427 -500 228 -640 425 -640 480 -500 375 -640 427 -500 375 -640 427 -433 640 -480 640 -480 640 -640 426 -640 427 -612 612 -640 481 -640 480 -453 640 -500 333 -640 361 -640 424 -640 428 -640 478 -640 480 -640 427 -640 480 -425 640 -640 339 -426 640 -640 480 -640 480 -640 427 -500 375 -640 323 -640 640 -640 480 -640 427 -640 450 -320 240 -640 478 -640 640 -640 427 -426 640 -640 480 -640 424 -640 427 -612 612 -640 427 -640 425 -640 480 -640 480 -480 640 -640 480 -640 449 -640 479 -640 426 -480 640 -640 428 -640 478 -456 640 -640 427 -640 480 -428 443 -640 483 -640 423 -640 480 -640 480 -640 480 -640 427 -480 640 -640 424 -640 427 -500 202 -426 640 -640 427 -640 428 -640 480 -375 500 -427 640 -640 480 -460 640 -640 427 -640 427 -640 427 -640 480 -640 426 -640 484 -333 500 -640 427 -333 500 -640 401 -640 480 -640 429 -640 433 -427 640 -500 333 -640 320 -640 427 -640 427 -640 427 -640 415 -500 332 -457 640 -427 640 -640 434 -448 640 -640 480 -640 427 -640 425 -640 480 -640 480 -480 640 -612 612 -480 640 -640 480 -640 512 -640 480 -480 640 -480 640 -500 375 -640 427 -640 480 -480 640 -419 640 -427 640 -640 424 -640 428 -640 425 -640 427 -640 426 -640 426 -473 640 -640 426 -640 420 -640 480 -640 427 -500 290 -612 612 -640 427 -640 480 -426 640 -400 300 -314 500 -500 375 -640 360 -640 480 -640 427 -640 427 -480 640 -640 425 -500 375 -640 480 -640 480 -640 640 -500 375 -640 424 -612 612 -640 426 -640 487 -640 427 -640 480 -640 503 -640 458 -640 484 -640 480 -640 480 -640 427 -640 480 -640 457 -640 480 -427 640 -612 612 -640 526 -500 375 -640 480 -640 480 -400 500 -640 427 -640 480 -640 427 -640 427 -640 426 -640 480 -480 640 -428 640 -480 640 -480 640 -428 640 -640 406 -640 428 -640 491 -428 640 -500 375 -480 640 -480 640 -640 480 -640 427 -480 640 -640 479 -480 640 -640 426 -640 360 -640 360 -640 480 -500 375 -640 480 -640 428 -612 612 -640 425 -375 500 -640 427 -640 457 -640 427 -640 316 -640 480 -500 331 -640 480 -427 640 -480 640 -426 640 -640 425 -640 496 -640 389 -463 640 -640 468 -640 480 -640 480 -444 640 -640 424 -334 500 -500 375 -640 429 -500 332 -480 640 -640 480 -640 427 -640 480 -426 640 -640 386 -640 427 -500 375 -500 375 -640 427 -640 480 -640 427 -640 324 -500 375 -640 425 -640 363 -640 428 -426 640 -640 427 -467 640 -640 427 -640 427 -640 427 -640 230 -640 426 -640 359 -640 428 -640 480 -640 427 -640 427 -640 427 -500 375 -640 427 -612 612 -500 375 -500 375 -640 427 -640 434 -500 375 -640 640 -640 463 -612 612 -480 640 -640 427 -640 480 -640 568 -640 480 -480 640 -426 640 -640 480 -612 612 -640 480 -627 640 -344 500 -640 480 -640 442 -640 428 -640 480 -480 640 -640 480 -640 480 -640 433 -640 512 -427 640 -500 334 -640 254 -640 431 -612 612 -612 612 -640 512 -640 480 -640 424 -640 396 -640 480 -640 480 -480 640 -640 480 -427 640 -640 480 -640 427 -640 480 -640 480 -500 400 -500 375 -640 480 -640 480 -427 640 -640 480 -640 427 -480 640 -427 640 -640 427 -640 480 -640 427 -640 428 -426 640 -500 375 -640 366 -640 480 -640 480 -429 640 -479 320 -640 429 -500 399 -424 640 -538 640 -640 428 -640 431 -427 640 -554 312 -426 640 -640 480 -375 500 -640 427 -640 429 -480 384 -500 400 -333 500 -480 640 -500 484 -640 427 -477 304 -426 640 -640 480 -600 400 -500 500 -640 427 -480 640 -500 333 -500 334 -640 428 -640 486 -640 258 -640 480 -640 480 -519 640 -612 612 -500 333 -640 426 -640 427 -640 640 -640 508 -640 427 -480 640 -426 640 -500 375 -640 427 -500 334 -640 480 -437 640 -640 418 -640 427 -598 640 -378 500 -480 640 -640 593 -640 427 -480 640 -640 480 -333 500 -640 343 -640 420 -480 640 -640 480 -640 427 -333 500 -640 427 -426 640 -640 427 -640 424 -523 640 -480 640 -640 430 -640 480 -640 428 -640 480 -480 640 -640 480 -612 612 -427 640 -640 481 -640 407 -427 640 -640 426 -333 500 -640 480 -640 478 -640 480 -640 439 -640 403 -640 480 -640 480 -640 480 -640 419 -640 427 -640 427 -640 424 -640 382 -640 408 -500 375 -640 640 -640 480 -640 427 -640 428 -395 640 -480 640 -602 640 -640 480 -428 640 -640 400 -427 640 -640 427 -640 424 -640 480 -640 426 -640 480 -500 375 -640 480 -453 640 -640 443 -640 429 -640 360 -640 498 -640 480 -446 640 -640 476 -500 387 -640 640 -590 640 -640 425 -640 480 -427 640 -640 480 -426 640 -640 638 -439 640 -640 640 -437 640 -640 480 -640 640 -640 480 -640 495 -640 427 -500 375 -640 388 -640 480 -640 428 -640 427 -353 640 -427 640 -479 640 -500 334 -640 480 -640 427 -427 640 -512 640 -500 335 -426 640 -640 427 -640 200 -640 427 -640 427 -640 538 -512 640 -640 428 -450 319 -375 500 -640 480 -500 375 -640 480 -640 428 -640 452 -640 480 -640 480 -640 480 -640 640 -640 427 -640 480 -416 640 -640 426 -640 480 -427 640 -500 375 -640 295 -457 640 -640 425 -640 427 -500 500 -640 480 -640 480 -427 640 -375 500 -640 480 -640 434 -640 427 -433 640 -554 640 -640 427 -640 487 -640 428 -500 375 -640 424 -478 640 -640 480 -640 425 -640 427 -500 334 -640 467 -640 426 -640 427 -426 640 -640 427 -427 640 -480 640 -640 426 -409 640 -640 480 -425 640 -640 480 -640 428 -378 640 -427 640 -640 619 -425 640 -640 480 -640 428 -640 480 -640 480 -640 480 -640 429 -640 426 -640 425 -480 640 -640 478 -375 500 -640 436 -640 409 -640 423 -640 426 -640 427 -500 332 -500 375 -640 480 -640 428 -480 640 -640 425 -640 427 -640 480 -640 427 -640 480 -640 480 -640 480 -480 640 -500 337 -500 325 -640 427 -640 426 -640 400 -640 248 -640 427 -640 462 -640 480 -640 427 -640 508 -500 391 -480 640 -640 427 -640 480 -640 427 -427 640 -640 426 -427 640 -640 427 -457 640 -640 480 -640 480 -427 640 -427 640 -500 375 -424 640 -427 640 -640 427 -640 480 -640 480 -480 640 -640 480 -444 640 -640 424 -640 428 -640 460 -640 427 -640 428 -640 512 -640 427 -428 640 -640 427 -640 427 -640 478 -640 424 -640 480 -640 427 -640 339 -612 612 -640 480 -500 375 -480 640 -640 425 -640 427 -640 480 -427 640 -427 640 -640 480 -480 640 -640 480 -500 375 -640 480 -640 424 -640 480 -640 480 -640 480 -480 640 -612 612 -640 428 -427 640 -640 480 -612 612 -640 480 -640 424 -640 480 -640 480 -640 480 -640 480 -480 640 -427 640 -640 427 -640 424 -640 427 -640 427 -480 640 -640 480 -640 480 -640 424 -640 457 -427 640 -500 338 -640 427 -640 427 -356 640 -375 500 -505 640 -640 425 -400 600 -640 427 -426 640 -481 640 -640 480 -640 491 -640 480 -640 480 -640 369 -640 427 -500 333 -333 500 -500 313 -640 482 -640 491 -640 426 -640 426 -640 480 -640 427 -640 504 -640 426 -480 640 -480 640 -640 480 -640 457 -640 427 -640 427 -640 426 -640 427 -640 426 -640 480 -612 612 -640 480 -640 480 -500 332 -640 480 -480 640 -640 480 -640 426 -640 480 -500 305 -640 347 -640 427 -480 640 -500 335 -367 500 -640 427 -640 427 -640 427 -640 480 -640 512 -612 612 -640 427 -568 320 -640 426 -480 640 -480 640 -640 480 -480 640 -427 640 -640 428 -640 360 -348 500 -424 640 -480 640 -640 480 -480 640 -636 640 -427 640 -480 640 -640 427 -640 480 -333 500 -500 375 -640 427 -600 450 -640 480 -640 427 -640 480 -329 640 -640 360 -612 612 -640 480 -500 500 -640 480 -640 457 -640 426 -640 488 -640 479 -480 640 -640 428 -427 640 -640 480 -640 427 -640 480 -640 427 -640 633 -512 640 -480 640 -480 640 -500 332 -640 480 -640 427 -640 480 -500 375 -640 480 -640 480 -640 480 -640 424 -640 427 -426 640 -640 427 -427 640 -471 640 -640 425 -500 398 -640 369 -640 480 -640 480 -640 485 -640 480 -640 480 -640 399 -640 427 -480 640 -500 375 -640 480 -425 640 -640 429 -500 500 -500 332 -640 640 -640 480 -480 640 -640 480 -640 425 -640 379 -480 640 -640 408 -333 500 -640 421 -427 640 -383 640 -640 480 -640 419 -478 640 -640 418 -500 357 -435 480 -640 427 -640 480 -478 640 -640 428 -500 375 -640 427 -640 427 -640 316 -640 428 -640 424 -413 640 -640 438 -640 428 -640 393 -640 428 -375 500 -640 425 -640 423 -640 475 -640 427 -640 427 -376 500 -640 429 -640 480 -640 446 -640 480 -425 640 -640 359 -500 374 -427 640 -480 640 -640 421 -427 640 -640 427 -640 425 -640 640 -640 429 -640 480 -500 333 -640 427 -429 640 -333 500 -480 640 -335 500 -640 427 -480 640 -500 378 -640 629 -640 424 -640 464 -383 640 -640 513 -333 500 -640 480 -375 500 -612 612 -640 425 -640 480 -640 480 -640 360 -612 612 -640 425 -640 480 -640 428 -428 640 -640 478 -399 500 -480 640 -640 427 -640 427 -640 428 -480 640 -640 425 -640 426 -640 480 -381 640 -640 480 -640 480 -427 640 -640 556 -640 480 -480 640 -640 640 -640 429 -500 375 -640 427 -480 640 -640 458 -480 640 -640 427 -500 500 -333 500 -480 640 -500 334 -640 480 -640 428 -640 426 -394 500 -640 427 -480 640 -640 441 -640 484 -480 640 -640 480 -640 480 -640 478 -640 427 -640 478 -428 640 -501 640 -640 400 -512 640 -480 640 -640 291 -640 480 -500 375 -640 480 -429 640 -464 640 -640 480 -640 640 -426 640 -640 407 -480 640 -480 640 -640 426 -640 480 -640 640 -404 640 -500 306 -640 472 -500 377 -640 480 -500 375 -640 439 -500 375 -640 427 -480 640 -500 375 -640 640 -640 473 -481 640 -640 432 -640 480 -425 640 -640 425 -640 360 -640 427 -640 421 -640 427 -640 428 -640 427 -500 333 -640 443 -458 640 -612 612 -640 427 -640 303 -640 480 -480 640 -640 478 -423 640 -640 512 -640 427 -640 480 -640 427 -640 480 -640 360 -640 480 -640 478 -385 308 -640 427 -500 381 -640 427 -480 640 -500 334 -640 480 -500 375 -640 426 -640 426 -640 480 -640 425 -453 640 -640 476 -500 375 -640 425 -640 480 -480 640 -612 612 -333 500 -478 640 -502 640 -500 333 -640 471 -640 480 -427 640 -640 480 -640 480 -640 427 -640 480 -640 400 -500 375 -640 480 -640 480 -500 333 -426 640 -427 640 -429 640 -640 478 -480 640 -432 640 -640 480 -480 640 -428 640 -640 478 -500 305 -500 375 -640 426 -500 334 -640 428 -612 612 -640 480 -640 496 -427 640 -360 640 -640 427 -396 640 -640 425 -640 480 -411 640 -640 425 -640 480 -640 480 -640 480 -640 427 -500 335 -640 480 -426 640 -640 480 -640 427 -500 375 -640 480 -640 461 -640 480 -640 480 -480 640 -640 425 -640 480 -640 427 -500 375 -640 424 -640 480 -480 640 -427 640 -640 480 -640 433 -640 400 -500 333 -640 480 -640 412 -612 612 -640 480 -447 640 -640 425 -640 427 -420 223 -356 640 -500 375 -427 640 -640 428 -427 640 -500 375 -640 427 -640 439 -640 419 -640 400 -500 500 -500 375 -640 403 -500 375 -640 427 -640 480 -640 424 -640 480 -640 514 -640 480 -640 480 -640 480 -640 428 -640 414 -500 333 -640 228 -640 480 -640 360 -640 480 -640 445 -640 493 -640 482 -480 640 -640 427 -640 461 -640 427 -640 428 -640 480 -640 427 -640 430 -640 426 -600 400 -640 427 -640 427 -428 640 -426 640 -640 453 -640 464 -480 640 -480 640 -640 480 -640 480 -640 426 -640 480 -640 416 -640 427 -640 480 -640 403 -640 480 -640 488 -640 425 -480 640 -640 480 -640 425 -600 400 -640 489 -640 266 -640 426 -512 640 -640 427 -640 480 -640 427 -640 480 -375 500 -640 480 -640 515 -640 427 -500 375 -600 399 -640 429 -500 372 -640 480 -640 426 -428 640 -640 427 -640 480 -640 427 -640 401 -500 375 -640 427 -426 640 -427 640 -480 640 -481 640 -429 640 -480 640 -640 427 -640 414 -640 574 -480 640 -640 427 -640 640 -321 500 -640 425 -640 480 -500 375 -640 428 -640 356 -480 640 -335 500 -640 425 -361 640 -640 454 -640 438 -640 480 -480 640 -640 480 -427 640 -500 375 -640 480 -640 480 -640 480 -640 480 -640 461 -640 395 -480 640 -640 360 -640 480 -640 616 -500 333 -474 640 -640 427 -640 480 -640 457 -640 424 -427 640 -640 359 -640 480 -640 480 -640 480 -640 471 -640 480 -427 640 -640 480 -640 427 -640 248 -640 424 -500 332 -640 426 -480 640 -333 500 -640 480 -640 427 -640 359 -378 500 -640 427 -333 500 -640 480 -640 427 -640 480 -480 640 -640 360 -640 480 -500 375 -480 640 -402 600 -640 425 -480 640 -500 326 -640 426 -640 425 -500 375 -375 500 -612 612 -427 640 -500 375 -640 427 -640 480 -375 500 -640 425 -480 640 -640 480 -480 640 -640 427 -470 640 -640 424 -360 500 -640 435 -640 491 -640 480 -640 360 -640 480 -640 486 -640 439 -640 429 -640 640 -480 640 -640 480 -500 335 -365 500 -478 640 -640 427 -500 332 -640 424 -640 480 -640 480 -427 640 -425 640 -640 480 -640 480 -600 363 -640 480 -640 428 -640 480 -640 457 -640 480 -640 427 -333 500 -640 428 -375 500 -640 384 -640 478 -640 480 -640 426 -640 360 -640 453 -427 640 -640 480 -640 426 -640 424 -640 480 -338 500 -640 436 -640 426 -512 640 -500 375 -640 428 -625 425 -640 427 -518 640 -640 480 -500 375 -640 427 -640 480 -640 426 -480 640 -480 640 -640 431 -640 480 -640 480 -640 427 -640 427 -612 612 -640 480 -500 375 -640 427 -640 426 -640 431 -482 500 -640 426 -640 640 -640 203 -640 480 -640 603 -640 640 -500 375 -640 480 -640 427 -640 426 -400 500 -640 480 -640 625 -480 640 -427 640 -640 480 -427 640 -640 360 -640 480 -617 640 -640 425 -640 428 -640 361 -426 640 -640 480 -640 480 -640 425 -640 360 -640 428 -640 420 -640 425 -480 640 -640 427 -640 480 -480 640 -480 640 -626 586 -612 612 -318 500 -428 640 -500 375 -427 640 -640 427 -640 427 -640 426 -640 426 -428 640 -612 612 -500 332 -480 640 -640 426 -411 640 -500 333 -640 480 -500 285 -640 480 -640 426 -640 479 -640 385 -640 480 -638 640 -640 512 -640 480 -480 640 -640 479 -426 640 -640 428 -480 640 -640 480 -640 480 -640 427 -426 640 -500 333 -640 427 -640 480 -640 480 -640 427 -640 608 -640 427 -640 480 -640 427 -480 640 -428 640 -640 428 -640 426 -640 480 -640 480 -640 426 -500 333 -640 444 -426 640 -640 480 -640 424 -500 400 -640 468 -640 429 -640 427 -640 425 -480 640 -529 640 -640 425 -640 427 -640 426 -480 640 -640 427 -640 446 -640 480 -480 640 -427 640 -640 386 -640 480 -500 333 -640 428 -640 480 -640 454 -424 640 -640 428 -640 389 -427 640 -640 480 -640 480 -640 360 -640 480 -480 640 -640 427 -427 640 -640 480 -640 458 -640 480 -640 480 -640 416 -427 640 -640 427 -360 240 -640 480 -500 375 -640 426 -640 480 -640 425 -640 425 -640 427 -480 640 -640 425 -640 553 -427 640 -640 426 -480 640 -640 480 -500 334 -480 640 -640 576 -640 425 -427 640 -640 426 -478 640 -640 476 -428 640 -427 640 -640 339 -427 640 -640 424 -427 640 -640 427 -640 427 -640 362 -524 640 -640 478 -426 640 -640 427 -500 375 -640 480 -640 480 -640 213 -640 427 -640 460 -512 640 -640 480 -640 480 -640 384 -640 443 -640 480 -500 334 -320 240 -640 480 -479 640 -640 480 -612 612 -640 424 -640 455 -300 225 -640 428 -640 428 -640 437 -640 427 -480 640 -640 480 -427 640 -640 426 -640 480 -640 480 -480 640 -640 427 -612 612 -640 428 -640 427 -600 400 -640 427 -480 640 -612 612 -427 640 -499 640 -640 480 -640 153 -640 427 -640 480 -500 375 -500 375 -640 480 -640 427 -500 374 -640 480 -640 483 -640 480 -640 576 -640 448 -640 478 -500 333 -480 640 -640 427 -480 640 -640 303 -480 640 -640 427 -640 480 -500 333 -640 427 -640 426 -640 480 -489 640 -640 427 -640 424 -640 359 -427 640 -500 333 -640 480 -333 500 -480 640 -375 500 -640 426 -640 578 -640 480 -480 640 -416 640 -640 408 -640 480 -500 333 -640 203 -612 612 -612 612 -383 640 -640 338 -640 427 -640 480 -640 441 -640 427 -427 640 -640 480 -640 427 -640 480 -640 426 -640 427 -640 480 -333 500 -640 169 -640 426 -428 640 -500 375 -480 640 -428 640 -500 314 -640 383 -480 640 -640 427 -640 428 -428 640 -640 631 -375 500 -425 640 -640 427 -497 640 -640 366 -640 426 -390 500 -640 427 -500 493 -640 428 -640 427 -640 427 -640 359 -640 480 -640 427 -480 640 -442 640 -426 640 -640 480 -640 425 -427 640 -640 480 -375 500 -500 337 -640 298 -640 366 -640 425 -640 480 -640 428 -640 480 -640 480 -640 480 -640 426 -640 426 -640 480 -640 480 -640 428 -640 480 -640 480 -640 480 -431 640 -640 427 -500 234 -333 500 -640 423 -640 427 -612 612 -334 500 -500 333 -500 333 -640 480 -427 640 -640 480 -500 375 -612 612 -640 456 -640 480 -640 458 -640 426 -511 640 -640 637 -640 480 -640 429 -640 480 -360 270 -640 479 -640 559 -640 405 -468 640 -640 480 -427 640 -426 640 -640 429 -500 250 -500 277 -500 375 -640 427 -640 427 -640 436 -640 480 -388 500 -640 427 -360 640 -500 375 -640 425 -426 640 -438 640 -640 435 -640 502 -640 511 -480 640 -640 480 -640 480 -480 640 -640 427 -640 480 -333 500 -640 482 -640 484 -640 480 -640 480 -640 427 -640 480 -640 480 -441 640 -640 480 -640 480 -640 532 -640 429 -427 640 -480 640 -640 385 -427 640 -640 425 -640 416 -640 426 -640 426 -640 480 -550 539 -640 384 -640 479 -640 480 -500 334 -640 480 -640 425 -500 375 -640 480 -480 640 -480 640 -500 333 -326 640 -640 480 -480 640 -500 375 -512 640 -640 427 -640 426 -448 336 -640 480 -640 424 -480 640 -500 438 -478 640 -640 428 -480 640 -640 424 -640 480 -640 480 -426 640 -640 429 -640 480 -640 458 -640 429 -640 480 -500 375 -640 480 -427 640 -640 427 -640 639 -640 427 -640 480 -640 427 -424 640 -640 425 -640 424 -480 640 -640 479 -640 425 -640 428 -640 426 -421 640 -640 413 -640 480 -640 480 -480 640 -426 640 -224 500 -428 640 -462 462 -640 399 -481 500 -640 418 -449 600 -640 480 -640 427 -500 375 -640 427 -640 479 -640 480 -480 640 -640 394 -640 496 -501 640 -640 427 -640 480 -480 640 -640 427 -640 427 -591 640 -640 427 -612 612 -500 335 -478 640 -458 640 -493 640 -500 375 -430 500 -640 480 -640 480 -640 480 -640 415 -640 480 -640 480 -640 423 -500 333 -640 399 -500 375 -640 480 -640 480 -640 469 -500 210 -640 480 -500 375 -500 375 -640 408 -640 480 -428 640 -350 350 -640 480 -640 480 -640 480 -394 500 -428 640 -640 480 -640 480 -359 640 -640 426 -428 640 -640 427 -640 426 -640 426 -640 480 -640 453 -640 526 -640 480 -640 424 -484 640 -480 640 -640 426 -640 427 -640 427 -400 285 -429 640 -640 453 -427 640 -478 640 -480 640 -640 512 -640 427 -640 480 -500 339 -640 428 -333 500 -480 640 -640 427 -640 480 -612 612 -640 429 -640 427 -500 406 -640 427 -640 360 -427 640 -640 424 -640 427 -640 427 -427 640 -640 480 -480 640 -640 358 -375 500 -640 480 -480 640 -640 406 -424 351 -500 375 -500 333 -640 480 -640 426 -640 529 -640 427 -640 426 -427 640 -640 480 -640 427 -408 640 -361 640 -500 289 -612 612 -640 428 -480 640 -640 470 -500 333 -480 640 -500 375 -640 427 -640 637 -640 361 -500 375 -640 480 -500 460 -640 425 -426 640 -640 480 -427 640 -480 640 -640 426 -427 640 -640 400 -640 640 -266 412 -640 480 -640 360 -376 500 -427 640 -640 640 -640 426 -333 500 -478 640 -640 425 -427 640 -640 426 -480 640 -500 375 -500 334 -640 480 -500 473 -480 640 -640 427 -640 481 -360 480 -480 640 -640 530 -640 504 -640 499 -500 334 -640 427 -478 640 -526 640 -375 500 -640 480 -640 457 -500 332 -500 333 -640 550 -640 438 -640 446 -468 640 -640 408 -640 427 -427 640 -426 640 -640 480 -640 433 -640 366 -640 480 -500 375 -640 427 -640 480 -640 457 -375 500 -640 480 -500 375 -640 480 -640 640 -612 612 -640 425 -640 427 -427 640 -640 480 -480 640 -640 480 -640 419 -640 480 -640 360 -640 480 -640 480 -612 612 -640 421 -480 640 -640 427 -640 480 -427 640 -640 480 -640 240 -500 334 -427 640 -640 480 -375 500 -480 640 -321 500 -640 480 -426 640 -640 428 -220 176 -640 414 -480 640 -640 427 -640 480 -640 426 -640 427 -364 500 -640 480 -640 427 -427 640 -640 480 -640 429 -640 480 -480 640 -640 425 -640 428 -640 425 -640 427 -612 612 -640 427 -640 480 -640 428 -640 480 -640 480 -480 640 -640 640 -480 640 -640 480 -428 640 -480 640 -500 375 -500 500 -640 480 -640 427 -640 480 -640 458 -640 428 -612 612 -500 332 -640 383 -640 427 -640 426 -464 640 -640 480 -640 427 -640 427 -500 346 -640 480 -427 640 -375 500 -640 467 -470 640 -640 427 -500 458 -640 480 -640 480 -500 375 -426 640 -640 426 -327 640 -640 469 -640 428 -640 427 -640 480 -640 480 -640 423 -612 612 -640 427 -412 640 -298 448 -640 427 -640 480 -480 640 -640 480 -640 480 -640 480 -640 481 -640 426 -500 375 -612 612 -640 479 -640 219 -640 419 -480 640 -640 425 -640 427 -640 425 -500 500 -640 448 -640 427 -480 640 -640 480 -640 473 -640 426 -640 427 -500 284 -640 427 -640 458 -640 480 -640 480 -640 453 -500 375 -640 398 -500 375 -640 480 -640 468 -480 640 -640 464 -402 640 -640 480 -640 480 -640 424 -640 480 -500 375 -640 425 -431 640 -640 480 -640 427 -640 338 -640 427 -640 428 -639 428 -612 612 -427 640 -640 427 -500 333 -640 463 -640 425 -640 427 -640 374 -640 480 -640 480 -480 640 -640 427 -640 480 -640 428 -640 480 -640 480 -500 338 -480 640 -451 500 -640 427 -640 480 -427 640 -640 425 -427 640 -480 640 -480 640 -640 478 -640 480 -640 480 -640 427 -429 640 -425 640 -500 375 -640 294 -640 640 -429 640 -640 427 -426 640 -640 423 -480 640 -640 428 -640 424 -640 480 -640 427 -640 480 -500 375 -500 375 -480 640 -500 335 -427 640 -480 640 -640 383 -500 375 -428 640 -640 478 -494 640 -480 640 -392 591 -640 536 -344 500 -480 640 -640 480 -640 480 -500 500 -612 612 -640 504 -640 426 -640 480 -640 427 -640 423 -640 298 -375 500 -396 640 -640 427 -640 480 -640 480 -640 533 -375 500 -640 480 -640 425 -360 640 -640 425 -640 479 -424 640 -640 427 -457 640 -640 428 -640 467 -640 428 -640 427 -480 640 -640 427 -640 427 -640 480 -480 640 -640 480 -640 427 -500 375 -500 375 -640 480 -640 480 -480 640 -640 480 -426 640 -640 359 -640 352 -640 427 -640 480 -640 480 -500 400 -640 424 -640 480 -500 375 -640 480 -640 426 -500 333 -640 425 -640 480 -383 640 -640 428 -640 480 -640 427 -640 427 -640 425 -612 612 -640 480 -640 480 -640 511 -427 640 -640 359 -640 480 -640 480 -426 640 -640 480 -640 480 -640 427 -427 640 -640 480 -640 426 -500 375 -640 434 -480 640 -640 424 -640 480 -640 423 -640 427 -640 480 -612 612 -640 189 -478 640 -640 555 -640 478 -500 333 -500 375 -254 640 -480 640 -500 375 -429 640 -640 480 -640 360 -480 640 -612 612 -480 640 -640 638 -640 309 -640 480 -640 427 -612 612 -640 414 -640 427 -640 480 -500 332 -500 375 -500 489 -640 480 -480 640 -612 612 -640 425 -480 640 -612 612 -590 640 -640 426 -640 360 -640 480 -640 489 -640 425 -484 640 -640 427 -480 640 -640 480 -640 479 -500 299 -640 417 -640 373 -640 427 -612 612 -500 376 -640 427 -640 480 -640 415 -640 480 -480 640 -480 640 -640 480 -640 480 -640 569 -500 375 -640 480 -426 640 -640 426 -640 480 -640 480 -425 640 -640 640 -426 640 -640 480 -427 640 -428 640 -427 640 -640 425 -640 480 -324 500 -640 480 -640 428 -500 333 -640 426 -640 427 -640 480 -449 640 -640 480 -640 426 -480 640 -428 640 -424 640 -500 375 -640 427 -612 612 -640 480 -427 640 -640 480 -640 359 -640 478 -500 401 -640 480 -500 375 -640 480 -480 640 -480 640 -640 427 -640 480 -640 422 -640 484 -640 428 -640 478 -500 452 -640 366 -425 640 -640 427 -500 333 -640 427 -500 375 -640 426 -640 480 -640 427 -480 640 -500 375 -640 427 -640 426 -640 480 -640 427 -640 425 -640 480 -640 480 -640 426 -500 375 -500 400 -640 429 -640 465 -500 375 -640 480 -640 427 -375 500 -640 514 -640 445 -640 427 -640 480 -640 425 -500 400 -640 427 -640 427 -640 378 -640 481 -640 400 -640 480 -640 480 -640 426 -424 640 -640 360 -500 332 -640 384 -640 427 -500 374 -480 640 -640 480 -640 480 -427 640 -640 426 -375 500 -640 480 -640 427 -640 428 -500 375 -640 432 -480 640 -640 480 -480 640 -640 451 -640 480 -640 480 -615 640 -640 480 -640 480 -640 480 -480 640 -640 427 -640 427 -401 640 -640 480 -640 464 -500 375 -640 427 -640 427 -640 426 -640 480 -640 427 -636 640 -640 401 -640 428 -640 480 -500 333 -640 480 -500 333 -640 480 -564 640 -640 480 -480 640 -640 427 -500 375 -500 359 -640 439 -469 640 -640 360 -640 478 -640 480 -640 480 -640 430 -640 480 -640 480 -640 480 -640 420 -500 375 -426 640 -427 640 -333 500 -480 640 -640 384 -640 426 -640 480 -640 443 -640 631 -640 458 -640 480 -500 331 -480 640 -640 426 -519 640 -640 436 -401 640 -480 640 -640 485 -640 414 -640 427 -640 427 -640 426 -640 480 -640 480 -500 375 -640 325 -494 640 -480 640 -441 640 -640 480 -640 511 -640 428 -640 426 -586 640 -640 427 -640 427 -500 281 -640 480 -500 333 -640 428 -640 640 -640 425 -480 640 -500 333 -629 640 -426 640 -640 427 -544 408 -426 640 -640 427 -640 480 -375 500 -424 640 -428 640 -640 480 -431 640 -640 500 -640 480 -640 224 -374 500 -640 426 -500 343 -640 426 -640 480 -640 427 -480 640 -640 427 -480 640 -480 640 -640 480 -640 366 -444 640 -640 640 -640 480 -640 480 -423 640 -640 615 -640 480 -640 513 -427 640 -375 500 -640 429 -640 480 -500 375 -480 640 -500 371 -640 428 -500 333 -480 640 -612 612 -480 640 -427 640 -480 640 -640 427 -640 524 -640 480 -640 403 -640 429 -500 375 -640 480 -640 427 -640 414 -500 375 -640 480 -640 480 -640 480 -640 480 -400 600 -640 428 -427 640 -427 640 -427 640 -480 640 -500 375 -500 375 -375 500 -622 415 -480 640 -428 640 -640 366 -427 640 -480 640 -500 375 -640 480 -640 480 -500 375 -640 426 -640 425 -640 480 -640 480 -640 427 -640 480 -359 640 -427 640 -500 440 -427 640 -640 425 -427 640 -500 375 -640 480 -640 453 -500 375 -640 400 -640 427 -640 480 -480 640 -640 480 -640 435 -640 478 -480 640 -500 333 -640 480 -640 480 -640 480 -640 366 -640 480 -640 481 -640 427 -640 426 -640 480 -480 640 -500 333 -480 640 -640 480 -640 428 -640 218 -640 427 -500 333 -500 334 -640 427 -640 640 -480 640 -427 640 -640 481 -640 478 -640 426 -640 427 -640 425 -640 427 -333 500 -612 612 -640 480 -640 427 -640 491 -640 478 -640 360 -473 640 -612 612 -640 428 -640 427 -640 480 -640 426 -500 375 -500 375 -640 427 -640 480 -427 640 -640 480 -640 426 -350 500 -500 308 -640 608 -640 503 -640 480 -640 480 -500 375 -640 480 -640 480 -500 375 -416 640 -640 427 -612 612 -389 500 -480 640 -640 426 -640 424 -363 485 -640 549 -640 427 -500 337 -640 479 -640 426 -500 375 -640 427 -640 480 -640 426 -490 640 -640 427 -640 480 -640 427 -640 425 -465 640 -640 480 -500 334 -640 424 -640 426 -640 424 -640 479 -375 500 -640 427 -640 480 -428 640 -500 333 -640 480 -640 480 -640 480 -640 361 -640 425 -500 333 -640 480 -640 459 -640 403 -640 480 -640 480 -363 640 -500 374 -640 425 -640 427 -600 399 -640 427 -500 333 -640 469 -640 427 -640 424 -640 446 -640 427 -640 480 -640 480 -640 427 -640 389 -500 351 -640 425 -604 453 -640 427 -428 640 -500 375 -640 428 -500 375 -640 480 -640 421 -640 360 -401 640 -640 425 -640 426 -612 612 -640 480 -640 480 -375 500 -428 640 -640 426 -640 479 -640 427 -361 640 -427 640 -480 640 -640 480 -640 480 -640 459 -500 375 -640 426 -640 480 -426 640 -640 480 -640 480 -640 424 -640 480 -640 614 -640 480 -640 359 -640 427 -480 640 -640 480 -640 480 -640 427 -500 333 -375 500 -481 640 -640 480 -480 640 -500 375 -640 512 -640 480 -455 552 -640 427 -640 480 -640 427 -640 460 -640 480 -640 426 -640 301 -480 640 -478 640 -427 640 -640 441 -640 480 -612 612 -640 430 -640 480 -640 480 -640 480 -640 427 -640 426 -640 528 -640 320 -480 640 -640 564 -640 640 -640 480 -500 375 -431 640 -500 375 -428 640 -500 375 -354 500 -640 383 -480 640 -640 439 -640 480 -640 627 -640 427 -500 338 -480 640 -640 406 -640 480 -561 640 -640 480 -375 500 -640 480 -427 640 -640 480 -640 480 -640 401 -640 480 -640 435 -640 602 -640 480 -640 640 -640 480 -640 427 -500 489 -640 480 -640 424 -640 480 -640 457 -640 480 -640 480 -640 480 -500 375 -640 426 -640 478 -480 640 -427 640 -640 480 -640 480 -640 480 -640 378 -640 480 -640 480 -480 640 -427 640 -640 451 -640 631 -500 338 -640 480 -640 447 -500 333 -640 425 -640 426 -640 480 -428 640 -640 480 -640 479 -426 640 -640 427 -500 415 -438 640 -640 480 -640 468 -640 426 -640 480 -640 432 -640 425 -640 480 -428 640 -640 427 -640 426 -270 500 -640 480 -478 640 -640 467 -640 426 -500 372 -640 426 -480 640 -409 500 -640 480 -640 481 -640 480 -640 425 -640 427 -640 480 -640 480 -612 612 -493 640 -640 416 -640 480 -640 427 -640 427 -640 480 -427 640 -500 375 -640 426 -640 480 -640 480 -640 427 -480 640 -640 640 -640 425 -640 480 -640 480 -480 640 -640 427 -480 640 -480 640 -640 427 -415 640 -640 427 -640 427 -640 427 -640 480 -500 375 -640 425 -640 428 -480 640 -640 427 -640 424 -640 491 -640 424 -333 500 -640 480 -640 425 -640 427 -640 427 -500 375 -640 424 -640 425 -640 427 -640 640 -640 480 -500 375 -425 640 -640 480 -640 425 -500 305 -500 375 -640 480 -640 480 -320 240 -640 387 -640 480 -640 480 -640 480 -612 612 -640 480 -500 375 -272 500 -640 426 -640 512 -640 512 -640 480 -640 428 -480 640 -640 458 -640 360 -640 427 -640 480 -640 426 -640 427 -640 480 -640 427 -500 375 -500 332 -478 640 -640 298 -425 640 -481 640 -640 333 -640 480 -640 480 -640 244 -500 281 -640 376 -640 640 -640 480 -612 612 -640 426 -500 323 -508 640 -427 640 -480 640 -640 427 -640 427 -424 640 -500 334 -640 425 -640 476 -612 612 -433 640 -480 640 -640 480 -640 406 -568 640 -640 427 -346 500 -500 332 -500 333 -640 493 -473 640 -640 480 -640 513 -640 425 -640 427 -640 424 -480 640 -640 428 -640 426 -640 480 -640 427 -640 424 -640 428 -640 426 -640 480 -640 480 -640 427 -500 375 -639 640 -512 640 -612 612 -640 480 -640 480 -480 640 -429 640 -640 546 -640 480 -480 640 -640 424 -424 640 -332 500 -640 459 -640 480 -500 333 -640 425 -427 640 -640 427 -640 480 -640 427 -640 480 -640 480 -472 322 -640 424 -478 640 -640 431 -640 323 -640 427 -500 375 -480 640 -640 401 -480 640 -333 500 -640 480 -633 640 -427 640 -640 640 -640 480 -640 427 -500 411 -640 427 -500 353 -640 480 -640 480 -359 640 -640 427 -426 640 -482 640 -640 427 -427 640 -375 500 -500 375 -640 480 -427 640 -640 428 -640 481 -640 480 -640 427 -640 426 -500 375 -640 427 -428 640 -640 480 -640 480 -375 500 -640 427 -640 408 -500 400 -640 480 -640 449 -375 500 -453 640 -424 640 -640 427 -640 428 -640 480 -640 480 -640 480 -640 426 -640 425 -427 640 -640 459 -640 424 -612 612 -640 480 -640 427 -640 427 -640 427 -640 480 -640 427 -640 457 -640 480 -500 428 -429 640 -640 438 -640 427 -640 480 -426 640 -500 375 -640 384 -500 333 -500 281 -640 426 -640 431 -426 640 -500 375 -481 640 -640 480 -640 480 -640 480 -640 456 -426 640 -640 480 -640 396 -450 338 -495 640 -640 435 -500 408 -404 640 -640 427 -500 375 -476 640 -640 480 -640 427 -640 480 -640 480 -640 393 -640 480 -640 480 -640 480 -375 500 -495 533 -480 640 -480 640 -500 295 -480 640 -612 612 -640 478 -640 426 -612 612 -426 640 -640 480 -640 480 -640 427 -640 428 -640 486 -640 426 -640 481 -640 427 -640 426 -640 427 -640 428 -600 400 -640 409 -640 424 -640 426 -640 367 -640 480 -640 426 -612 612 -480 640 -640 480 -480 640 -640 480 -640 427 -640 427 -426 640 -640 427 -480 640 -640 426 -426 640 -640 427 -640 426 -500 375 -333 500 -612 612 -640 424 -640 480 -640 509 -640 427 -640 427 -500 239 -640 426 -640 427 -379 446 -640 427 -640 426 -640 478 -640 480 -427 640 -640 480 -627 640 -640 480 -500 375 -427 640 -640 478 -640 427 -612 612 -640 640 -500 356 -480 640 -640 427 -514 640 -640 458 -500 335 -640 480 -640 480 -640 516 -640 428 -640 427 -512 640 -333 500 -500 257 -640 360 -640 480 -640 480 -640 480 -375 500 -640 480 -427 640 -500 375 -640 427 -640 480 -480 640 -640 504 -480 640 -640 480 -427 640 -427 640 -640 480 -500 375 -500 333 -640 426 -640 257 -640 433 -500 333 -640 427 -640 360 -640 426 -640 427 -459 640 -640 296 -640 419 -360 640 -640 480 -480 640 -424 640 -375 500 -500 375 -428 640 -640 427 -640 428 -612 612 -480 640 -500 281 -640 349 -640 378 -640 480 -640 439 -427 640 -600 600 -480 640 -500 333 -427 640 -640 427 -640 427 -640 427 -640 453 -640 427 -640 427 -640 480 -640 427 -500 375 -640 480 -640 427 -640 425 -640 389 -640 480 -480 640 -640 480 -640 480 -640 480 -640 427 -640 516 -640 424 -640 480 -640 428 -480 640 -612 612 -640 477 -500 375 -480 640 -640 428 -480 640 -640 427 -375 500 -640 360 -640 480 -640 426 -640 427 -640 425 -640 428 -640 480 -640 426 -500 408 -640 428 -640 480 -425 640 -500 471 -480 640 -640 480 -480 640 -640 480 -640 480 -640 427 -478 640 -640 427 -640 513 -500 365 -640 508 -480 640 -640 480 -425 640 -640 480 -640 640 -640 425 -520 520 -640 424 -640 480 -640 483 -640 424 -480 640 -640 480 -612 612 -640 427 -640 427 -640 468 -640 427 -500 332 -640 480 -640 427 -640 480 -480 640 -640 480 -640 480 -500 422 -640 424 -448 299 -640 480 -480 640 -480 640 -375 500 -500 375 -640 480 -640 427 -640 427 -640 427 -500 332 -640 427 -640 428 -500 375 -640 427 -500 375 -640 478 -640 429 -375 500 -640 640 -427 640 -640 518 -640 428 -640 480 -480 640 -640 480 -480 640 -640 286 -640 466 -424 640 -640 480 -640 480 -424 640 -640 480 -500 332 -640 393 -640 427 -640 394 -640 471 -500 375 -500 390 -500 332 -640 640 -640 318 -640 427 -640 398 -480 640 -640 500 -425 640 -640 354 -640 480 -640 428 -640 478 -427 640 -500 492 -640 471 -640 427 -640 396 -640 427 -640 480 -612 612 -640 480 -500 375 -500 333 -640 427 -480 640 -640 426 -640 425 -640 427 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -480 640 -368 500 -375 500 -375 500 -640 428 -640 427 -640 427 -375 500 -640 480 -640 480 -640 590 -640 425 -482 640 -480 640 -640 424 -375 500 -640 360 -640 480 -480 640 -500 375 -520 640 -640 487 -425 640 -480 640 -640 463 -500 333 -500 375 -374 500 -482 500 -500 500 -640 441 -612 612 -640 480 -640 479 -640 323 -500 334 -526 640 -640 480 -427 640 -640 480 -640 427 -640 480 -640 424 -640 480 -640 444 -426 640 -640 574 -640 293 -640 480 -640 639 -640 427 -500 375 -640 427 -480 640 -640 360 -640 424 -640 480 -640 480 -640 427 -500 375 -480 640 -640 413 -640 428 -640 480 -640 428 -480 640 -640 480 -640 480 -640 428 -640 480 -427 640 -640 427 -480 640 -427 640 -478 640 -427 640 -612 612 -428 640 -640 480 -500 375 -480 640 -640 480 -640 480 -480 640 -640 480 -640 480 -630 379 -425 640 -640 439 -640 480 -480 640 -640 401 -500 500 -640 427 -428 640 -333 500 -640 463 -640 425 -640 433 -640 480 -640 480 -427 640 -428 640 -640 428 -425 640 -640 480 -423 640 -640 426 -500 333 -640 427 -500 375 -640 457 -480 640 -640 427 -426 640 -513 640 -640 426 -500 375 -640 397 -640 360 -426 640 -640 360 -640 427 -640 426 -640 422 -427 640 -640 480 -480 640 -640 478 -640 480 -640 426 -428 640 -640 480 -640 426 -477 640 -640 480 -640 427 -640 233 -640 426 -375 500 -500 333 -640 480 -640 426 -500 334 -500 375 -400 302 -500 332 -375 500 -640 284 -640 433 -500 332 -640 362 -640 480 -640 427 -640 480 -500 375 -640 480 -612 612 -426 640 -640 320 -640 424 -427 640 -640 480 -640 360 -427 640 -426 640 -640 426 -640 424 -640 427 -480 640 -640 480 -550 376 -640 480 -640 427 -640 428 -640 639 -640 640 -640 426 -480 640 -427 640 -640 428 -640 428 -640 480 -427 640 -480 640 -363 544 -640 480 -267 188 -500 375 -500 331 -500 334 -640 480 -640 428 -500 362 -476 640 -640 430 -640 480 -640 480 -640 433 -640 343 -406 500 -640 426 -500 375 -640 426 -640 480 -640 449 -320 240 -640 427 -500 375 -640 324 -640 428 -640 480 -500 452 -427 640 -500 500 -500 333 -640 480 -640 233 -640 427 -640 429 -417 640 -480 640 -450 381 -640 427 -640 421 -500 333 -640 640 -532 640 -456 640 -640 360 -640 480 -640 425 -640 480 -640 480 -640 606 -640 426 -640 426 -640 429 -640 428 -640 480 -480 640 -427 640 -640 480 -337 640 -640 426 -640 470 -640 427 -431 640 -640 640 -640 467 -470 640 -640 640 -480 640 -410 339 -427 640 -640 480 -640 447 -640 428 -480 640 -640 174 -612 612 -640 480 -640 360 -612 612 -640 428 -480 640 -375 500 -640 480 -640 424 -500 375 -600 400 -640 480 -640 426 -480 640 -640 281 -640 480 -500 375 -640 480 -640 400 -640 425 -640 480 -640 427 -640 429 -427 640 -640 446 -640 359 -612 612 -640 426 -427 640 -640 457 -640 427 -480 640 -426 640 -640 480 -576 396 -640 480 -640 427 -500 332 -640 393 -500 370 -640 426 -640 480 -640 427 -640 458 -640 480 -426 640 -500 314 -500 400 -640 426 -640 480 -640 427 -640 480 -600 410 -480 640 -640 480 -640 480 -640 426 -640 480 -500 375 -640 526 -640 427 -425 640 -640 482 -640 448 -640 480 -640 427 -640 480 -640 427 -640 426 -640 480 -500 357 -640 480 -640 360 -500 375 -640 480 -640 480 -640 364 -427 640 -640 427 -334 500 -640 427 -640 480 -500 375 -480 640 -478 640 -640 427 -640 480 -500 334 -640 480 -480 640 -640 425 -640 480 -640 425 -640 438 -640 425 -640 427 -640 480 -640 480 -375 500 -640 510 -450 600 -640 427 -375 500 -640 480 -480 640 -640 427 -640 480 -640 480 -248 640 -480 640 -640 427 -640 431 -640 480 -640 427 -416 640 -640 452 -640 640 -640 427 -640 480 -640 480 -478 640 -640 480 -372 500 -640 428 -640 427 -640 480 -640 480 -640 478 -640 640 -612 612 -500 375 -640 480 -640 478 -640 640 -640 473 -480 640 -640 427 -500 375 -640 480 -640 427 -640 640 -640 471 -640 480 -640 480 -480 640 -640 480 -640 486 -640 480 -640 391 -500 375 -426 640 -500 378 -640 428 -640 480 -640 480 -640 427 -480 640 -640 480 -640 456 -640 428 -500 333 -640 557 -640 457 -426 640 -640 480 -640 427 -640 476 -640 640 -640 491 -500 384 -640 403 -640 640 -640 439 -428 640 -640 480 -361 640 -612 612 -640 480 -481 640 -640 480 -565 640 -640 360 -640 426 -640 428 -640 429 -403 640 -640 480 -640 480 -640 427 -640 428 -640 425 -640 380 -640 426 -480 640 -640 480 -640 426 -640 480 -640 429 -548 640 -640 431 -500 375 -500 375 -640 474 -500 333 -480 640 -640 599 -480 640 -427 640 -640 428 -500 400 -500 375 -426 640 -427 640 -640 331 -480 640 -640 425 -640 480 -640 427 -500 333 -640 286 -500 333 -640 428 -375 500 -640 480 -417 640 -640 427 -640 480 -427 640 -640 480 -427 640 -640 426 -640 490 -640 427 -640 480 -336 448 -640 361 -640 360 -418 640 -480 640 -640 426 -500 375 -640 426 -305 229 -600 640 -426 640 -640 480 -640 480 -640 414 -640 427 -500 375 -500 446 -314 500 -640 480 -640 480 -640 480 -640 622 -480 640 -418 640 -428 640 -640 427 -500 352 -640 480 -640 480 -640 480 -640 359 -640 427 -640 566 -640 428 -640 426 -640 426 -640 425 -427 640 -612 612 -640 566 -640 427 -640 480 -640 480 -640 428 -480 640 -640 480 -640 429 -640 480 -429 640 -612 612 -640 424 -640 371 -495 640 -427 640 -640 640 -640 282 -640 427 -640 426 -500 335 -640 480 -480 640 -480 640 -500 376 -640 480 -425 640 -640 427 -500 333 -640 640 -332 500 -640 427 -640 527 -640 480 -640 426 -640 480 -640 419 -480 640 -640 238 -480 640 -640 480 -640 480 -640 480 -640 425 -640 427 -500 375 -425 640 -640 480 -478 640 -640 488 -640 480 -640 461 -374 500 -640 427 -640 427 -500 333 -612 612 -640 428 -426 640 -640 429 -640 427 -361 640 -428 640 -640 427 -640 427 -640 436 -640 293 -640 418 -640 480 -640 428 -640 480 -612 612 -612 612 -640 480 -426 640 -640 427 -500 375 -480 640 -640 640 -640 480 -427 640 -640 429 -640 427 -640 474 -427 640 -640 427 -640 426 -427 640 -414 640 -478 640 -640 480 -480 640 -640 427 -443 640 -640 480 -640 426 -500 334 -640 427 -640 480 -574 640 -480 640 -512 640 -640 480 -640 480 -640 464 -500 375 -640 428 -375 500 -640 480 -375 500 -640 480 -640 480 -640 434 -480 640 -612 612 -640 480 -640 426 -366 500 -480 640 -500 375 -640 425 -500 333 -640 479 -640 428 -640 480 -640 480 -640 360 -640 480 -640 427 -480 640 -640 480 -640 428 -640 427 -640 457 -481 640 -640 492 -480 640 -500 333 -597 455 -480 640 -354 500 -493 640 -640 480 -640 359 -640 480 -500 375 -640 480 -640 427 -500 375 -428 640 -640 360 -480 640 -640 427 -480 640 -640 480 -640 413 -427 640 -640 414 -640 384 -426 640 -640 389 -425 640 -640 427 -431 640 -640 427 -427 640 -640 427 -640 409 -426 640 -530 640 -640 390 -640 425 -640 427 -640 478 -415 324 -640 434 -427 640 -480 640 -426 640 -536 640 -640 427 -640 395 -640 427 -374 500 -640 426 -640 427 -176 144 -640 640 -640 354 -640 480 -500 343 -427 640 -640 426 -612 612 -640 425 -640 480 -375 500 -427 640 -640 480 -640 479 -640 360 -640 425 -640 425 -500 375 -640 480 -640 426 -640 427 -640 426 -480 640 -480 640 -640 480 -480 640 -640 428 -612 612 -425 640 -640 427 -640 359 -640 480 -640 431 -500 311 -640 480 -640 405 -428 640 -486 640 -640 480 -640 426 -375 500 -640 480 -640 427 -640 426 -427 640 -640 264 -500 375 -640 427 -640 425 -500 332 -640 427 -640 449 -640 399 -640 480 -640 480 -500 322 -639 640 -640 427 -640 480 -640 427 -480 640 -640 480 -640 426 -640 480 -640 360 -640 512 -640 424 -480 640 -640 425 -640 431 -480 640 -500 375 -500 334 -571 640 -480 640 -640 480 -612 612 -427 640 -359 640 -500 336 -640 427 -334 500 -500 375 -360 270 -500 375 -640 427 -640 457 -640 480 -480 640 -500 375 -612 612 -427 640 -388 640 -500 333 -640 480 -500 375 -640 438 -480 640 -480 640 -640 427 -640 480 -640 480 -480 640 -500 333 -640 479 -640 429 -500 375 -640 412 -640 480 -640 421 -640 480 -640 480 -480 640 -640 480 -640 480 -640 359 -640 366 -640 480 -427 640 -640 427 -640 426 -640 480 -480 640 -640 427 -640 378 -640 480 -640 480 -640 480 -640 428 -640 480 -480 640 -434 640 -640 413 -640 480 -640 480 -373 640 -640 428 -640 433 -500 375 -427 640 -640 480 -480 640 -640 503 -640 427 -640 480 -500 333 -640 429 -640 482 -460 640 -512 640 -612 612 -640 426 -640 480 -480 640 -640 278 -640 524 -640 479 -640 430 -640 480 -640 439 -375 500 -426 640 -640 428 -640 427 -480 640 -640 480 -640 480 -640 426 -640 512 -640 427 -640 480 -640 427 -640 424 -640 427 -640 427 -500 375 -640 480 -545 640 -637 640 -427 640 -427 640 -640 480 -426 640 -640 480 -408 640 -500 375 -640 480 -640 480 -480 640 -640 428 -640 640 -428 640 -640 480 -640 427 -640 480 -640 427 -640 483 -478 640 -640 480 -500 375 -612 612 -640 424 -436 640 -640 428 -640 480 -640 427 -612 612 -480 640 -383 640 -640 427 -500 334 -640 449 -640 427 -640 480 -640 427 -500 375 -500 375 -640 480 -640 478 -640 480 -427 640 -640 428 -640 480 -425 640 -640 480 -640 425 -612 612 -480 640 -640 360 -640 403 -427 640 -640 427 -612 612 -640 425 -640 480 -500 418 -640 480 -640 480 -640 351 -640 480 -640 480 -480 640 -500 375 -375 500 -640 480 -469 640 -640 425 -640 480 -640 623 -640 480 -640 427 -640 512 -480 640 -640 445 -359 239 -640 523 -640 427 -334 500 -640 425 -500 375 -640 427 -333 500 -640 359 -478 640 -500 375 -640 528 -640 426 -500 333 -640 480 -640 575 -480 640 -640 429 -640 580 -640 640 -640 480 -640 427 -640 480 -640 475 -640 480 -500 375 -640 480 -480 640 -640 426 -640 424 -640 480 -427 640 -500 362 -478 640 -480 640 -640 480 -640 480 -478 640 -640 414 -640 427 -500 343 -500 297 -640 428 -500 348 -640 480 -220 240 -640 425 -423 640 -640 425 -640 408 -640 411 -640 427 -640 437 -640 360 -640 385 -640 464 -640 480 -524 640 -640 480 -640 427 -500 333 -640 427 -640 431 -640 480 -640 427 -640 480 -640 480 -427 640 -640 438 -640 427 -640 480 -640 480 -480 640 -640 469 -640 428 -640 427 -640 428 -640 428 -426 639 -500 333 -640 480 -480 336 -334 500 -454 640 -500 375 -506 640 -640 640 -640 616 -640 480 -427 640 -640 468 -640 428 -640 423 -640 427 -427 640 -428 640 -400 500 -640 480 -640 427 -640 384 -640 348 -640 619 -357 500 -640 480 -640 428 -640 480 -500 405 -640 427 -441 500 -480 640 -640 480 -488 640 -500 375 -640 427 -432 324 -640 480 -640 503 -499 640 -640 480 -640 424 -612 612 -640 425 -640 427 -427 640 -640 435 -375 500 -495 640 -480 640 -424 640 -640 480 -600 400 -640 428 -640 427 -640 480 -640 480 -640 427 -417 640 -640 388 -640 425 -375 500 -481 640 -640 480 -640 427 -427 640 -500 332 -427 640 -640 504 -640 640 -500 375 -640 480 -640 427 -640 414 -480 640 -640 427 -640 480 -612 612 -640 487 -640 427 -640 429 -640 427 -400 640 -640 480 -640 480 -500 375 -478 640 -640 360 -640 418 -412 456 -640 425 -640 480 -640 427 -640 594 -640 409 -480 640 -640 428 -640 428 -640 480 -612 612 -640 427 -640 453 -640 480 -640 403 -500 400 -640 427 -640 480 -640 480 -640 480 -480 640 -500 375 -427 640 -500 375 -500 380 -612 612 -640 427 -640 400 -427 640 -640 426 -640 361 -640 433 -500 492 -640 427 -640 428 -640 427 -640 427 -640 424 -640 480 -640 457 -500 400 -640 425 -500 333 -640 628 -427 640 -640 427 -640 480 -640 427 -500 375 -640 427 -480 640 -640 426 -448 640 -640 480 -480 640 -640 480 -480 640 -640 480 -329 640 -480 640 -640 513 -640 457 -480 640 -640 360 -640 489 -640 466 -500 375 -640 480 -640 425 -640 427 -640 480 -640 480 -640 427 -427 640 -445 500 -640 549 -640 436 -640 554 -640 480 -480 640 -427 640 -389 640 -640 426 -428 640 -640 427 -640 454 -480 640 -640 640 -480 640 -640 480 -640 583 -640 425 -640 396 -500 375 -500 170 -640 427 -640 424 -640 428 -480 640 -640 480 -500 375 -500 313 -640 426 -640 457 -640 424 -640 427 -480 640 -640 427 -240 180 -640 480 -640 480 -640 427 -640 427 -375 500 -640 480 -329 500 -500 375 -640 478 -640 361 -480 640 -640 427 -640 480 -640 480 -500 375 -640 428 -640 427 -640 487 -640 480 -480 640 -640 427 -640 427 -640 480 -640 480 -500 333 -640 480 -425 640 -640 480 -640 467 -640 427 -640 427 -640 425 -640 480 -640 480 -640 426 -640 425 -480 640 -375 500 -640 373 -640 425 -500 375 -640 480 -500 423 -480 640 -640 426 -612 612 -640 480 -612 612 -375 500 -640 427 -640 640 -640 480 -500 375 -500 375 -375 500 -500 375 -640 454 -640 360 -478 640 -640 429 -575 640 -640 425 -640 424 -640 428 -562 640 -640 379 -240 320 -640 445 -422 640 -512 640 -640 426 -640 480 -429 640 -640 427 -480 640 -640 427 -640 425 -480 640 -480 640 -640 360 -640 427 -640 427 -640 293 -427 640 -640 427 -500 375 -640 426 -640 480 -455 500 -640 428 -640 301 -640 388 -640 427 -425 640 -500 375 -640 480 -640 480 -640 479 -480 640 -427 640 -640 448 -640 482 -453 640 -640 480 -471 640 -480 640 -640 480 -612 612 -640 426 -480 640 -480 640 -640 480 -640 429 -640 480 -640 393 -480 640 -640 429 -480 640 -427 640 -596 640 -640 428 -640 427 -427 640 -640 426 -333 500 -640 425 -640 428 -640 427 -640 480 -640 427 -640 480 -612 612 -640 480 -426 640 -426 640 -640 457 -500 352 -640 427 -612 612 -500 375 -640 428 -480 640 -640 360 -640 424 -640 427 -640 257 -480 640 -640 425 -640 427 -640 426 -500 333 -480 640 -640 480 -640 598 -640 480 -640 361 -480 640 -500 334 -640 453 -640 480 -640 428 -500 375 -640 243 -640 480 -640 427 -640 429 -500 375 -640 425 -640 427 -480 640 -640 428 -640 484 -640 480 -640 480 -640 480 -640 480 -427 640 -640 259 -493 640 -640 443 -640 427 -640 428 -640 480 -500 320 -640 480 -640 427 -500 243 -640 427 -640 427 -640 480 -640 428 -640 427 -500 375 -478 640 -480 640 -640 427 -640 427 -640 427 -427 640 -640 426 -640 480 -640 426 -640 480 -500 333 -500 375 -628 640 -485 640 -427 640 -451 640 -640 427 -612 612 -500 333 -631 640 -640 457 -480 640 -640 427 -640 427 -640 426 -500 400 -625 417 -375 500 -640 480 -480 640 -640 426 -640 430 -640 425 -640 480 -640 413 -640 512 -500 375 -478 640 -640 425 -640 469 -640 427 -640 480 -480 640 -480 640 -639 640 -640 427 -480 640 -375 500 -640 534 -640 495 -500 325 -640 427 -480 640 -500 375 -640 640 -640 427 -640 429 -640 389 -444 265 -640 480 -612 612 -640 480 -289 640 -480 640 -640 480 -640 435 -640 480 -640 530 -640 424 -640 424 -359 640 -640 427 -427 640 -426 640 -640 483 -640 427 -640 480 -640 429 -640 424 -500 375 -480 640 -640 427 -640 480 -640 480 -480 640 -427 640 -640 480 -640 426 -640 429 -640 480 -640 480 -640 428 -640 424 -640 480 -500 375 -500 375 -500 334 -473 640 -640 439 -640 426 -640 480 -333 500 -640 480 -555 640 -500 375 -640 427 -375 500 -478 500 -640 397 -640 480 -640 425 -640 427 -640 640 -640 425 -640 480 -425 640 -640 480 -640 480 -612 612 -480 640 -640 480 -640 428 -640 480 -640 427 -640 419 -439 640 -640 523 -640 370 -640 480 -435 640 -640 427 -375 500 -640 640 -480 640 -640 425 -375 500 -640 480 -640 480 -640 480 -480 640 -500 375 -640 480 -500 400 -640 480 -484 640 -640 423 -640 480 -640 427 -640 480 -640 481 -480 640 -427 640 -500 375 -640 426 -427 640 -612 612 -640 480 -640 640 -480 640 -480 640 -640 425 -500 392 -640 480 -640 427 -640 360 -640 428 -640 453 -480 640 -612 612 -640 480 -500 332 -640 366 -480 640 -480 640 -500 375 -640 480 -640 427 -480 640 -640 480 -480 640 -500 500 -640 427 -640 640 -640 547 -640 480 -640 480 -640 480 -640 426 -640 640 -640 428 -640 428 -640 499 -640 425 -640 480 -425 640 -500 356 -500 386 -640 351 -640 551 -640 423 -640 392 -640 427 -640 427 -640 425 -419 640 -640 426 -375 500 -612 612 -427 640 -640 426 -426 640 -427 640 -640 414 -640 426 -640 430 -505 640 -640 480 -640 425 -640 522 -640 427 -500 375 -640 480 -480 640 -640 424 -640 577 -640 434 -640 427 -640 428 -640 480 -612 612 -640 423 -500 333 -640 426 -427 640 -500 375 -640 436 -640 480 -640 487 -640 427 -480 640 -640 427 -640 480 -500 375 -640 427 -640 426 -612 612 -500 429 -426 640 -640 480 -640 480 -640 480 -640 428 -640 478 -640 427 -640 478 -428 640 -414 640 -600 402 -640 434 -640 480 -640 480 -640 370 -640 483 -640 480 -640 480 -640 427 -506 640 -500 375 -512 640 -426 640 -640 434 -640 281 -640 480 -640 360 -500 240 -640 386 -453 640 -640 425 -640 427 -359 640 -293 409 -500 375 -427 640 -500 375 -427 640 -424 640 -500 332 -640 360 -640 480 -640 427 -640 443 -640 480 -500 375 -427 640 -640 480 -513 640 -640 480 -640 429 -375 500 -595 640 -500 281 -500 375 -431 640 -480 640 -640 480 -640 533 -427 640 -419 640 -640 426 -640 480 -640 513 -640 440 -640 427 -640 428 -640 480 -500 333 -640 424 -480 640 -612 612 -500 375 -640 480 -640 425 -640 640 -640 640 -342 500 -640 424 -640 426 -640 428 -640 428 -480 640 -640 428 -500 375 -640 640 -640 480 -427 640 -640 426 -375 500 -426 640 -640 480 -640 640 -640 468 -480 640 -640 480 -640 480 -500 375 -640 480 -481 640 -640 480 -640 427 -640 427 -640 640 -640 428 -640 601 -640 443 -500 333 -427 640 -640 480 -612 612 -640 594 -375 500 -427 640 -640 478 -640 480 -640 427 -640 480 -640 428 -428 640 -640 457 -640 480 -375 500 -640 427 -428 640 -640 423 -475 435 -640 425 -640 322 -427 640 -529 640 -478 640 -612 612 -428 640 -640 480 -640 480 -640 480 -640 480 -500 375 -333 500 -480 640 -640 478 -240 320 -640 427 -640 427 -426 640 -453 640 -640 480 -375 500 -640 480 -640 480 -495 640 -427 640 -640 427 -500 375 -640 569 -640 427 -640 426 -640 425 -428 640 -640 427 -428 640 -640 360 -640 427 -612 612 -480 640 -500 354 -640 428 -640 426 -500 488 -640 480 -640 480 -640 480 -480 640 -640 360 -640 480 -500 375 -640 480 -640 424 -640 524 -640 480 -427 640 -640 427 -640 424 -296 640 -640 480 -500 375 -640 425 -500 373 -640 427 -338 640 -432 373 -612 612 -640 446 -640 331 -640 426 -640 480 -640 487 -506 640 -640 480 -640 425 -640 427 -640 497 -427 640 -640 476 -640 426 -640 480 -640 426 -640 426 -640 428 -640 492 -640 480 -480 640 -426 640 -480 640 -640 428 -640 478 -529 640 -640 480 -640 428 -640 480 -640 480 -640 428 -427 640 -640 619 -640 426 -480 640 -640 480 -640 396 -640 424 -640 480 -640 427 -640 427 -640 427 -640 426 -640 426 -478 640 -500 375 -640 480 -640 427 -640 391 -480 640 -640 480 -640 427 -443 640 -612 612 -640 529 -640 480 -640 480 -612 612 -640 480 -640 480 -640 308 -428 640 -640 427 -640 480 -640 480 -426 640 -640 455 -478 640 -375 500 -426 640 -427 640 -640 360 -640 480 -640 425 -640 480 -640 423 -640 427 -640 427 -320 240 -480 640 -640 423 -426 640 -640 520 -323 500 -480 640 -640 426 -612 612 -500 374 -640 427 -640 427 -640 360 -640 425 -640 480 -640 425 -640 426 -640 480 -500 375 -640 484 -426 640 -500 375 -640 480 -640 427 -640 430 -640 577 -428 640 -640 480 -425 640 -640 480 -640 428 -427 640 -640 448 -640 414 -640 480 -612 612 -518 640 -640 640 -640 481 -640 350 -640 480 -640 494 -424 640 -500 384 -424 640 -640 480 -500 216 -640 480 -500 375 -640 476 -640 480 -640 428 -640 480 -500 333 -427 640 -270 360 -640 480 -640 339 -640 426 -480 640 -612 612 -500 375 -500 375 -640 636 -640 480 -640 480 -480 640 -640 351 -640 480 -640 427 -640 480 -640 426 -480 640 -383 640 -640 480 -612 612 -640 428 -640 426 -640 511 -640 480 -640 480 -640 480 -427 640 -481 640 -424 640 -428 640 -640 476 -640 480 -375 500 -640 480 -640 459 -458 640 -640 398 -500 375 -478 640 -500 375 -500 500 -640 439 -640 426 -640 480 -640 427 -500 333 -640 366 -640 480 -640 427 -425 640 -640 640 -640 441 -640 427 -612 612 -566 640 -640 479 -640 427 -612 612 -493 640 -480 640 -500 499 -640 543 -640 427 -640 480 -640 427 -640 426 -335 500 -640 425 -640 420 -427 640 -612 612 -640 425 -640 428 -640 427 -501 640 -427 640 -640 480 -640 428 -640 427 -640 429 -427 640 -500 334 -500 332 -640 480 -640 426 -640 512 -640 491 -640 480 -640 401 -640 480 -640 428 -640 480 -424 640 -640 425 -640 426 -427 640 -640 480 -480 640 -640 640 -428 640 -640 429 -375 500 -640 446 -640 480 -427 640 -640 503 -640 345 -612 612 -640 426 -480 640 -640 374 -640 480 -480 640 -640 425 -640 480 -408 640 -640 427 -640 480 -640 433 -427 640 -564 640 -500 375 -500 333 -640 360 -640 639 -640 480 -500 375 -640 426 -640 425 -640 437 -640 427 -640 480 -640 480 -640 480 -500 375 -640 483 -640 424 -640 436 -500 375 -428 640 -500 375 -480 640 -427 640 -424 640 -640 360 -640 480 -480 640 -480 640 -640 480 -640 285 -500 375 -640 366 -640 429 -640 481 -640 480 -427 640 -640 480 -640 427 -640 424 -640 424 -640 427 -480 640 -604 453 -473 640 -640 480 -500 285 -480 640 -640 418 -640 425 -640 480 -529 640 -534 640 -640 339 -500 375 -640 416 -500 375 -640 480 -640 480 -640 425 -640 480 -640 480 -640 457 -640 424 -500 375 -480 640 -640 427 -500 333 -640 480 -640 480 -640 426 -640 457 -640 428 -640 424 -640 427 -640 421 -500 375 -612 612 -640 427 -640 427 -375 500 -640 435 -640 366 -495 640 -612 612 -512 640 -640 427 -500 375 -640 428 -640 480 -640 479 -500 375 -640 360 -334 500 -500 333 -640 471 -612 612 -640 425 -429 640 -427 640 -640 640 -427 640 -640 427 -640 428 -480 640 -640 428 -640 427 -640 316 -457 640 -320 240 -500 375 -612 612 -640 427 -500 393 -640 480 -640 480 -640 427 -640 480 -640 640 -640 441 -484 500 -640 474 -640 427 -640 427 -640 428 -640 458 -640 360 -468 640 -427 640 -640 425 -640 480 -500 333 -640 427 -640 427 -480 640 -640 480 -640 428 -640 428 -640 428 -640 480 -640 286 -480 640 -640 492 -640 480 -640 480 -640 425 -640 427 -270 360 -457 480 -640 480 -640 480 -500 375 -640 430 -640 480 -640 480 -500 333 -640 426 -500 334 -640 428 -640 427 -589 640 -640 426 -640 299 -427 640 -640 387 -640 427 -426 640 -640 427 -640 480 -640 426 -640 480 -640 406 -511 640 -640 448 -428 640 -500 377 -640 426 -480 640 -375 500 -640 427 -640 427 -640 480 -640 480 -640 427 -640 480 -500 513 -480 640 -427 640 -640 359 -640 395 -480 640 -426 640 -640 427 -359 640 -640 478 -640 406 -640 429 -640 480 -640 426 -640 427 -521 640 -400 400 -640 428 -480 640 -640 480 -640 512 -426 640 -478 640 -433 640 -429 640 -500 375 -640 426 -640 422 -640 480 -400 300 -640 426 -500 500 -640 359 -640 427 -640 478 -640 480 -640 427 -640 427 -500 375 -640 427 -500 375 -500 375 -640 358 -458 640 -480 640 -640 426 -640 480 -640 426 -401 640 -480 640 -640 480 -640 480 -500 375 -640 424 -640 480 -640 520 -640 360 -500 375 -640 427 -426 640 -640 427 -640 281 -500 375 -428 640 -640 426 -640 427 -640 480 -640 426 -640 525 -640 559 -640 458 -640 480 -480 640 -640 535 -640 480 -640 480 -640 493 -640 426 -640 427 -480 640 -375 500 -640 480 -640 480 -640 427 -480 640 -640 576 -640 425 -640 480 -427 640 -640 360 -640 433 -640 478 -426 640 -640 433 -640 406 -640 480 -640 427 -640 480 -640 480 -640 427 -500 375 -323 500 -640 427 -640 472 -375 500 -500 343 -640 483 -640 384 -424 640 -640 425 -424 640 -455 190 -640 427 -500 332 -480 640 -427 640 -640 424 -640 427 -640 480 -334 500 -427 640 -427 640 -426 640 -640 478 -640 425 -640 360 -640 427 -640 640 -640 360 -640 427 -640 427 -375 500 -640 471 -480 640 -640 275 -640 480 -640 480 -640 492 -640 376 -640 480 -640 426 -427 640 -640 480 -640 432 -640 469 -640 480 -640 427 -427 640 -375 500 -640 640 -640 428 -375 500 -596 640 -500 375 -500 330 -640 427 -640 480 -640 400 -480 640 -640 480 -640 480 -640 427 -640 480 -640 480 -337 500 -426 640 -640 425 -640 426 -478 640 -401 640 -640 427 -640 427 -480 640 -640 640 -480 640 -640 426 -640 480 -640 466 -480 640 -640 427 -383 640 -640 480 -640 640 -480 640 -640 480 -500 287 -500 375 -640 480 -640 427 -500 375 -640 478 -640 640 -640 416 -640 480 -640 427 -640 426 -324 500 -640 426 -640 428 -640 427 -640 480 -500 375 -640 480 -640 488 -640 335 -640 480 -612 612 -640 480 -640 314 -640 427 -424 640 -500 375 -640 397 -640 480 -500 375 -480 640 -500 375 -640 427 -640 480 -480 640 -500 263 -500 375 -500 375 -640 425 -640 480 -640 427 -375 500 -480 640 -500 333 -383 640 -640 391 -500 458 -640 427 -640 426 -480 640 -480 640 -640 480 -640 446 -500 375 -500 329 -640 480 -640 480 -612 612 -480 640 -431 640 -640 426 -480 640 -500 375 -640 480 -640 480 -640 426 -500 375 -640 480 -640 427 -500 375 -426 640 -640 480 -640 429 -500 375 -500 375 -640 480 -427 640 -480 640 -480 640 -640 481 -640 480 -500 375 -640 480 -332 500 -500 332 -500 500 -640 427 -640 480 -640 480 -333 500 -640 431 -640 424 -500 393 -640 480 -640 427 -640 480 -500 249 -640 512 -640 480 -640 425 -640 400 -640 427 -640 480 -640 480 -640 480 -640 427 -640 428 -427 640 -640 214 -640 640 -640 480 -500 333 -640 480 -640 439 -640 427 -480 640 -640 480 -640 424 -640 424 -640 480 -640 427 -480 640 -640 431 -640 425 -640 414 -480 640 -640 427 -640 428 -640 427 -640 426 -427 640 -480 640 -640 514 -375 500 -333 500 -640 457 -640 501 -640 427 -333 500 -640 360 -640 480 -425 640 -500 319 -640 361 -640 389 -640 325 -640 480 -500 344 -500 333 -397 640 -640 480 -480 640 -333 500 -640 326 -640 428 -640 477 -480 640 -640 426 -320 240 -640 426 -375 500 -640 400 -640 480 -640 338 -612 612 -640 427 -640 480 -640 640 -640 422 -640 428 -640 426 -640 640 -640 389 -640 425 -640 480 -640 480 -640 346 -480 640 -500 333 -640 428 -545 640 -400 500 -640 427 -640 480 -640 326 -480 640 -640 480 -640 425 -640 427 -640 427 -640 428 -333 500 -512 640 -409 640 -640 426 -640 425 -332 500 -640 480 -640 480 -640 361 -640 426 -640 478 -427 640 -360 270 -640 428 -478 640 -480 640 -640 427 -640 480 -480 640 -500 400 -410 555 -640 480 -333 500 -640 427 -640 480 -500 375 -640 480 -640 480 -428 640 -640 376 -640 480 -640 480 -479 640 -500 333 -640 480 -640 480 -428 640 -640 480 -640 478 -500 333 -640 480 -640 360 -640 426 -410 500 -500 375 -640 479 -480 640 -612 612 -640 425 -640 404 -612 612 -374 640 -500 375 -480 640 -427 640 -500 444 -426 640 -428 640 -640 427 -640 425 -640 479 -500 334 -500 375 -640 480 -640 359 -640 427 -480 640 -500 333 -425 640 -640 439 -640 480 -640 483 -480 640 -640 425 -640 481 -478 640 -427 640 -640 480 -500 333 -500 375 -640 640 -425 640 -500 375 -640 427 -500 333 -640 480 -640 426 -640 480 -640 640 -499 640 -480 640 -640 480 -480 640 -640 480 -640 427 -640 428 -640 548 -640 640 -500 375 -640 480 -640 426 -640 427 -500 169 -640 360 -640 480 -640 457 -480 640 -640 582 -640 480 -500 281 -640 425 -500 375 -640 480 -640 480 -640 480 -640 480 -640 480 -640 360 -333 500 -640 480 -457 640 -640 427 -640 407 -640 480 -640 480 -500 375 -500 329 -369 500 -640 480 -640 427 -426 640 -640 496 -640 427 -640 480 -475 405 -640 629 -640 426 -500 375 -640 427 -640 480 -640 335 -640 428 -640 512 -640 425 -612 612 -640 480 -640 480 -500 409 -640 412 -612 612 -640 427 -433 640 -640 427 -640 480 -640 474 -640 581 -500 482 -427 640 -640 427 -640 428 -379 500 -640 480 -482 500 -640 480 -640 480 -640 427 -500 323 -500 375 -426 640 -428 640 -640 480 -640 360 -640 427 -640 480 -640 480 -500 333 -640 640 -640 427 -640 480 -480 640 -640 427 -640 640 -640 417 -640 428 -640 429 -500 375 -500 375 -500 236 -428 640 -640 427 -500 375 -480 640 -640 427 -640 480 -640 480 -640 423 -640 427 -640 480 -640 424 -500 375 -426 640 -640 258 -640 516 -640 480 -640 480 -640 427 -640 480 -640 428 -500 375 -640 480 -640 480 -612 612 -640 426 -640 427 -640 286 -640 359 -500 375 -640 486 -480 640 -640 480 -640 402 -640 480 -427 640 -640 480 -640 486 -612 612 -640 480 -500 281 -333 500 -640 426 -640 480 -393 480 -333 500 -500 375 -640 480 -640 426 -640 411 -640 425 -640 426 -640 480 -640 480 -640 427 -400 500 -500 375 -640 429 -415 640 -640 480 -640 512 -640 425 -500 333 -500 263 -640 427 -480 640 -500 400 -640 611 -427 640 -640 480 -426 640 -375 500 -603 640 -428 640 -640 494 -640 480 -640 320 -640 480 -640 430 -500 333 -640 439 -640 480 -500 374 -640 426 -640 480 -500 250 -640 421 -640 480 -640 426 -480 640 -480 640 -640 455 -500 375 -640 640 -640 427 -375 500 -410 640 -334 500 -640 427 -640 480 -640 360 -480 640 -640 480 -480 640 -640 427 -640 480 -640 426 -500 375 -640 427 -640 426 -640 427 -459 258 -482 640 -640 480 -500 375 -640 480 -640 480 -427 640 -500 375 -640 360 -449 640 -480 640 -640 427 -640 428 -640 480 -640 480 -427 640 -640 427 -640 427 -640 453 -640 480 -480 640 -640 427 -640 427 -640 428 -640 464 -375 500 -480 640 -640 479 -640 473 -500 305 -480 640 -640 478 -640 480 -640 480 -640 480 -640 427 -640 426 -640 478 -426 640 -480 640 -500 333 -640 425 -640 468 -480 640 -333 500 -426 640 -640 478 -640 480 -640 427 -640 428 -640 480 -500 375 -640 429 -640 426 -576 640 -500 333 -640 419 -480 640 -640 480 -478 640 -640 396 -334 500 -640 480 -427 640 -467 640 -500 375 -640 427 -295 244 -640 640 -640 401 -427 640 -480 640 -640 478 -640 438 -640 427 -640 480 -640 448 -640 480 -640 426 -640 480 -500 375 -500 400 -500 332 -640 427 -640 427 -500 350 -640 412 -640 480 -640 524 -500 375 -500 333 -424 640 -640 480 -640 427 -640 480 -640 480 -480 640 -640 457 -426 640 -480 640 -640 480 -283 424 -426 640 -336 640 -640 480 -640 427 -500 342 -640 480 -640 480 -640 427 -640 606 -640 480 -640 478 -480 640 -427 640 -640 480 -640 360 -640 480 -640 427 -640 480 -640 426 -500 332 -375 500 -640 478 -427 640 -640 480 -640 480 -427 640 -640 461 -640 428 -640 429 -500 333 -481 640 -640 426 -640 408 -640 640 -480 640 -640 427 -640 480 -640 480 -640 481 -640 480 -500 375 -480 640 -640 427 -640 427 -640 427 -640 427 -500 375 -640 468 -640 480 -640 426 -640 548 -500 375 -640 425 -640 480 -640 480 -640 427 -640 426 -640 427 -567 640 -640 427 -640 457 -640 427 -600 354 -640 411 -640 620 -640 480 -640 480 -640 424 -469 640 -640 429 -640 480 -426 640 -359 640 -500 312 -640 480 -640 480 -640 427 -640 467 -640 586 -428 640 -640 427 -500 375 -427 640 -500 375 -500 375 -640 359 -640 493 -640 427 -500 375 -640 427 -298 500 -640 427 -640 541 -497 640 -375 500 -640 605 -640 451 -375 500 -500 375 -480 640 -640 480 -640 428 -640 480 -425 640 -640 478 -640 480 -640 483 -458 640 -640 541 -500 332 -500 281 -480 640 -426 640 -640 480 -427 640 -640 480 -640 427 -640 428 -640 480 -640 426 -480 640 -640 334 -640 400 -640 480 -640 426 -375 500 -640 480 -640 427 -640 428 -640 427 -640 480 -480 640 -640 640 -480 640 -480 640 -500 375 -640 480 -612 612 -640 480 -640 426 -512 640 -500 375 -427 640 -640 476 -640 480 -640 511 -640 360 -640 425 -640 480 -480 640 -640 448 -500 375 -640 480 -640 427 -640 425 -428 640 -640 640 -640 428 -521 421 -640 480 -640 640 -427 640 -500 400 -640 427 -500 375 -640 427 -640 457 -640 359 -640 430 -640 480 -500 375 -640 480 -640 427 -640 480 -640 425 -500 375 -528 640 -313 500 -600 400 -640 609 -640 480 -640 404 -640 480 -640 480 -640 424 -640 480 -640 427 -640 401 -500 375 -640 480 -490 640 -612 612 -640 427 -640 640 -640 480 -640 425 -480 640 -631 640 -500 333 -602 415 -640 512 -640 427 -640 480 -640 426 -640 480 -480 640 -640 480 -640 427 -640 403 -640 453 -640 480 -640 427 -640 480 -640 426 -426 640 -612 612 -640 480 -640 480 -640 480 -500 333 -640 640 -639 640 -612 612 -640 464 -640 480 -500 375 -405 500 -640 427 -640 512 -640 427 -480 640 -640 458 -640 428 -640 415 -480 640 -640 480 -427 640 -640 480 -430 500 -500 375 -640 480 -500 376 -640 304 -480 640 -500 375 -640 426 -640 480 -640 425 -480 640 -640 427 -428 640 -500 375 -500 500 -640 480 -640 419 -484 640 -640 480 -640 427 -640 480 -640 427 -640 480 -640 429 -500 319 -427 640 -500 375 -640 480 -358 640 -480 640 -500 375 -427 640 -640 359 -500 333 -448 299 -640 424 -612 612 -612 612 -640 426 -425 640 -344 500 -640 326 -640 513 -640 425 -640 640 -640 480 -640 427 -480 640 -500 336 -640 427 -640 480 -640 480 -640 427 -375 500 -640 429 -375 500 -513 640 -640 544 -640 480 -640 480 -640 432 -480 640 -333 500 -640 383 -500 375 -426 640 -640 480 -640 540 -640 480 -392 500 -480 640 -640 404 -640 640 -427 640 -640 480 -640 411 -640 499 -640 480 -640 480 -640 480 -640 427 -397 500 -427 640 -640 314 -500 360 -480 640 -640 409 -640 480 -640 480 -500 333 -478 640 -500 332 -640 427 -640 396 -640 480 -640 427 -640 427 -640 480 -428 640 -500 375 -640 428 -375 500 -640 504 -640 424 -629 640 -427 640 -500 375 -600 400 -640 425 -640 480 -426 640 -640 406 -640 480 -640 480 -640 480 -640 335 -480 640 -427 640 -500 375 -640 459 -612 612 -500 375 -480 640 -480 640 -640 480 -640 400 -429 640 -640 428 -640 480 -640 432 -640 426 -528 640 -640 426 -500 375 -640 480 -640 430 -640 478 -640 480 -640 427 -640 480 -426 640 -500 375 -640 488 -640 427 -640 407 -425 640 -640 549 -500 375 -612 612 -640 444 -640 426 -640 480 -494 327 -640 428 -640 449 -500 397 -640 479 -640 480 -640 431 -640 360 -509 640 -640 480 -640 480 -512 640 -640 426 -640 509 -612 612 -640 427 -425 640 -640 480 -427 640 -640 480 -640 511 -640 480 -640 480 -640 425 -500 310 -640 480 -612 612 -500 335 -640 480 -640 480 -480 640 -640 480 -500 333 -427 640 -640 480 -459 500 -640 480 -640 480 -640 427 -640 427 -500 375 -640 425 -428 640 -640 639 -500 325 -640 427 -640 506 -640 458 -469 640 -640 484 -500 375 -375 500 -427 640 -425 640 -338 500 -640 427 -480 640 -640 574 -640 480 -640 480 -640 480 -640 426 -640 425 -640 427 -612 612 -480 640 -427 640 -640 480 -640 427 -400 600 -640 427 -640 640 -612 612 -640 427 -480 640 -640 480 -640 480 -640 480 -375 500 -500 338 -426 640 -500 375 -500 333 -640 427 -640 480 -640 427 -640 255 -640 480 -640 401 -640 513 -640 427 -640 640 -375 500 -640 429 -640 425 -500 333 -640 424 -640 480 -640 480 -640 480 -480 640 -375 500 -640 480 -500 333 -500 375 -375 500 -480 640 -640 480 -640 478 -480 640 -640 427 -480 640 -640 480 -640 427 -427 640 -427 640 -640 480 -427 640 -640 427 -500 375 -640 480 -480 640 -640 427 -500 400 -500 333 -640 426 -471 640 -640 480 -640 427 -480 640 -433 640 -590 640 -640 427 -494 500 -328 640 -640 480 -512 400 -612 612 -480 640 -480 640 -640 425 -640 480 -640 480 -425 640 -640 427 -640 424 -640 426 -640 514 -425 640 -640 479 -508 640 -500 333 -640 433 -640 425 -640 480 -640 360 -480 640 -640 429 -640 480 -640 426 -426 640 -640 480 -640 426 -640 480 -427 640 -640 455 -640 480 -500 400 -640 427 -640 480 -640 480 -500 375 -640 554 -334 500 -640 360 -426 640 -500 470 -640 427 -640 480 -480 640 -640 427 -500 334 -427 640 -640 383 -640 426 -640 480 -480 640 -437 640 -640 425 -640 480 -640 480 -640 427 -640 427 -640 480 -612 612 -640 360 -425 640 -426 640 -640 241 -640 480 -640 640 -427 640 -612 612 -640 429 -500 375 -500 375 -500 324 -640 456 -640 427 -640 424 -640 480 -375 500 -640 427 -640 480 -480 640 -640 572 -640 480 -480 640 -640 427 -640 427 -640 427 -640 480 -500 375 -640 480 -375 500 -640 426 -640 426 -375 500 -640 480 -640 401 -640 458 -481 640 -640 480 -640 640 -640 480 -640 480 -640 502 -427 640 -428 640 -427 640 -427 640 -640 427 -359 640 -640 425 -640 427 -457 640 -640 436 -640 434 -640 480 -335 500 -497 500 -425 640 -480 640 -425 640 -640 480 -640 425 -640 311 -640 426 -640 428 -640 640 -640 425 -640 427 -640 480 -640 388 -640 426 -640 481 -640 398 -640 427 -640 427 -640 480 -640 640 -640 428 -640 463 -640 425 -427 640 -500 500 -640 368 -500 331 -500 375 -640 426 -385 500 -500 358 -640 480 -640 480 -640 480 -480 640 -640 427 -500 304 -640 427 -500 333 -640 457 -500 500 -640 360 -432 640 -640 576 -640 480 -640 401 -640 480 -640 360 -640 480 -640 498 -500 333 -640 480 -640 480 -640 427 -640 487 -480 640 -640 428 -359 640 -640 432 -640 480 -640 427 -480 640 -640 480 -640 426 -640 480 -500 333 -476 640 -640 480 -640 424 -427 640 -640 285 -427 640 -472 640 -500 312 -480 640 -640 478 -640 480 -640 480 -640 481 -612 612 -640 480 -612 612 -640 478 -640 480 -360 640 -640 427 -640 427 -640 480 -361 500 -640 428 -640 426 -333 250 -640 640 -458 640 -640 480 -640 427 -640 478 -640 480 -640 427 -640 426 -640 427 -640 480 -640 426 -451 500 -640 512 -640 428 -640 480 -612 612 -480 640 -640 471 -640 428 -500 375 -640 480 -506 640 -640 479 -427 640 -500 375 -640 427 -640 509 -640 480 -612 612 -640 427 -640 480 -640 392 -500 375 -640 640 -640 480 -500 378 -500 375 -500 375 -427 640 -640 427 -640 480 -640 446 -640 504 -640 480 -640 480 -478 640 -640 429 -640 424 -640 439 -640 480 -640 480 -640 427 -640 631 -427 640 -480 640 -640 480 -425 640 -640 426 -640 360 -640 424 -469 640 -640 426 -640 427 -640 425 -500 375 -500 373 -640 405 -640 481 -480 640 -640 480 -500 284 -640 480 -640 427 -640 480 -640 480 -480 640 -640 427 -426 640 -480 640 -640 480 -640 480 -427 640 -640 427 -640 523 -640 427 -640 480 -640 512 -640 427 -500 375 -640 480 -640 427 -480 640 -640 434 -640 399 -500 333 -640 480 -640 426 -640 480 -640 474 -640 493 -640 480 -568 640 -500 334 -640 480 -640 480 -640 459 -500 400 -640 480 -500 333 -640 430 -640 427 -640 478 -640 480 -640 433 -481 640 -640 367 -640 427 -612 612 -500 374 -640 480 -375 500 -550 365 -640 429 -500 333 -480 640 -640 640 -640 480 -640 480 -640 427 -640 480 -383 640 -640 427 -640 301 -427 640 -640 427 -640 425 -300 400 -480 640 -500 333 -518 640 -420 640 -480 640 -428 640 -333 500 -640 360 -500 333 -480 640 -471 640 -640 427 -640 480 -480 640 -640 480 -640 425 -640 480 -640 480 -640 425 -480 640 -640 474 -500 335 -640 480 -640 480 -640 360 -500 375 -640 478 -640 398 -500 375 -640 480 -640 428 -500 375 -500 375 -466 640 -458 640 -640 480 -640 477 -640 489 -375 500 -640 640 -480 640 -612 612 -640 480 -640 427 -640 350 -500 375 -640 480 -298 640 -480 640 -640 427 -480 640 -640 426 -640 480 -640 480 -640 480 -640 480 -640 427 -500 375 -478 640 -640 425 -640 472 -640 409 -375 500 -480 640 -640 425 -400 600 -640 480 -640 480 -480 640 -640 361 -426 640 -427 640 -447 640 -425 640 -640 426 -500 375 -640 427 -640 483 -480 640 -640 480 -640 480 -427 640 -640 480 -640 640 -640 427 -640 480 -640 427 -640 353 -640 640 -640 480 -374 500 -640 426 -384 640 -640 480 -480 640 -375 500 -375 500 -500 375 -640 480 -640 480 -640 428 -640 480 -640 429 -640 457 -640 424 -480 640 -640 480 -480 640 -640 626 -640 427 -640 480 -640 480 -458 640 -480 640 -500 398 -640 428 -640 425 -640 429 -640 427 -427 640 -512 640 -640 640 -640 426 -640 478 -458 640 -640 480 -640 480 -426 640 -640 480 -640 480 -500 281 -640 640 -640 427 -478 640 -640 426 -640 426 -640 458 -640 427 -500 356 -640 429 -473 640 -640 526 -640 480 -500 377 -640 426 -640 480 -640 480 -640 304 -640 480 -640 426 -640 427 -640 434 -426 640 -640 480 -480 640 -640 480 -640 428 -640 480 -500 382 -500 333 -375 500 -640 427 -640 427 -640 427 -640 480 -640 426 -480 640 -640 361 -640 474 -473 640 -427 640 -500 332 -640 427 -640 424 -640 480 -640 480 -343 500 -425 640 -640 480 -500 375 -640 427 -640 427 -500 373 -640 427 -427 640 -640 480 -508 640 -640 480 -640 480 -500 375 -640 426 -640 640 -640 400 -480 640 -547 640 -640 426 -640 427 -517 640 -375 500 -640 426 -640 325 -640 480 -640 426 -640 427 -640 558 -640 640 -640 520 -640 480 -640 480 -640 427 -640 401 -640 426 -640 412 -640 427 -640 425 -640 427 -500 375 -426 640 -491 640 -480 640 -640 428 -480 640 -640 480 -640 294 -480 640 -640 502 -640 427 -640 427 -640 640 -425 640 -640 480 -640 495 -640 426 -416 640 -640 426 -640 427 -640 359 -640 425 -427 640 -640 480 -640 427 -427 640 -612 612 -640 428 -640 361 -640 480 -640 427 -480 640 -640 426 -640 480 -478 640 -640 480 -426 640 -640 480 -640 482 -640 428 -361 640 -427 640 -640 480 -375 500 -640 427 -640 427 -500 329 -480 640 -555 640 -500 400 -516 520 -640 480 -640 427 -640 426 -480 640 -427 640 -640 428 -640 620 -500 375 -640 480 -480 640 -480 640 -427 640 -480 640 -500 375 -640 480 -640 427 -640 480 -480 640 -612 612 -640 480 -427 640 -426 640 -427 640 -426 640 -640 427 -640 450 -480 640 -640 426 -640 426 -597 640 -640 439 -375 500 -640 360 -500 393 -424 640 -640 427 -640 427 -513 640 -424 640 -480 640 -640 427 -640 427 -640 480 -333 500 -640 360 -640 480 -640 480 -640 480 -640 480 -640 427 -640 480 -640 480 -640 425 -640 453 -480 640 -640 426 -640 480 -640 426 -640 481 -480 640 -640 427 -480 640 -640 480 -640 480 -640 480 -457 640 -640 404 -512 640 -640 360 -640 480 -480 640 -640 427 -426 640 -640 513 -640 479 -640 427 -640 480 -640 480 -480 640 -500 391 -640 424 -375 500 -459 640 -640 547 -500 334 -640 359 -480 640 -640 427 -640 425 -626 640 -640 427 -640 423 -640 464 -612 612 -640 425 -640 480 -640 426 -640 480 -500 375 -480 640 -640 480 -640 560 -640 427 -640 422 -612 612 -612 612 -480 640 -625 640 -640 480 -612 612 -640 480 -480 640 -427 640 -333 500 -640 427 -404 640 -640 480 -375 500 -438 640 -500 375 -500 336 -640 427 -640 456 -640 427 -640 426 -640 480 -640 427 -427 640 -640 480 -480 640 -640 428 -425 640 -500 375 -640 481 -640 427 -640 427 -640 195 -500 375 -480 640 -640 425 -640 480 -640 426 -427 640 -514 640 -640 427 -640 480 -640 427 -640 425 -640 427 -500 375 -639 426 -640 504 -640 480 -427 640 -500 375 -640 463 -480 640 -640 427 -640 428 -427 640 -640 480 -500 333 -640 480 -640 480 -500 375 -640 480 -640 426 -640 426 -640 427 -640 480 -640 426 -640 427 -409 640 -640 468 -640 428 -500 332 -640 480 -640 489 -640 480 -640 363 -640 427 -640 478 -640 480 -640 360 -375 500 -640 529 -427 640 -640 427 -640 426 -427 640 -640 480 -640 478 -640 428 -640 480 -640 426 -640 427 -640 480 -396 640 -640 471 -428 640 -600 400 -500 375 -640 480 -640 425 -424 640 -480 640 -640 426 -425 640 -480 640 -500 375 -480 640 -512 640 -640 428 -480 640 -640 426 -640 480 -640 640 -640 499 -640 400 -640 427 -640 427 -500 375 -640 427 -640 480 -640 480 -640 426 -640 480 -500 375 -640 623 -494 640 -640 403 -426 640 -425 640 -640 428 -640 480 -640 427 -640 430 -640 640 -640 480 -480 640 -640 426 -640 514 -428 640 -272 480 -640 428 -640 454 -504 314 -338 500 -500 375 -640 480 -500 375 -640 426 -640 298 -640 480 -500 322 -500 333 -640 436 -640 480 -500 375 -500 375 -612 612 -640 427 -640 433 -428 640 -427 640 -500 333 -640 409 -640 480 -640 480 -480 640 -640 428 -640 427 -480 640 -427 640 -640 429 -636 640 -640 427 -640 428 -640 640 -640 400 -640 480 -640 480 -640 517 -480 640 -640 480 -533 640 -480 640 -640 199 -426 640 -640 480 -640 608 -640 424 -640 371 -480 640 -640 427 -640 368 -500 375 -640 427 -500 334 -640 480 -640 480 -640 480 -640 389 -640 480 -640 480 -640 478 -640 426 -640 480 -640 480 -640 480 -480 640 -500 332 -640 515 -480 640 -640 435 -480 640 -640 426 -375 500 -480 640 -640 480 -425 640 -480 640 -640 480 -640 419 -640 425 -640 480 -480 640 -640 480 -500 333 -476 640 -500 400 -512 640 -640 338 -640 360 -480 640 -640 427 -480 640 -640 427 -640 480 -480 640 -640 480 -640 427 -612 612 -640 478 -427 640 -640 427 -640 426 -640 480 -640 426 -640 508 -640 427 -640 427 -640 480 -640 480 -640 428 -640 426 -480 640 -500 375 -427 640 -640 371 -425 640 -640 427 -640 427 -640 480 -480 640 -613 640 -640 480 -640 480 -500 375 -640 424 -427 640 -640 480 -640 480 -640 480 -640 640 -640 480 -640 479 -640 427 -331 500 -640 359 -640 494 -640 480 -640 640 -640 427 -500 375 -640 480 -640 640 -640 429 -458 640 -640 425 -640 640 -640 465 -640 480 -488 640 -640 480 -640 480 -640 394 -426 640 -640 426 -423 640 -640 480 -427 640 -640 433 -335 500 -640 480 -640 396 -640 373 -640 427 -640 480 -640 426 -640 486 -425 640 -640 428 -500 285 -480 640 -640 480 -640 480 -428 640 -427 640 -640 426 -640 480 -640 389 -500 375 -375 500 -640 426 -480 640 -640 480 -640 474 -480 640 -640 427 -480 640 -640 480 -449 640 -640 432 -640 427 -640 480 -640 468 -427 640 -640 427 -640 458 -640 427 -640 427 -383 640 -640 640 -640 373 -640 427 -640 480 -640 486 -640 480 -480 640 -640 480 -640 480 -640 426 -480 640 -640 427 -640 480 -640 425 -640 480 -500 251 -640 480 -416 640 -640 480 -640 480 -640 640 -640 428 -425 640 -640 480 -640 480 -640 427 -640 480 -640 427 -640 429 -640 426 -640 640 -427 640 -640 427 -640 427 -640 427 -414 640 -500 375 -640 416 -500 332 -640 393 -640 360 -640 480 -500 333 -640 425 -640 427 -640 426 -640 427 -500 375 -640 360 -500 333 -424 640 -640 427 -478 640 -478 640 -429 640 -480 640 -640 425 -500 375 -640 365 -640 480 -480 640 -375 500 -640 426 -640 480 -640 480 -640 427 -640 480 -640 425 -640 480 -640 427 -640 427 -640 480 -640 427 -640 427 -640 480 -640 448 -500 375 -426 640 -480 640 -428 640 -612 612 -640 421 -500 333 -640 491 -640 480 -640 360 -640 397 -640 426 -478 640 -480 640 -640 424 -640 427 -640 427 -640 480 -640 427 -640 427 -640 426 -640 426 -640 426 -640 480 -640 427 -640 480 -640 480 -332 500 -640 428 -480 640 -428 640 -427 640 -640 351 -508 640 -640 427 -640 480 -500 375 -640 480 -640 480 -640 425 -640 420 -640 480 -500 375 -640 480 -640 425 -418 500 -500 375 -640 474 -640 425 -640 427 -640 480 -336 640 -640 427 -640 478 -640 425 -640 503 -333 500 -640 427 -640 480 -640 480 -612 612 -480 640 -640 404 -640 427 -640 503 -640 360 -640 427 -640 480 -640 381 -640 339 -428 640 -427 640 -640 425 -640 480 -640 480 -640 427 -426 640 -640 409 -640 427 -640 519 -360 640 -375 500 -640 427 -640 427 -640 427 -640 508 -640 428 -640 423 -640 427 -640 386 -500 333 -640 366 -480 640 -640 480 -640 427 -640 427 -640 427 -640 509 -500 375 -500 375 -640 418 -375 500 -640 353 -640 426 -640 427 -640 480 -612 612 -640 480 -640 478 -526 640 -387 500 -640 480 -640 427 -640 427 -640 480 -640 427 -640 425 -640 480 -500 376 -640 480 -640 480 -500 316 -640 427 -640 480 -640 480 -427 640 -640 427 -480 640 -640 427 -612 612 -480 640 -640 640 -334 500 -427 640 -500 335 -640 428 -640 426 -640 478 -480 640 -426 640 -640 426 -640 426 -500 334 -640 480 -640 443 -500 375 -640 480 -640 427 -640 479 -640 424 -640 480 -427 640 -640 428 -640 480 -640 480 -640 480 -640 424 -500 281 -640 480 -640 426 -426 640 -500 332 -640 480 -640 424 -480 640 -640 360 -334 500 -333 500 -640 427 -640 480 -640 427 -640 427 -480 640 -640 297 -500 487 -427 640 -640 426 -480 640 -640 480 -554 312 -640 454 -640 361 -640 516 -480 640 -640 640 -500 350 -640 640 -640 425 -640 640 -480 640 -640 480 -640 640 -640 426 -640 480 -640 587 -640 425 -640 480 -427 640 -640 529 -640 429 -640 480 -640 428 -640 427 -640 480 -640 480 -500 339 -500 375 -500 375 -640 427 -640 480 -640 444 -500 335 -640 512 -640 426 -640 480 -500 375 -640 480 -480 640 -640 480 -612 612 -375 500 -480 640 -640 599 -640 480 -640 480 -500 375 -500 332 -640 382 -640 480 -640 480 -427 640 -500 471 -640 426 -640 480 -426 640 -640 427 -640 480 -640 480 -640 427 -640 427 -640 417 -413 622 -480 640 -428 640 -640 426 -640 366 -425 640 -500 375 -500 345 -640 373 -489 500 -640 389 -478 640 -640 494 -427 640 -640 426 -640 480 -444 640 -640 427 -640 426 -427 640 -384 640 -640 426 -459 640 -640 479 -640 572 -640 480 -640 480 -468 640 -640 431 -425 640 -640 428 -640 428 -480 500 -640 427 -427 640 -426 640 -640 427 -429 640 -640 428 -480 640 -640 427 -640 425 -500 375 -401 640 -640 425 -500 331 -640 480 -640 512 -640 361 -640 428 -640 427 -500 375 -427 640 -640 427 -640 480 -480 640 -427 640 -640 425 -640 361 -640 424 -427 640 -640 479 -640 427 -640 425 -640 427 -640 360 -640 424 -640 544 -640 427 -375 500 -640 480 -640 480 -500 375 -640 425 -640 426 -375 500 -640 454 -640 428 -640 360 -480 640 -640 480 -435 640 -500 375 -640 640 -640 479 -640 480 -640 379 -640 480 -478 640 -500 282 -640 480 -640 480 -640 480 -640 427 -640 480 -640 425 -426 640 -513 640 -640 431 -640 425 -640 480 -511 640 -640 429 -640 480 -500 375 -640 480 -640 394 -640 427 -425 640 -640 430 -640 480 -640 425 -640 480 -640 480 -640 457 -640 480 -333 500 -640 480 -640 427 -640 425 -640 428 -379 500 -640 480 -640 484 -427 640 -640 427 -640 418 -640 428 -640 482 -640 483 -500 283 -640 476 -640 480 -144 144 -640 360 -640 480 -480 640 -640 360 -480 640 -640 480 -640 480 -640 426 -426 640 -426 640 -640 480 -640 480 -640 604 -640 445 -640 480 -640 480 -640 313 -640 331 -640 375 -640 480 -612 612 -505 640 -424 640 -640 361 -640 421 -640 400 -640 480 -640 454 -640 427 -500 375 -506 640 -426 640 -500 375 -480 640 -479 322 -640 424 -480 640 -480 640 -640 349 -639 426 -427 640 -500 333 -640 480 -424 640 -425 640 -640 480 -593 391 -640 427 -640 508 -480 640 -640 400 -640 428 -640 360 -640 427 -640 428 -640 480 -640 426 -640 506 -500 357 -640 480 -640 480 -640 428 -640 427 -640 424 -640 428 -640 427 -640 422 -640 480 -640 480 -500 375 -640 425 -640 480 -640 480 -640 537 -640 427 -640 428 -640 428 -640 480 -318 500 -640 480 -480 640 -500 333 -640 427 -500 375 -640 480 -480 640 -500 333 -640 480 -640 427 -640 427 -500 375 -640 426 -640 426 -640 427 -500 348 -640 427 -640 426 -640 546 -640 427 -640 427 -640 480 -640 425 -500 407 -500 300 -640 512 -480 640 -640 480 -500 281 -640 435 -640 426 -640 427 -640 478 -640 383 -375 500 -640 480 -640 424 -480 640 -640 427 -640 480 -640 480 -640 473 -640 475 -600 450 -450 265 -500 457 -341 640 -640 480 -640 425 -640 427 -375 500 -480 640 -543 640 -640 480 -457 640 -640 480 -640 490 -640 478 -427 640 -640 554 -427 640 -427 640 -640 480 -640 454 -640 427 -500 283 -640 480 -640 415 -640 480 -640 486 -640 425 -640 427 -333 500 -473 640 -640 480 -480 640 -640 478 -480 640 -427 640 -640 480 -612 612 -640 480 -500 325 -640 421 -640 480 -640 427 -640 480 -640 427 -640 281 -359 640 -458 640 -640 518 -640 360 -612 612 -640 480 -640 480 -640 480 -640 449 -640 480 -640 480 -640 480 -426 640 -640 427 -500 375 -640 427 -640 426 -640 599 -640 480 -495 640 -640 480 -500 281 -480 640 -427 640 -640 427 -640 427 -640 359 -640 429 -640 480 -640 426 -480 640 -640 430 -640 478 -480 640 -482 640 -640 426 -500 375 -640 319 -500 375 -500 375 -640 480 -500 333 -640 427 -640 480 -640 480 -640 480 -640 480 -612 612 -640 480 -640 360 -640 425 -426 640 -640 480 -640 480 -429 640 -333 500 -640 427 -640 425 -640 480 -640 427 -640 427 -640 480 -640 424 -640 480 -500 341 -500 334 -640 480 -640 480 -640 426 -375 500 -640 427 -500 333 -640 480 -640 480 -338 500 -334 500 -640 427 -456 640 -500 375 -640 426 -426 640 -640 480 -480 640 -480 640 -500 332 -640 426 -640 427 -426 640 -480 640 -640 429 -640 480 -640 384 -640 427 -359 500 -640 384 -500 375 -444 295 -427 640 -640 429 -427 640 -500 374 -480 640 -423 640 -500 375 -640 480 -640 480 -640 360 -640 640 -640 449 -640 427 -640 480 -640 480 -640 360 -640 484 -640 480 -640 480 -640 428 -500 375 -511 640 -372 500 -640 480 -500 333 -640 427 -612 612 -640 400 -640 427 -426 640 -480 640 -640 480 -500 333 -640 427 -640 480 -640 421 -640 480 -425 640 -427 640 -640 428 -640 428 -640 480 -493 500 -640 427 -640 427 -640 480 -640 480 -640 480 -640 538 -640 427 -640 427 -640 478 -640 480 -640 480 -500 357 -640 480 -640 425 -640 426 -640 480 -500 375 -640 404 -375 500 -640 640 -640 426 -640 480 -480 640 -480 640 -640 426 -427 640 -640 480 -480 640 -423 640 -612 612 -640 446 -640 423 -640 480 -476 640 -640 511 -640 427 -640 480 -640 480 -640 480 -480 640 -640 480 -640 566 -427 640 -640 518 -640 427 -426 640 -480 640 -612 612 -480 640 -640 426 -480 640 -520 640 -333 500 -427 640 -640 431 -640 480 -640 427 -640 426 -500 375 -640 480 -640 428 -425 640 -640 427 -640 480 -640 427 -640 569 -640 480 -640 427 -500 334 -500 338 -640 428 -640 481 -640 428 -640 427 -640 427 -640 424 -640 427 -333 500 -640 555 -640 428 -640 427 -640 496 -640 427 -640 480 -640 427 -640 480 -480 640 -640 480 -349 500 -640 480 -640 425 -640 429 -640 480 -612 612 -375 500 -640 410 -640 480 -612 612 -500 375 -640 425 -640 427 -500 375 -500 375 -450 300 -640 480 -640 427 -480 640 -499 500 -480 640 -640 425 -640 379 -640 427 -640 640 -640 426 -480 640 -500 375 -640 480 -480 640 -640 480 -640 457 -612 612 -480 640 -640 415 -640 480 -476 640 -640 427 -333 500 -500 333 -640 480 -640 480 -612 612 -640 426 -513 640 -333 500 -375 500 -640 480 -640 415 -640 424 -529 640 -640 480 -500 375 -640 360 -640 427 -640 428 -640 480 -640 480 -640 480 -640 480 -640 480 -640 480 -640 360 -383 640 -640 383 -640 419 -500 334 -640 457 -480 640 -400 300 -640 425 -640 480 -640 428 -500 375 -640 427 -640 480 -640 429 -640 425 -640 480 -640 480 -500 333 -500 365 -500 281 -334 500 -640 427 -428 640 -640 426 -640 427 -500 375 -640 426 -640 437 -640 484 -640 426 -640 427 -375 500 -375 500 -429 640 -640 480 -640 428 -640 480 -640 480 -374 500 -640 427 -640 480 -640 428 -587 391 -640 480 -640 480 -640 480 -640 428 -640 360 -500 375 -640 394 -375 500 -640 427 -500 374 -427 640 -640 424 -640 603 -640 480 -640 427 -640 480 -640 462 -500 375 -640 427 -500 356 -640 480 -640 425 -513 640 -640 427 -640 480 -640 478 -480 640 -640 436 -640 427 -640 480 -640 479 -640 480 -640 427 -640 480 -640 428 -640 360 -427 640 -480 640 -512 640 -640 480 -640 480 -640 422 -640 428 -413 640 -640 399 -640 426 -640 428 -333 500 -427 640 -427 640 -640 426 -434 640 -640 409 -640 480 -640 427 -333 500 -640 437 -640 512 -480 640 -480 640 -640 468 -640 427 -500 331 -480 640 -640 480 -640 478 -377 500 -333 500 -480 640 -428 640 -640 480 -640 237 -640 426 -640 480 -640 494 -640 426 -640 360 -640 360 -426 640 -601 601 -500 375 -480 640 -640 480 -446 640 -500 375 -640 480 -640 426 -640 427 -640 427 -500 375 -640 425 -640 427 -479 640 -612 612 -640 427 -640 427 -500 368 -640 313 -500 386 -640 523 -612 612 -480 640 -480 640 -640 453 -640 480 -640 480 -428 640 -480 640 -640 159 -640 426 -640 451 -640 427 -640 480 -426 640 -480 640 -500 333 -426 640 -640 427 -500 333 -427 640 -480 640 -640 427 -480 640 -457 640 -640 425 -640 427 -500 338 -640 480 -427 640 -612 612 -500 334 -640 451 -640 621 -640 461 -500 375 -640 480 -640 425 -640 428 -640 360 -640 519 -640 458 -640 416 -500 375 -500 375 -640 480 -640 425 -640 480 -612 612 -640 480 -428 640 -640 528 -640 427 -640 480 -640 480 -640 456 -640 480 -500 375 -640 427 -640 479 -612 612 -640 360 -500 375 -640 480 -640 480 -640 480 -640 480 -500 375 -640 480 -640 427 -640 480 -500 375 -600 600 -640 359 -640 426 -640 427 -640 456 -500 375 -443 640 -399 500 -640 498 -640 426 -375 500 -640 480 -426 640 -640 427 -640 455 -480 640 -500 375 -500 373 -429 640 -640 480 -640 360 -500 375 -480 640 -640 426 -640 427 -640 480 -331 500 -640 640 -640 429 -640 367 -640 427 -640 428 -500 335 -640 426 -500 375 -427 640 -640 424 -640 428 -640 640 -640 471 -640 479 -640 327 -640 427 -640 480 -640 425 -640 480 -640 427 -480 640 -640 413 -640 427 -640 433 -640 480 -640 480 -418 640 -640 463 -640 589 -427 640 -640 485 -640 426 -640 426 -448 443 -497 500 -640 427 -333 500 -640 428 -640 425 -640 480 -640 480 -640 480 -500 334 -640 480 -640 427 -640 427 -640 480 -640 480 -640 428 -640 480 -640 427 -640 480 -640 425 -640 480 -640 427 -640 480 -640 480 -480 640 -640 426 -640 426 -566 640 -640 425 -640 480 -640 424 -640 426 -640 336 -640 428 -640 427 -640 305 -640 423 -427 640 -480 640 -640 543 -500 334 -640 427 -640 428 -640 480 -500 500 -640 425 -500 289 -640 480 -640 480 -640 427 -640 480 -640 427 -600 400 -500 375 -640 425 -640 457 -640 480 -480 640 -640 427 -429 640 -500 375 -640 429 -640 426 -480 640 -480 640 -640 480 -480 640 -640 480 -640 480 -426 640 -640 426 -640 480 -640 483 -640 480 -640 428 -480 640 -480 640 -640 480 -640 480 -640 480 -640 426 -640 428 -640 480 -640 290 -640 480 -640 480 -640 512 -640 474 -640 427 -375 500 -640 480 -640 523 -640 427 -640 480 -640 480 -640 519 -500 373 -640 480 -640 480 -640 480 -640 439 -640 427 -640 383 -640 370 -480 640 -500 333 -640 427 -500 375 -640 480 -612 612 -640 426 -640 480 -640 428 -640 634 -640 480 -598 640 -640 480 -640 428 -640 469 -640 480 -571 640 -500 376 -640 378 -640 428 -375 500 -640 424 -480 640 -500 335 -640 445 -640 427 -640 480 -640 384 -640 425 -427 640 -640 480 -640 214 -640 427 -640 480 -640 426 -640 480 -640 426 -427 640 -640 480 -480 640 -640 478 -640 424 -454 640 -491 640 -500 318 -640 445 -338 500 -336 500 -640 427 -370 462 -640 480 -640 401 -640 425 -640 313 -640 480 -640 480 -480 640 -480 640 -640 429 -640 480 -640 399 -640 427 -640 480 -426 640 -640 480 -640 465 -500 340 -640 414 -480 640 -640 479 -640 480 -640 360 -640 480 -413 640 -640 414 -500 332 -375 500 -500 375 -640 427 -640 425 -500 336 -512 640 -375 500 -640 427 -425 640 -428 640 -640 480 -640 480 -500 375 -425 640 -640 480 -640 480 -640 480 -427 640 -640 428 -640 359 -332 500 -640 480 -427 640 -640 480 -640 426 -640 424 -640 619 -640 480 -424 640 -640 480 -640 425 -640 480 -640 444 -640 429 -640 426 -480 640 -640 480 -640 567 -427 640 -640 427 -612 612 -425 640 -640 480 -425 640 -640 427 -640 428 -478 640 -640 360 -640 427 -480 640 -500 375 -640 423 -640 480 -614 640 -490 350 -480 640 -640 427 -640 360 -479 640 -427 640 -640 423 -375 500 -640 480 -640 354 -640 480 -640 427 -352 640 -612 612 -500 334 -500 375 -500 421 -640 480 -640 498 -640 480 -640 429 -640 480 -640 427 -640 427 -612 612 -640 480 -500 332 -640 429 -453 640 -640 427 -478 640 -640 478 -640 427 -428 640 -640 508 -612 612 -640 426 -640 428 -640 480 -427 640 -640 426 -612 612 -480 640 -640 481 -500 375 -640 509 diff --git a/data/voc.yaml b/data/voc.yaml new file mode 100644 index 0000000000..9dad47777a --- /dev/null +++ b/data/voc.yaml @@ -0,0 +1,99 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC by University of Oxford +# Example usage: python train.py --data VOC.yaml +# parent +# ├── yolov5 +# └── datasets +# └── VOC ← downloads here (2.8 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/VOC +train: # train images (relative to 'path') 16551 images + - images/train2012 + - images/train2007 + - images/val2012 + - images/val2007 +val: # val images (relative to 'path') 4952 images + - images/test2007 +test: # test images (optional) + - images/test2007 + +# Classes +names: + 0: aeroplane + 1: bicycle + 2: bird + 3: boat + 4: bottle + 5: bus + 6: car + 7: cat + 8: chair + 9: cow + 10: diningtable + 11: dog + 12: horse + 13: motorbike + 14: person + 15: pottedplant + 16: sheep + 17: sofa + 18: train + 19: tvmonitor + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + import xml.etree.ElementTree as ET + + from tqdm import tqdm + from utils.general import download, Path + + + def convert_label(path, lb_path, year, image_id): + def convert_box(size, box): + dw, dh = 1. / size[0], 1. / size[1] + x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2] + return x * dw, y * dh, w * dw, h * dh + + in_file = open(path / f'VOC{year}/Annotations/{image_id}.xml') + out_file = open(lb_path, 'w') + tree = ET.parse(in_file) + root = tree.getroot() + size = root.find('size') + w = int(size.find('width').text) + h = int(size.find('height').text) + + names = list(yaml['names'].values()) # names list + for obj in root.iter('object'): + cls = obj.find('name').text + if cls in names and int(obj.find('difficult').text) != 1: + xmlbox = obj.find('bndbox') + bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')]) + cls_id = names.index(cls) # class id + out_file.write(" ".join([str(a) for a in (cls_id, *bb)]) + '\n') + + + # Download + dir = Path(yaml['path']) # dataset root dir + url = 'https://github.com/ultralytics/assets/releases/download/v0.0.0/' + urls = [f'{url}VOCtrainval_06-Nov-2007.zip', # 446MB, 5012 images + f'{url}VOCtest_06-Nov-2007.zip', # 438MB, 4953 images + f'{url}VOCtrainval_11-May-2012.zip'] # 1.95GB, 17126 images + download(urls, dir=dir / 'images', delete=False, curl=True, threads=3) + + # Convert + path = dir / 'images/VOCdevkit' + for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'): + imgs_path = dir / 'images' / f'{image_set}{year}' + lbs_path = dir / 'labels' / f'{image_set}{year}' + imgs_path.mkdir(exist_ok=True, parents=True) + lbs_path.mkdir(exist_ok=True, parents=True) + + with open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt') as f: + image_ids = f.read().strip().split() + for id in tqdm(image_ids, desc=f'{image_set}{year}'): + f = path / f'VOC{year}/JPEGImages/{id}.jpg' # old img path + lb_path = (lbs_path / f.name).with_suffix('.txt') # new label path + f.rename(imgs_path / f.name) # move image + convert_label(path, lb_path, year, id) # convert labels to YOLO format diff --git a/data/xView.yaml b/data/xView.yaml new file mode 100644 index 0000000000..6bea7637e8 --- /dev/null +++ b/data/xView.yaml @@ -0,0 +1,152 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# DIUx xView 2018 Challenge https://challenge.xviewdataset.org by U.S. National Geospatial-Intelligence Agency (NGA) +# -------- DOWNLOAD DATA MANUALLY and jar xf val_images.zip to 'datasets/xView' before running train command! -------- +# Example usage: python train.py --data xView.yaml +# parent +# ├── yolov5 +# └── datasets +# └── xView ← downloads here (20.7 GB) + +# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] +path: ../datasets/xView # dataset root dir +train: images/autosplit_train.txt # train images (relative to 'path') 90% of 847 train images +val: images/autosplit_val.txt # train images (relative to 'path') 10% of 847 train images + +# Classes +names: + 0: Fixed-wing Aircraft + 1: Small Aircraft + 2: Cargo Plane + 3: Helicopter + 4: Passenger Vehicle + 5: Small Car + 6: Bus + 7: Pickup Truck + 8: Utility Truck + 9: Truck + 10: Cargo Truck + 11: Truck w/Box + 12: Truck Tractor + 13: Trailer + 14: Truck w/Flatbed + 15: Truck w/Liquid + 16: Crane Truck + 17: Railway Vehicle + 18: Passenger Car + 19: Cargo Car + 20: Flat Car + 21: Tank car + 22: Locomotive + 23: Maritime Vessel + 24: Motorboat + 25: Sailboat + 26: Tugboat + 27: Barge + 28: Fishing Vessel + 29: Ferry + 30: Yacht + 31: Container Ship + 32: Oil Tanker + 33: Engineering Vehicle + 34: Tower crane + 35: Container Crane + 36: Reach Stacker + 37: Straddle Carrier + 38: Mobile Crane + 39: Dump Truck + 40: Haul Truck + 41: Scraper/Tractor + 42: Front loader/Bulldozer + 43: Excavator + 44: Cement Mixer + 45: Ground Grader + 46: Hut/Tent + 47: Shed + 48: Building + 49: Aircraft Hangar + 50: Damaged Building + 51: Facility + 52: Construction Site + 53: Vehicle Lot + 54: Helipad + 55: Storage Tank + 56: Shipping container lot + 57: Shipping Container + 58: Pylon + 59: Tower + +# Download script/URL (optional) --------------------------------------------------------------------------------------- +download: | + import json + import os + from pathlib import Path + + import numpy as np + from PIL import Image + from tqdm import tqdm + + from utils.dataloaders import autosplit + from utils.general import download, xyxy2xywhn + + + def convert_labels(fname=Path('xView/xView_train.geojson')): + # Convert xView geoJSON labels to YOLO format + path = fname.parent + with open(fname) as f: + print(f'Loading {fname}...') + data = json.load(f) + + # Make dirs + labels = Path(path / 'labels' / 'train') + os.system(f'rm -rf {labels}') + labels.mkdir(parents=True, exist_ok=True) + + # xView classes 11-94 to 0-59 + xview_class2index = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, -1, 4, 5, 6, 7, 8, -1, 9, 10, 11, + 12, 13, 14, 15, -1, -1, 16, 17, 18, 19, 20, 21, 22, -1, 23, 24, 25, -1, 26, 27, -1, 28, -1, + 29, 30, 31, 32, 33, 34, 35, 36, 37, -1, 38, 39, 40, 41, 42, 43, 44, 45, -1, -1, -1, -1, 46, + 47, 48, 49, -1, 50, 51, -1, 52, -1, -1, -1, 53, 54, -1, 55, -1, -1, 56, -1, 57, -1, 58, 59] + + shapes = {} + for feature in tqdm(data['features'], desc=f'Converting {fname}'): + p = feature['properties'] + if p['bounds_imcoords']: + id = p['image_id'] + file = path / 'train_images' / id + if file.exists(): # 1395.tif missing + try: + box = np.array([int(num) for num in p['bounds_imcoords'].split(",")]) + assert box.shape[0] == 4, f'incorrect box shape {box.shape[0]}' + cls = p['type_id'] + cls = xview_class2index[int(cls)] # xView class to 0-60 + assert 59 >= cls >= 0, f'incorrect class index {cls}' + + # Write YOLO label + if id not in shapes: + shapes[id] = Image.open(file).size + box = xyxy2xywhn(box[None].astype(np.float), w=shapes[id][0], h=shapes[id][1], clip=True) + with open((labels / id).with_suffix('.txt'), 'a') as f: + f.write(f"{cls} {' '.join(f'{x:.6f}' for x in box[0])}\n") # write label.txt + except Exception as e: + print(f'WARNING: skipping one label for {file}: {e}') + + + # Download manually from https://challenge.xviewdataset.org + dir = Path(yaml['path']) # dataset root dir + # urls = ['https://d307kc0mrhucc3.cloudfront.net/train_labels.zip', # train labels + # 'https://d307kc0mrhucc3.cloudfront.net/train_images.zip', # 15G, 847 train images + # 'https://d307kc0mrhucc3.cloudfront.net/val_images.zip'] # 5G, 282 val images (no labels) + # download(urls, dir=dir, delete=False) + + # Convert labels + convert_labels(dir / 'xView_train.geojson') + + # Move images + images = Path(dir / 'images') + images.mkdir(parents=True, exist_ok=True) + Path(dir / 'train_images').rename(dir / 'images' / 'train') + Path(dir / 'val_images').rename(dir / 'images' / 'val') + + # Split + autosplit(dir / 'images' / 'train') diff --git a/detect.py b/detect.py index 5a7fb59b19..7e2798587d 100644 --- a/detect.py +++ b/detect.py @@ -1,171 +1,419 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Run YOLOv3 detection inference on images, videos, directories, globs, YouTube, webcam, streams, etc. + +Usage - sources: + $ python detect.py --weights yolov5s.pt --source 0 # webcam + img.jpg # image + vid.mp4 # video + screen # screenshot + path/ # directory + list.txt # list of images + list.streams # list of streams + 'path/*.jpg' # glob + 'https://youtu.be/LNwODJXcvt4' # YouTube + 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream + +Usage - formats: + $ python detect.py --weights yolov5s.pt # PyTorch + yolov5s.torchscript # TorchScript + yolov5s.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s_openvino_model # OpenVINO + yolov5s.engine # TensorRT + yolov5s.mlmodel # CoreML (macOS-only) + yolov5s_saved_model # TensorFlow SavedModel + yolov5s.pb # TensorFlow GraphDef + yolov5s.tflite # TensorFlow Lite + yolov5s_edgetpu.tflite # TensorFlow Edge TPU + yolov5s_paddle_model # PaddlePaddle +""" + import argparse -from sys import platform - -from models import * # set ONNX_EXPORT in models.py -from utils.datasets import * -from utils.utils import * - - -def detect(save_txt=False, save_img=False): - img_size = (320, 192) if ONNX_EXPORT else opt.img_size # (320, 192) or (416, 256) or (608, 352) for (height, width) - out, source, weights, half, view_img = opt.output, opt.source, opt.weights, opt.half, opt.view_img - webcam = source == '0' or source.startswith('rtsp') or source.startswith('http') or source.endswith('.txt') - - # Initialize - device = torch_utils.select_device(device='cpu' if ONNX_EXPORT else opt.device) - if os.path.exists(out): - shutil.rmtree(out) # delete output folder - os.makedirs(out) # make new output folder - - # Initialize model - model = Darknet(opt.cfg, img_size) - - # Load weights - attempt_download(weights) - if weights.endswith('.pt'): # pytorch format - model.load_state_dict(torch.load(weights, map_location=device)['model']) - else: # darknet format - _ = load_darknet_weights(model, weights) - - # Second-stage classifier - classify = False - if classify: - modelc = torch_utils.load_classifier(name='resnet101', n=2) # initialize - modelc.load_state_dict(torch.load('weights/resnet101.pt', map_location=device)['model']) # load weights - modelc.to(device).eval() - - # Fuse Conv2d + BatchNorm2d layers - # model.fuse() - - # Eval mode - model.to(device).eval() - - # Export mode - if ONNX_EXPORT: - img = torch.zeros((1, 3) + img_size) # (1, 3, 320, 192) - torch.onnx.export(model, img, 'weights/export.onnx', verbose=False, opset_version=11) - - # Validate exported model - import onnx - model = onnx.load('weights/export.onnx') # Load the ONNX model - onnx.checker.check_model(model) # Check that the IR is well formed - print(onnx.helper.printable_graph(model.graph)) # Print a human readable representation of the graph - return - - # Half precision - half = half and device.type != 'cpu' # half precision only supported on CUDA - if half: - model.half() - - # Set Dataloader - vid_path, vid_writer = None, None +import os +import platform +import sys +from pathlib import Path + +import torch + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[0] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from ultralytics.utils.plotting import Annotator, colors, save_one_box + +from models.common import DetectMultiBackend +from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams +from utils.general import ( + LOGGER, + Profile, + check_file, + check_img_size, + check_imshow, + check_requirements, + colorstr, + cv2, + increment_path, + non_max_suppression, + print_args, + scale_boxes, + strip_optimizer, + xyxy2xywh, +) +from utils.torch_utils import select_device, smart_inference_mode + + +@smart_inference_mode() +def run( + weights=ROOT / "yolov5s.pt", # model path or triton URL + source=ROOT / "data/images", # file/dir/URL/glob/screen/0(webcam) + data=ROOT / "data/coco128.yaml", # dataset.yaml path + imgsz=(640, 640), # inference size (height, width) + conf_thres=0.25, # confidence threshold + iou_thres=0.45, # NMS IOU threshold + max_det=1000, # maximum detections per image + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + view_img=False, # show results + save_txt=False, # save results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_crop=False, # save cropped prediction boxes + nosave=False, # do not save images/videos + classes=None, # filter by class: --class 0, or --class 0 2 3 + agnostic_nms=False, # class-agnostic NMS + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project=ROOT / "runs/detect", # save results to project/name + name="exp", # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + line_thickness=3, # bounding box thickness (pixels) + hide_labels=False, # hide labels + hide_conf=False, # hide confidences + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + vid_stride=1, # video frame-rate stride +): + """Run YOLOv3 detection inference on various input sources such as images, videos, streams, and YouTube URLs. + + Args: + weights (str | Path): Path to the model weights file or a Triton URL (default: 'yolov5s.pt'). + source (str | Path): Source of input data such as a file, directory, URL, glob pattern, or device identifier + (default: 'data/images'). + data (str | Path): Path to the dataset YAML file (default: 'data/coco128.yaml'). + imgsz (tuple[int, int]): Inference size as a tuple (height, width) (default: (640, 640)). + conf_thres (float): Confidence threshold for detection (default: 0.25). + iou_thres (float): Intersection Over Union (IOU) threshold for Non-Max Suppression (NMS) (default: 0.45). + max_det (int): Maximum number of detections per image (default: 1000). + device (str): CUDA device identifier, e.g., '0', '0,1,2,3', or 'cpu' (default: ''). + view_img (bool): Whether to display results during inference (default: False). + save_txt (bool): Whether to save detection results to text files (default: False). + save_conf (bool): Whether to save detection confidences in the text labels (default: False). + save_crop (bool): Whether to save cropped detection boxes (default: False). + nosave (bool): Whether to prevent saving images or videos with detections (default: False). + classes (list[int] | None): List of class indices to filter, e.g., [0, 2, 3] (default: None). + agnostic_nms (bool): Whether to perform class-agnostic NMS (default: False). + augment (bool): Whether to apply augmented inference (default: False). + visualize (bool): Whether to visualize feature maps (default: False). + update (bool): Whether to update all models (default: False). + project (str | Path): Path to the project directory where results will be saved (default: 'runs/detect'). + name (str): Name for the specific run within the project directory (default: 'exp'). + exist_ok (bool): Whether to allow existing project/name directory without incrementing run index (default: + False). + line_thickness (int): Thickness of bounding box lines in pixels (default: 3). + hide_labels (bool): Whether to hide labels in the results (default: False). + hide_conf (bool): Whether to hide confidences in the results (default: False). + half (bool): Whether to use half-precision (FP16) for inference (default: False). + dnn (bool): Whether to use OpenCV DNN for ONNX inference (default: False). + vid_stride (int): Stride for video frame rate (default: 1). + + Returns: + None + + Examples: + ```python + # Run YOLOv3 inference on an image + run(weights='yolov5s.pt', source='data/images/bus.jpg') + + # Run YOLOv3 inference on a video + run(weights='yolov5s.pt', source='data/videos/video.mp4', view_img=True) + + # Run YOLOv3 inference on a webcam + run(weights='yolov5s.pt', source='0', view_img=True) + ``` + + Notes: + This function supports a variety of input sources such as image files, video files, directories, URL patterns, + webcam streams, and YouTube links. It also supports multiple model formats including PyTorch, ONNX, OpenVINO, + TensorRT, CoreML, TensorFlow, PaddlePaddle, and others. The results can be visualized in real-time or saved to + specified directories. Use command-line arguments to modify the behavior of the function. + """ + source = str(source) + save_img = not nosave and not source.endswith(".txt") # save inference images + is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS) + is_url = source.lower().startswith(("rtsp://", "rtmp://", "http://", "https://")) + webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file) + screenshot = source.lower().startswith("screen") + if is_url and is_file: + source = check_file(source) # download + + # Directories + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + (save_dir / "labels" if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load model + device = select_device(device) + model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half) + stride, names, pt = model.stride, model.names, model.pt + imgsz = check_img_size(imgsz, s=stride) # check image size + + # Dataloader + bs = 1 # batch_size if webcam: - view_img = True - torch.backends.cudnn.benchmark = True # set True to speed up constant image size inference - dataset = LoadStreams(source, img_size=img_size, half=half) + view_img = check_imshow(warn=True) + dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride) + bs = len(dataset) + elif screenshot: + dataset = LoadScreenshots(source, img_size=imgsz, stride=stride, auto=pt) else: - save_img = True - dataset = LoadImages(source, img_size=img_size, half=half) - - # Get classes and colors - classes = load_classes(parse_data_cfg(opt.data)['names']) - colors = [[random.randint(0, 255) for _ in range(3)] for _ in range(len(classes))] + dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride) + vid_path, vid_writer = [None] * bs, [None] * bs # Run inference - t0 = time.time() - for path, img, im0s, vid_cap in dataset: - t = time.time() - - # Get detections - img = torch.from_numpy(img).to(device) - if img.ndimension() == 3: - img = img.unsqueeze(0) - pred = model(img)[0] - - if opt.half: - pred = pred.float() - - # Apply NMS - pred = non_max_suppression(pred, opt.conf_thres, opt.nms_thres) - - # Apply - if classify: - pred = apply_classifier(pred, modelc, img, im0s) - - # Process detections - for i, det in enumerate(pred): # detections per image + model.warmup(imgsz=(1 if pt or model.triton else bs, 3, *imgsz)) # warmup + seen, windows, dt = 0, [], (Profile(), Profile(), Profile()) + for path, im, im0s, vid_cap, s in dataset: + with dt[0]: + im = torch.from_numpy(im).to(model.device) + im = im.half() if model.fp16 else im.float() # uint8 to fp16/32 + im /= 255 # 0 - 255 to 0.0 - 1.0 + if len(im.shape) == 3: + im = im[None] # expand for batch dim + + # Inference + with dt[1]: + visualize = increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False + pred = model(im, augment=augment, visualize=visualize) + + # NMS + with dt[2]: + pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det) + + # Second-stage classifier (optional) + # pred = utils.general.apply_classifier(pred, classifier_model, im, im0s) + + # Process predictions + for i, det in enumerate(pred): # per image + seen += 1 if webcam: # batch_size >= 1 - p, s, im0 = path[i], '%g: ' % i, im0s[i] + p, im0, frame = path[i], im0s[i].copy(), dataset.count + s += f"{i}: " else: - p, s, im0 = path, '', im0s - - save_path = str(Path(out) / Path(p).name) - s += '%gx%g ' % img.shape[2:] # print string - if det is not None and len(det): + p, im0, frame = path, im0s.copy(), getattr(dataset, "frame", 0) + + p = Path(p) # to Path + save_path = str(save_dir / p.name) # im.jpg + txt_path = str(save_dir / "labels" / p.stem) + ("" if dataset.mode == "image" else f"_{frame}") # im.txt + s += "{:g}x{:g} ".format(*im.shape[2:]) # print string + gn = torch.tensor(im0.shape)[[1, 0, 1, 0]] # normalization gain whwh + imc = im0.copy() if save_crop else im0 # for save_crop + annotator = Annotator(im0, line_width=line_thickness, example=str(names)) + if len(det): # Rescale boxes from img_size to im0 size - det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round() + det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round() # Print results - for c in det[:, -1].unique(): - n = (det[:, -1] == c).sum() # detections per class - s += '%g %ss, ' % (n, classes[int(c)]) # add to string + for c in det[:, 5].unique(): + n = (det[:, 5] == c).sum() # detections per class + s += f"{n} {names[int(c)]}{'s' * (n > 1)}, " # add to string # Write results - for *xyxy, conf, _, cls in det: + for *xyxy, conf, cls in reversed(det): if save_txt: # Write to file - with open(save_path + '.txt', 'a') as file: - file.write(('%g ' * 6 + '\n') % (*xyxy, cls, conf)) - - if save_img or view_img: # Add bbox to image - label = '%s %.2f' % (classes[int(cls)], conf) - plot_one_box(xyxy, im0, label=label, color=colors[int(cls)]) - - print('%sDone. (%.3fs)' % (s, time.time() - t)) + xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh + line = (cls, *xywh, conf) if save_conf else (cls, *xywh) # label format + with open(f"{txt_path}.txt", "a") as f: + f.write(("%g " * len(line)).rstrip() % line + "\n") + + if save_img or save_crop or view_img: # Add bbox to image + c = int(cls) # integer class + label = None if hide_labels else (names[c] if hide_conf else f"{names[c]} {conf:.2f}") + annotator.box_label(xyxy, label, color=colors(c, True)) + if save_crop: + save_one_box(xyxy, imc, file=save_dir / "crops" / names[c] / f"{p.stem}.jpg", BGR=True) # Stream results + im0 = annotator.result() if view_img: - cv2.imshow(p, im0) + if platform.system() == "Linux" and p not in windows: + windows.append(p) + cv2.namedWindow(str(p), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux) + cv2.resizeWindow(str(p), im0.shape[1], im0.shape[0]) + cv2.imshow(str(p), im0) + cv2.waitKey(1) # 1 millisecond # Save results (image with detections) if save_img: - if dataset.mode == 'images': + if dataset.mode == "image": cv2.imwrite(save_path, im0) - else: - if vid_path != save_path: # new video - vid_path = save_path - if isinstance(vid_writer, cv2.VideoWriter): - vid_writer.release() # release previous video writer - - fps = vid_cap.get(cv2.CAP_PROP_FPS) - w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - vid_writer = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*opt.fourcc), fps, (w, h)) - vid_writer.write(im0) - + else: # 'video' or 'stream' + if vid_path[i] != save_path: # new video + vid_path[i] = save_path + if isinstance(vid_writer[i], cv2.VideoWriter): + vid_writer[i].release() # release previous video writer + if vid_cap: # video + fps = vid_cap.get(cv2.CAP_PROP_FPS) + w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + else: # stream + fps, w, h = 30, im0.shape[1], im0.shape[0] + save_path = str(Path(save_path).with_suffix(".mp4")) # force *.mp4 suffix on results videos + vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) + vid_writer[i].write(im0) + + # Print time (inference-only) + LOGGER.info(f"{s}{'' if len(det) else '(no detections), '}{dt[1].dt * 1e3:.1f}ms") + + # Print results + t = tuple(x.t / seen * 1e3 for x in dt) # speeds per image + LOGGER.info(f"Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {(1, 3, *imgsz)}" % t) if save_txt or save_img: - print('Results saved to %s' % os.getcwd() + os.sep + out) - if platform == 'darwin': # MacOS - os.system('open ' + out + ' ' + save_path) - - print('Done. (%.3fs)' % (time.time() - t0)) - - -if __name__ == '__main__': + s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else "" + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}") + if update: + strip_optimizer(weights[0]) # update model (to fix SourceChangeWarning) + + +def parse_opt(): + """Parses and returns command-line options for running YOLOv3 model detection. + + Args: + --weights (list[str]): Model path or Triton URL. Default: ROOT / "yolov3-tiny.pt". + --source (str): Input data source like file/dir/URL/glob/screen/0(webcam). Default: ROOT / "data/images". + --data (str): Optional path to dataset.yaml. Default: ROOT / "data/coco128.yaml". + --imgsz (list[int]): Inference size as height, width. Accepts multiple values. Default: [640]. + --conf-thres (float): Confidence threshold for predictions. Default: 0.25. + --iou-thres (float): IoU threshold for Non-Maximum Suppression (NMS). Default: 0.45. + --max-det (int): Maximum number of detections per image. Default: 1000. + --device (str): CUDA device identifier, e.g. "0" or "0,1,2,3" or "cpu". Default: "" (auto-select). + --view-img (bool): Display results. Default: False. + --save-txt (bool): Save results to *.txt files. Default: False. + --save-conf (bool): Save confidence scores in text labels. Default: False. + --save-crop (bool): Save cropped prediction boxes. Default: False. + --nosave (bool): Do not save images/videos. Default: False. + --classes (list[int] | None): Filter results by class, e.g. [0, 2, 3]. Default: None. + --agnostic-nms (bool): Perform class-agnostic NMS. Default: False. + --augment (bool): Apply augmented inference. Default: False. + --visualize (bool): Visualize feature maps. Default: False. + --update (bool): Update all models. Default: False. + --project (str): Directory to save results; results saved to "project/name". Default: ROOT / "runs/detect". + --name (str): Name of the specific run; results saved to "project/name". Default: "exp". + --exist-ok (bool): Allow results to be saved in an existing directory without incrementing. Default: False. + --line-thickness (int): Bounding box line thickness in pixels. Default: 3. + --hide-labels (bool): Hide labels on detections. Default: False. + --hide-conf (bool): Hide confidence scores on labels. Default: False. + --half (bool): Use FP16 half-precision inference. Default: False. + --dnn (bool): Use OpenCV DNN backend for ONNX inference. Default: False. + --vid-stride (int): Frame-rate stride for video input. Default: 1. + + Returns: + argparse.Namespace: Parsed command-line arguments for YOLOv3 inference configurations. + + Examples: + ```python + options = parse_opt() + run(**vars(options)) + ``` + """ parser = argparse.ArgumentParser() - parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path') - parser.add_argument('--data', type=str, default='data/coco.data', help='coco.data file path') - parser.add_argument('--weights', type=str, default='weights/yolov3-spp.weights', help='path to weights file') - parser.add_argument('--source', type=str, default='data/samples', help='source') # input file/folder, 0 for webcam - parser.add_argument('--output', type=str, default='output', help='output folder') # output folder - parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)') - parser.add_argument('--conf-thres', type=float, default=0.3, help='object confidence threshold') - parser.add_argument('--nms-thres', type=float, default=0.5, help='iou threshold for non-maximum suppression') - parser.add_argument('--fourcc', type=str, default='mp4v', help='output video codec (verify ffmpeg support)') - parser.add_argument('--half', action='store_true', help='half precision FP16 inference') - parser.add_argument('--device', default='', help='device id (i.e. 0 or 0,1) or cpu') - parser.add_argument('--view-img', action='store_true', help='display results') + parser.add_argument( + "--weights", nargs="+", type=str, default=ROOT / "yolov3-tiny.pt", help="model path or triton URL" + ) + parser.add_argument("--source", type=str, default=ROOT / "data/images", help="file/dir/URL/glob/screen/0(webcam)") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="(optional) dataset.yaml path") + parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[640], help="inference size h,w") + parser.add_argument("--conf-thres", type=float, default=0.25, help="confidence threshold") + parser.add_argument("--iou-thres", type=float, default=0.45, help="NMS IoU threshold") + parser.add_argument("--max-det", type=int, default=1000, help="maximum detections per image") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--view-img", action="store_true", help="show results") + parser.add_argument("--save-txt", action="store_true", help="save results to *.txt") + parser.add_argument("--save-conf", action="store_true", help="save confidences in --save-txt labels") + parser.add_argument("--save-crop", action="store_true", help="save cropped prediction boxes") + parser.add_argument("--nosave", action="store_true", help="do not save images/videos") + parser.add_argument("--classes", nargs="+", type=int, help="filter by class: --classes 0, or --classes 0 2 3") + parser.add_argument("--agnostic-nms", action="store_true", help="class-agnostic NMS") + parser.add_argument("--augment", action="store_true", help="augmented inference") + parser.add_argument("--visualize", action="store_true", help="visualize features") + parser.add_argument("--update", action="store_true", help="update all models") + parser.add_argument("--project", default=ROOT / "runs/detect", help="save results to project/name") + parser.add_argument("--name", default="exp", help="save results to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--line-thickness", default=3, type=int, help="bounding box thickness (pixels)") + parser.add_argument("--hide-labels", default=False, action="store_true", help="hide labels") + parser.add_argument("--hide-conf", default=False, action="store_true", help="hide confidences") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") + parser.add_argument("--vid-stride", type=int, default=1, help="video frame-rate stride") opt = parser.parse_args() - print(opt) - - with torch.no_grad(): - detect() + opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand + print_args(vars(opt)) + return opt + + +def main(opt): + """Entry point for running the YOLO model; checks requirements and calls `run` with parsed options. + + Args: + opt (argparse.Namespace): Parsed command-line options, which include: + - weights (str | list of str): Path to the model weights or Triton server URL. + - source (str): Input source, can be a file, directory, URL, glob, screen, or webcam index. + - data (str): Path to the dataset configuration file (.yaml). + - imgsz (tuple of int): Inference image size as (height, width). + - conf_thres (float): Confidence threshold for detections. + - iou_thres (float): Intersection over Union (IoU) threshold for Non-Maximum Suppression (NMS). + - max_det (int): Maximum number of detections per image. + - device (str): Device to run inference on; options are CUDA device id(s) or 'cpu' + - view_img (bool): Flag to display inference results. + - save_txt (bool): Save detection results in .txt format. + - save_conf (bool): Save detection confidences in .txt labels. + - save_crop (bool): Save cropped bounding box predictions. + - nosave (bool): Do not save images/videos with detections. + - classes (list of int): Filter results by class, e.g., --class 0 2 3. + - agnostic_nms (bool): Use class-agnostic NMS. + - augment (bool): Enable augmented inference. + - visualize (bool): Visualize feature maps. + - update (bool): Update the model during inference. + - project (str): Directory to save results. + - name (str): Name for the results directory. + - exist_ok (bool): Allow existing project/name directories without incrementing. + - line_thickness (int): Thickness of bounding box lines. + - hide_labels (bool): Hide class labels on bounding boxes. + - hide_conf (bool): Hide confidence scores on bounding boxes. + - half (bool): Use FP16 half-precision inference. + - dnn (bool): Use OpenCV DNN backend for ONNX inference. + - vid_stride (int): Video frame-rate stride. + + Returns: + None + + Examples: + ```python + if __name__ == "__main__": + opt = parse_opt() + main(opt) + ``` + + Notes: + Run this function as the entry point for using YOLO for object detection on a variety of input sources such as + images, videos, directories, webcams, streams, etc. This function ensures all requirements are checked and + subsequently initiates the detection process by calling the `run` function with appropriate options. + """ + check_requirements(ROOT / "requirements.txt", exclude=("tensorboard", "thop")) + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/examples.ipynb b/examples.ipynb deleted file mode 100644 index bebc3088f4..0000000000 --- a/examples.ipynb +++ /dev/null @@ -1,471 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "name": "ultralytics/YOLOv3", - "version": "0.3.2", - "provenance": [], - "collapsed_sections": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "accelerator": "GPU" - }, - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "HvhYZrIZCEyo" - }, - "source": [ - "\n", - "\n", - "This notebook contains software developed by Ultralytics LLC, and **is freely available for redistribution under the GPL-3.0 license**. For more information please visit https://github.com/ultralytics/yolov3 and https://www.ultralytics.com.\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "e5ylFIvlCEym", - "outputId": "fbc88edd-7b26-4735-83bf-b404b76f9c90", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 - } - }, - "source": [ - "import time\n", - "import glob\n", - "import torch\n", - "import os\n", - "\n", - "from IPython.display import Image, clear_output \n", - "print('PyTorch %s %s' % (torch.__version__, torch.cuda.get_device_properties(0) if torch.cuda.is_available() else 'CPU'))" - ], - "execution_count": 2, - "outputs": [ - { - "output_type": "stream", - "text": [ - "PyTorch 1.1.0 _CudaDeviceProperties(name='Tesla K80', major=3, minor=7, total_memory=11441MB, multi_processor_count=13)\n" - ], - "name": "stdout" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "7mGmQbAO5pQb", - "colab_type": "text" - }, - "source": [ - "Clone repository and download COCO 2014 dataset (20GB):" - ] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "tIFv0p1TCEyj", - "outputId": "e9230cff-ede4-491a-a74d-063ce77f21cd", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 221 - } - }, - "source": [ - "!git clone https://github.com/ultralytics/yolov3 # clone\n", - "!bash yolov3/data/get_coco_dataset_gdrive.sh # copy COCO2014 dataset (19GB)\n", - "%cd yolov3" - ], - "execution_count": 0, - "outputs": [ - { - "output_type": "stream", - "text": [ - "Cloning into 'yolov3'...\n", - "remote: Enumerating objects: 61, done.\u001b[K\n", - "remote: Counting objects: 100% (61/61), done.\u001b[K\n", - "remote: Compressing objects: 100% (44/44), done.\u001b[K\n", - "remote: Total 4781 (delta 35), reused 37 (delta 17), pack-reused 4720\u001b[K\n", - "Receiving objects: 100% (4781/4781), 4.74 MiB | 6.95 MiB/s, done.\n", - "Resolving deltas: 100% (3254/3254), done.\n", - " % Total % Received % Xferd Average Speed Time Time Time Current\n", - " Dload Upload Total Spent Left Speed\n", - "100 388 0 388 0 0 2455 0 --:--:-- --:--:-- --:--:-- 2440\n", - "100 18.8G 0 18.8G 0 0 189M 0 --:--:-- 0:01:42 --:--:-- 174M\n", - "/content/yolov3\n" - ], - "name": "stdout" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "N3qM6T0W53gh", - "colab_type": "text" - }, - "source": [ - "Run `detect.py` to perform inference on images in `data/samples` folder:" - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "zR9ZbuQCH7FX", - "colab_type": "code", - "outputId": "49268b66-125d-425e-dbd0-17b108914c51", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 477 - } - }, - "source": [ - "!python3 detect.py\n", - "Image(filename='output/zidane.jpg', width=600)" - ], - "execution_count": 0, - "outputs": [ - { - "output_type": "stream", - "text": [ - "Namespace(cfg='cfg/yolov3-spp.cfg', conf_thres=0.5, data='data/coco.data', fourcc='mp4v', images='data/samples', img_size=416, nms_thres=0.5, output='output', weights='weights/yolov3-spp.weights')\n", - "Using CUDA with Apex device0 _CudaDeviceProperties(name='Tesla K80', total_memory=11441MB)\n", - "\n", - "image 1/2 data/samples/bus.jpg: 416x320 3 persons, 1 buss, 1 handbags, Done. (0.119s)\n", - "image 2/2 data/samples/zidane.jpg: 256x416 2 persons, 1 ties, Done. (0.085s)\n", - "Results saved to /content/yolov3/output\n" - ], - "name": "stdout" - }, - { - "output_type": "execute_result", - "data": { - "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYF\nBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoK\nCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCALQBQADASIA\nAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA\nAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3\nODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm\np6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA\nAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx\nBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK\nU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3\nuLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD8347F\n5pkSP5t38P3ttaFjZzR2rzOMjfs+/wDNVi10+5kh877Gqv8AwfP96tOz0+2b99sw0e1drfxV87HY\n+wjHm94z4bOZ2WZ4dgV9vzN81Tx6a8jHvu+bd/DV+HT51uHd0Up95Pl21bhtfIkH2ncqfN8q/e21\nNS0dUbU4/ZMf7Oi52OzMu1UVU+an/wBjlW3w7l2t8y/3q3pNPRl2I+1tn/AqZZ280cXk3Nrub+7v\n+6tefKtLl5onZGm48qMqbQ3k/wBJeb5lb5PMf5l/2aZcaW6tshhyzffZn3ba3biHzI5USFfmX7tQ\nyWc3zTXltuWPb+8jT+LbXJWxVWO534XDxkchrmm/KZt+d3yvurBm0maHLvu2su1G/vV3OsWsMe5x\nyWTd5bVh3VikkLJ5Pyqu7b/easaNacX7x6nsYyicrJYws3nom1m/vf3qWC3uYW32zr8v95v/AEGt\nK6s5I9iJuDMu51aq62827502Nt3Jur6zAylKUTlqREj+0wsiI7OzNuRW/wBr+7ViSPy4/wBzud9+\n1vm+Wq0aurIJtxdf4qtLayeX8nyusu5mb+KvqMPSlKJ58qnvco65uHaNpvlTdt2fJ8y0kjSbER3V\ntq7tzJtqbyPtDLDNtx96nTKjR/Ii7t38X3a9D2fKebUkoy5SHyXjnP75l/i/3amSSVm+0v5joqbf\nv/Ky/wB6i3/fRrv+9911j+6rUsMMuxvJufu/fXZXPKXLE4OaUuaxPBv3b9n+r/hjl3LVqH9zJ/qV\n2t823/eqtbwpHGkP+qVn+dY/l/4FVuzZLqRI5plV13b12fdX+GvLxHvF04825p2cm1Ucopdvl+V9\ntaVvDcSSK6fd+ZXrN0+GGS637F+V1aXd/d/hq7b75mX51Db9zMr/AC/7Py14WIqSNadHuaVjNLJC\nsP2pmTfuddvzNU8jO3yQ7X2/e/iaq8IeGNPLRW+bbu2fdq95n2OZXhhV2b5V3V4dap7+h6VOnHqW\nob792yI6o6orfLVCZJpPnudrBf4v97+KpmuIWmDzTKsrfdXft+7VCS5dpmR5o3/vq392uJSjztQO\nlx928hzbIZXSFFLs7fMqf6yopmubzY63jIVb7qrU32OGSP8AhRPveXHSyKluy/J975VXf/FWkqnN\nqLk5fdEntdy/3vl2eZs/76pU3yQyJsYeX8if3lqwsE0iy2zzfuvl/d/7VVr6O6WTf8yfe/d7/u1n\n71TRSMK0R8d1cxwrvRQv3dzfdWoprp75hNc3cjtHtSLzG+61OaGaS3RJnV1+88bVVkkRlKWtthlf\n+GspRhKRjH3Y8rKuoXtvHteN8qy7X/vVga9cXisrpcthkVfm/u1pXk00zAu+R/d/utWDq14+5n34\n2/6rav3a78PFRj8JyVqhj6lM/wC8+8f/AB3dXManN82/fjd/CtdBqW+4bM0/Gzc1Yd48Pls/Vm+X\nb/FXsUYy5NDxsVLmiYF9avt+07F21QVXmuNmzb/utW9cWbyR56hVqnHp7rMJvJ8xK9CnKMeU82T5\nhljlWZE3fN9//ZrodI3x7ntn+Rk2srfM1V9N03bGOdu7/wAdrVhs4I5BGiMk0f8ADJ8tEqhrToz+\nI1NLtUinR9+fLf5F/wDsa7bQZnjwibU2/N+7X5VrjdH/AHKxBE3f367TRZE+x7E2/wB1dv3mqo1P\nfOj2fuWOu0W4k+ziF5sOzfxfw11ui6uNyu6Mrqu1/Mfb8v8As1wWk3KOuy28xVVvnb+7W/puqQxs\nU3/eiVmj+9XZGpzmMoyj8R3Wn6kQN8Myh1f/AEfb93/eatXT9am8ve+1vvbmrgrHWd0iXOcFfl3L\n/F/wGtCHxB5K+d8wSR9qKq/M3/Aa6OYw9+J2q69C3zpZttX5Ub+9/vUybV4IYd+//WbtzL/Ctcqu\ntbYf3fmHc+1/mqvcawk3ybJCu/b9/wC9U/DAfunT/wBtusCv0/2d/wDDWbqGuosbO8jEt91tvyst\nYN9q226ldH2xtt8qNX3f8B3VVvtUm2l3TLsnzLu/i/hqJRjI25vslPxRNDdZm85iv3fLb+GuMvJ3\ndXR/uK23/erW1PVHuomQXLFpJfkZvur/ALNZGqQ/aFb5G+V/3sa1x1I8x0UeaOjOa1SG2ml85Pv/\nAMO5vlWqtvbupYOmPLf5d3yturcbTkjdt6Mxb/lm38NQXWnpJcM8iSO38Un8K1nKn7p2RqQ5tTPW\nFJpD5czIn97726mTWVzIHfez+Z/yz/vVZa1eSTZDCqqqNu+fbSLYwzRuXhxufd9/71cNSnI0lUM2\nSN1CwpMuyT5tv/stJbxurI/nL+8ba0cn92tXybaOSHyYfuxbtrN8v3qq3Eltu+0+T86tt+VK5q1P\n3tCoVOXWRbtWdcoltv2tu2t8u6uj01na3TZuAVt27+61YNu7s0jzbWlb5U/hrQ0+aGObzo3bzl+X\n7/y7q+Ox1GXNKTPewtT4ZI7LT2T/AFM03mt8q7v4a0WuvLUI+6H5v9Wvzbv+BVzVnfTeSH/55q25\nd/3m/wBmp/7UdpI+Nqt8rbWr5DEYeUqp9DRrfDzG5cXySsN9zuVot6qybvu1m3mpRrD5iO0KSRbv\nlf5aqSal8zbNuPm2/J8q1Uk1QSM73KKrrF8nlr8u6tKOHUZe8dvtOhPeahD5yc7v3X975t1Zs0zr\nsfo2/wCZW/h/4FS3F4jKkEyMXX5X3fdaqzLBNJscrsZNqqv8NexhcPGPuozqVOWHKJe+c0hf7Tv3\nfL8tVri3DSPD9pUyr/F91d1aEljH/wAvMylG+4yp91aktdPeRc+Tv+f5fk3V9XluH5dTwcdiIx+0\n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\nvn8zZsVQ331rqpxkfP4rFc0C2s/nRsgdgrfw02OQM3kTOqt81Uo5jAm9HXYrVKt09w29H+Zf/Hq6\n4xPm8VWjI0beR1ZXebFaFu6Kqv53y/x/7VY+nnzGdH/v7fv1q2UcMi42ZVf4auPvfEeTKsadnI7f\n3lVtvzLWtp6vcSNvfd/C+5vvLWdpsMfmb4YeG2/NJW1pdn/HNGuF+7toiebKpzGvZWc0kTfOoST+\nFfvV0+l2u2ON/wB5Ky1l6HYv8joinau35v4a6Tw7ZpbrsuYV2xr83z/dqjGUjf0uzRVTemNybkX+\n7WvZWjyLseHLM27dHTNDs5PLjSG227k3L/tV0ljYoy7Id29VbfuSuj4jn9oYk1ik0Lby2Nq/L/da\npnsYWjWHft+Xc6t/C1a0ejzTbYZodu7+L+GoptPdZGd9yfwfK/zbaXL9o6aMvfMWKzmaQXPzOW+X\ndv8Au7aelj/pBmmm2CTbv/vbavrZpC3k23mfvP4ZPvLUV1Y7YV8t8lU+6y1Mox5eY97Cy90z9Qs7\naRlmRGdftG1Gb+H/AGq5vWtPmWRtk38X3lauwuI4f40k2/wMv96uY1SL7Ll9i/MzfKrbvmpxjCXv\nHvYaPwqR57r1i80LzQv5yM3yM3/oNcT4k099zJvY7vl+X71eoeIIdyt8jL8/7pv7tcZrln50bokb\nfL8yNXJWl/MerHC83vHtWnw20Ku8ybx5v3l+8rVLbxPcM6eTH5SuzRMvysrVWguIFZjZupSNvvMv\n3m/+Jqe3vv8ASPJ+zM+1V3V40Y8sD572nKX7G1eNv9JRX+Xcn8VaMLQyKfJf+DaisvzL/wACrPju\nPJbY8n7pn3LGqfd/4FV6Fu1y+EVdyN/tV59eT/lO6lU5pXEuo4VkKPtY+UqusbfN838VRR2rxyK7\nuwZanuJE+0OkiKX2b/lT5ZGpjWyKrnyVf+P5W+Va4qlSUdz0Kceb4RtqsMzTb4ZG3S7fJb/0Kh7X\na4he58pG/wBarN92kjj3fvnTciozOq/LtqaKGCSM74ZHf76/L/s159SpyzPQox9zmMKSzS8mm8l1\n+V9sUjferOuLeSa4NzsyVXbu+X71dFfQzKpuUmhXbKvy7KzJreGNXTyV+aqo83tTo5onNXivDIzu\nq4/gbZ92sjyUuJNjzSbYfufPXVala/u96bvu/MrL/DWDcaanyv5ap8vyf3mr7DLeaMtTGpy/ZKK2\n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\n91Ur6Wn8B4GKrTj8RXW3dbcTO6kr/wCg1T1DYq+c83nBk+6q/NurUkXylTyYdi7W+bf97/erM1KO\nTzGhkddq/fVfvLXVznjS/eTKU0yRqiOjK23bu30xmRZHh85W3Ju3NTm2Qwsm+NV3/Kzfw/7NUJIJ\ntu9Eb7tYVqnLA66VHl91FqzmEkgR3+Vm27Vras1SNv3j7hs+da5+GN1WJH/v1rWsiLMEdGRf7zfN\n8tfO4yoviieph6b/AO3Td09vLVN9xwv/ACz21pwyP5n+uVdv8TN93/drHt5h5KnzlVt38X92rX2j\nY3zzZSTn/a2/7NeBiKnMe1Rp0oxsaDfvo2R3X73+81PmvppJnhRI1T5W/efN8u2srzh9jHkzMj+b\ntVmX+H/drQW8dbcojq7sirukrzub3To9n7pct5NyiH5Xb7q/JVi2uFmkV7l8+ZFsX+8u2qNuqSXH\n3Nu1/l2/K27b96tGG1/ePO9z8nyq7L92n8RxyjOPvGlpsbtbrBvU7fm+arG2aO5EiOy7m+6v8W6q\n9v5MS+T5Ko+5W3M//stWVtX8z9zI29kb5aJSl8jGMPaTlcfFb+Wzw79219u6RtzK1CrBJGs002W+\n98qfK1TKUlVXmTZ8q7lX+Ko2t7xWZ3s1Rvv/ADP96s5QjHYdpcvKQNcwzWr3Lwsqqm75fvVZ+yws\np/cyB9n3f4qdHJMd6OmPlX5VT5mplwlzbyJNs27tv7xX3NWkY88uU5a0fd1MTUJLPS4d6I2WT59y\nbtrVz2oD7ZI3+jNuX+JvustdLr8b3FwbyHa6q+1/nrmtQjhj3Qr8r7PutXp4enzR0ieFiJc0vdMG\nSNGmfy0+79xtlV5rP9800O1/78f8X+9WtdbJMujx/c+ZlWqSq8LP8/zfdx/Etepy/ZPPqSIPLmk+\nSH+/tl8xKm8sTWod4WdN38K09Y3bHljcy/f/ANqrNrF9on8ma8YBf7vzbf8AgNHs/dLoy5oFTyxt\n/fQqd3ysrfLt/wB2q7WKRxtvRn3N/vbq2pFSZg8Kb1Vtu1v4mqvHY/vS8lsqH7zyRvUS9064/EUd\nPs/vIYedvyK38NXYI/KjdJY1wzUW8yfczj/aX/e+7UazPbt5PzP5bbvm/u1hGUo/CdX2UmWW85t0\nyfMi/f2/LVnT7qG3j2I+FX/lnJ/DWbDJNcyM7pl2b5Pn+X/vmq8175LedPNhfu/NXXRqSOSpH+U2\n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\nG3aT52R2/iZ91WbG4ubxU3oqtCnO3+L/AHqY0aeYfk4/jVk3bqs2qouxLby3Zv7v8VaSj9k5o80f\neiXFluYIymzfuRmVm+XbVG6uEudnyMv97/7KrtxJPas1siKdy/8AAf8AdqqzblPz7W+8i/3v9mue\nVOJ3U6k46kdmm6B3dF3btqN/eqK3kht0875R95UVnqeOzdW++q+Z8ybX+7VW4tXaFvO279/+r27d\n1cUjujIja82qZktpB/eX7u3/AGt1Z1zN5zNsmbcz7nXbuq81unk/vofvJ8se/wC9WfcRurb0fau/\nbtq6fu+8jOt7xUk1B1WTyfM/up822rljefbEV9/+rX+5urMurV2kXzo96t/E33VatDSLd7WPyfJb\n5fl3b91d9OUZHl4j3S6slzcXH+kou35WRo/vbq19PsXk8rO0r/dZfm3VX0ux8xvnRiy/Kir/AAtW\n7b2rtdxfeP8A0zVf4v8Aarsp7nl1JGjpOmuqrMjrI392T/2Wu/8AC+gyTQpC8LItx/qtz/d/2mrn\n/C2hwrIp34+TcsjMv3q7nw3pqN5Oy6jl8tNyK33V/wBmu6MfcMpS5Td8N6Gka/cXK/K7L826uisd\nFSOTzrN87n3IzfK3/Af71L4ftk+WZIWXyU27W+827722uv0vT7NcTW0PzKu6L+L/AHq1j/eMJVDH\ns9DeNkm/eMy/f3Nt+WrUfh547dtu75XZvMjeunsdLSZRvh3rJ8u3f81XLXQvs9u+9Pn3/wASfLU+\nzjIXtDgtQ8L7Zg8N43zbnZpG/iZawbjQ3tVXy0/1f3F3bt1el6l4fmkm+eH5W2q9ZWoeH/L/AHz2\n0brH9xlT5ttPllFEfWOb3Ueb3Wg+XC37nfF837uT7y7v7tULjQ4Zt3yZVf4ZE+9/vV6LeaO8kISZ\nFVlRvvJ/3ytZF94deOMTb13qittWplTgP2nvcqPPrrQ/OVXhkZEVf7tVL7RUmj/cvuZfvrurtbrS\n38mS1/eK33vm+6tZFxZ+XDJDZ7mf+8y/w/3q87EUzuoyOUuofJDQ+S26T/Wt/wAtG/3agns3jkUz\nOySRp8n8Lba2ptNRsXj/ACvv2hZPl3VUvkdt0z/Kd+xdr7lrxsRRly+6e3h6nKUP7NhkjZHm3CRP\n4W+VmWkRfsrRW0MbDzPm3ebtWpNQ+ztH8kOxpG3Oq/doS+RpNko/65K391axpYfm3Oz238pdt7N9\n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\nO/i/vf3dtZ95dfaIVhtvn8v5mVlr0InDUo80TOW18tok8n5pP+BLS2qwySb4XVhu2eY3y+XSsqeY\nzo+Fb5f+BVFBM+4QuVVt252at/sHNKny6lqa3gVfJR2O7/x6k+xp5aOk27/Zao4ZJo7jydmdvzKz\nJ8rf7NWLFXZGhk25b7lY1Iy5CqPuysxzWKXEJTydq/eVaoXcP/Lbeu/+8zVqws8MZePlGfb81Ubq\nNFYQfNmvN5pRm7ndy/CZkmn3KIj71/iXa3zMv+1UNxp6bvJ+6rfwtWxb27+YvnJt+b7qru3U8Wby\nO/7lTHH8q/J8u2p+1Y1lH3eYxI9D3KEtvL2bmbbJ/D/u1paboMKyqgfJXa0XyfM1ai2KK290/wBc\nvybl3eXWja2Hl7NkLfwrtrqjzR2PLxEeYraXob2uLqZGdvvLt+Xa1bGj6Sizfvty+Z9/5Pu1Lpun\npuKQwfOu5vmb5dtbGm2aSGLfCzIvy7d6/N/vV6VH3Tx60eXcvaRZWzTJMiRukfy7v4dtdv4ftkWN\nXt/lVvm+X5ttY+m2MMe1Lb54ViX5tm75v7tdh4fsbbzYXg+UMvzf7VenH4DzK0v7x1GhrN5imZGd\nfN+TdXa6LbwxRmFIWV9n+98tc34dVI5IYXm2szfIv3v++v7tdzp9ukE3/HzJumi2+Yq7q15TjlKW\nxcs9Lgjj+zQpG0m1d8n8W2tLb5luk3kqzeVsfcvy/wC9/vUy3tbbcPvff27l+XctXriFI7dnR8hf\nl8ur92RMako6uRz0kE0yO6RYfd8m7+7/ABM1Z91paLJK6QsRvXdt+6tdHLY+cuxEb7m5vmqnNbwL\n++N4ybk3P/wKp+EdOXNPU5TVNMhmf/j2yypt3M/ytWZe6akcOy3dUSRdv3/u/wC9XUSWPnMsPRPm\n+Zv4m/vVi6pDNbnzoX2DY33f4f8AaaspbnXTp+9zHI6lZ/vvn8tmX77bNq/7O2sK+08Nu2IrTN/d\n+XdXW6zsmt08yGNPM3bJNlYOoWm5WSaHZ8v3o5f/AB6uKodtPc5XVLMNl0TL7W+X/arCvLWGORUT\na3l/Nt/2tv8A47XXalb2DRvD58yFU3K0fy/N/drC1iz25d9qSfefdXnVNzvoylE5uaFI5vO+VGb5\ntrS7qVrBHUpv81YUVt38S1eutPS4vI9/Kr9zau2oGi+xvsfzNzfLtX+7/vVivdj7x3RlIns2SMtb\n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\n393zLtqzp9r5yoj8srbn2ptatJbWf59+7ayr5TbPlq3baO903n21h5rTJ+9k37a6nhf5jj+tdYme\ntvcs0qWzrGiy79u/5VWrEem37R8WzNFG/wAjf7O3dW9a6M93a/Y4eNsS7f73+7Wuvhua3t0RIcBl\n+8ybmWulYWO6iZ/Wub4jgLrTZplfYnyx/K8f3GX/AOKrIvtFSa6WdIVDNE37tv4a9Pm8N2zfunSP\n5U+by/vVmXmgpIXZIVUK6/M3y/ereOHN6dblhyyPOW02ZmX7TDGhX5vMX5qik0l7ryZEfD797Kv9\n6uuuvD940bJNBmL5t6x/eaof7F8pQ7wqfk2rG1dEafLLQ1jaUTiNW093Xy9/H3W/vVjXXnWse+GF\nflf96rV2uraLcyXCfaU2/J80kf8ADXO6lb2zSPDMm4bl+8vzM1acvML4b2OcvJYdzzfc2/8ALP72\n2qYW2WZnmm+T+Nlf7vy1q61YJaxl3mUbpVX5fvNWHJcTsxtrNMbvmRtm5dv8VLm5jCpHmNFdjTBE\ndgrLtdo2+Vammme1tWT7Sy/N+63LurJsbqcyL86k7vnX+9VxZHWNn8ltzN97d93/AGawlHuc3uxi\nW5Lzasczool+6/8Atf8AxNX7fWJoWFmlziRf4f73/Aqwn1Ldsd03Lv3Mqp93/ZqzDeQtGzojfK+3\nb/CtedUpx59TSNTrE3ZLzbbh5pvnki+997bR/aM3lnei7/8Anmr/APs1ZjXXlL5cKZiVF+9821aR\nbyeaRnRFdpPvt/DUU4zJlLlNL7a8kozt+XdvZf8A0GtDT5t0K3LzfL/tPWJY3XmIUwqf8D+61aOn\nxJN5X3d+1tq/7VehRX948utLlN21V1kkkvHj2fLs2/7tXdLjfzmd4chfk+b7sf8AtVjW83lxhPPz\nu+/H/Fu/vVs2u+ZDM8zP86r8qbd1eth4nj4iUZbnUabsZkj3/M3ypu+Wur0e4S1kRIZv9Yn3m+Wu\nO0ny5LtIZH+dfli3fxVp6ffIMJOke3ft+b5q9OMfcPFrSlGVz0XR791txNG+3b8u5v4q7LQb+aNX\nud+Ek2/w7v8AgNeX6HqyfZd8nlqI3VX/AL3/AHzXVaLrkELOm+QKyfPItEo+7YzteVz0GHWnjuok\n+Xav31/9mrSXWoVUbHjmb73l7vvVwNj4gs7phZ3LyMyxM0TKny/8Cq3a6kjRpvfYy/JLtrlqS+yd\n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\nwnDUqcpd0nQflZ4dqCT5t2xa6XS/D/2WRT5KylovlXf92m+G7Hy42R4Y/lX5Y2+81dRpemz3DedH\nCqKq7WWuiMYxOTnItJ0mGHGyFX3fc2vu+b+Kt6Hw+nmJ5NsrPs3RM/y7avaXDDEqOkO6Rf7q/M39\n6tSNWUeT5Mgfyv8AVslVyoPacpzt5oqfaH3x7P73yVz+vaf5N4IZvl875tv96u8uNnlq8yM77G3/\nAN2uY1y1toZQmxim3dub7tR9s05uY5HVLNId3nXO1PK3/wC1/u1y2rxwzXDXnlfIqfupG+9/wKuy\n1OzdZEROYZH+eRVrl/EEbrOdm7dJ8rM33flpcstzrpz5ZnC69Gk0PyQ7VZP4vl3V5n42jtrWN5rW\nFSvm/Ntr1HXGtrje947YjZvm+7XlHjBf9KdXdW3fw/dWplycp0U6kzzTxhHN9n/dzRj593y/e21w\n2vSbt0Pn7UVN3+9XZ+KrhLjzNj/OqNu2/NXmPii6fzCgfmuTlnUNpYiKj7xkapq339n3l+X5aybj\nVo5o3uTNsbft3bqra1evv3pt/wB5aw7jUn3bHf7v96q5f5ThrYj2kTrbbXAu0Qvtdfm3fw1M2tbm\n/dvt/wDZq4qDVnXcm/5W/iar1vqHmN8s2zb83zVPs4GPtpHVtrGzDo+4slH2xOHTr/HtauZXUjEr\nfx7akW+SSX5Hb+9RGPLIylUlL3Tp7e82yNNC/wC8X5W3fw1o2+pbmS6d13L/AMCrkbPVIWj3b/8A\ngX+1V2z1KaR12Ps/2W+XdW0Y++Zne6frUisk33l/u7a1G1rzo94uWZfu/d27WribHUHCqkz/ADt8\n1aNvq02GTdtT+9XVE5PiOzt/ELzY2eWxVfmZvurUq+IkDNs++v31/u/7VcnDqE0e2GP/AIDIv3at\nRsny/ZptjfxL/eWtfQw9mdtpesTSRLDNPuRl27V+Vv8Aeras9afckO+R/wCL+8v+zXDWM3mKrveN\nv2bXZvurW3Yx3iQo9tN5u51ZmZf4a46lTlOqjTj0O5s9Whjt/tKcv/Eq/Ntq0uuTSQib5n+fb/vb\nq5axurmH/j2T7ybmZfvf981oWupQxwh0fbD/ABs396vKxFTljc9jC0eaVuU2LzxAkbeTDu2x8O38\nVU7jWHtY97zYWR/ut/erKa886b7Sjrs3Mu3+9ULMklm9tN8gjb5Nv96vHrYjmie9h8L7xp/2k95n\n7THt8v5YlX7rf71QNqk0m3ztvy/3v+Wf/wAVVNbp2iDoi7Ff96v+zTJrvzGWGH5l2fI2yuKnUO6N\nGP2R8l09xDLM7t8ybflrCvG8xvJ+aLd/e+b5q0Zri5EbW29QjfcZv4qyLxv3Ozeys3y7v9mt6dT2\nmiMKlGMdzO1LfD+57b2+Vn+6tZF1Hc3HyJCzIv8AD/E1aF1cQtCm7978+35qq3F8scnkww+Udu1t\n396uzmlGN0cnL7xm/YdzMiJhtu35kq3Z8Q/+O/LTFm3TFPll3L91W+ZalhZ7e4X59u37lRKfLoOn\nTL1qsO9eVX/erQ0/93Ku/wC6tZO55JGSZPu/+O1saDeJ5fkv50oj3b2kT71EIyj7xrKPtNDqNBuE\n8tUdGZlbduX7tdZoN5IJmkT5nb7i7flrh9NuEjZEd8Kvzf7VdLY6k+5U3yCX5djRsv3a9bD1PePK\nrU/d5TvtHktvs7Ojs+59qQ+btWP/AGq3dN1KaNlufO3sqfdb+KuG0rUvMjMzuyuu392ybv8AgNbO\nn3XlqUSZdvzf7NejTqHmVKPKdha6p5ln/rmj2vtdZF/i/wBmte11S8gjF5ZzM7r8sqtFtVa4qHU9\nsIn+Vmj+VlZ923/ep1nrUzTGQXPPyqzNXo05dzzq1PmPQofEsMDRJC7AsrN8qfepsfif7R+5R1/e\nP/D/ABLXDN4ke1d4LZ/l/jZv/QVqOTxZCpVPOZEX7m2u2PJLY8+UYRmdvNrkLW/2mF2A+YeT/tVg\n6xrhWFd/BZv9Yr/NXNzeKdu57P5fn2u0kvyrWZJ4phaGVLmZfOVtrL/C1RUjy6E+/L3jZu9YSQvs\n3OF27v7zf7VY2s6w9vs3uvmf8tdr/LtrBuvFUFu72yXMau38P8VYN94kmuI2beqrGvzturjqR5pa\nHTTl7ps614ghs45pnmUmN/4W+9XD+IdcmkmkTf8ALv3JI3zbt1V9a8VJIHebbvb5mZa5PWPERaby\nUC7PvJ83zLXBU/lOyPLI3bjWrazh3/ad7N/yzX/2Wsq81bzGBTb8z1iTalukR/Oyv91qrTXDvIzw\nvH+8b726uCpH2nxHVGR1Fvd4VZt6lm/u/LVu11KSP59+w/e3f3lrk7fUJliVPJ3fP8nzVPJqk1tl\nHm27V3fN97dXFKnyw909CnUj7tzdk1VJo3+8zM+1t3y/LUlvqaMvnJbR/N/Cv/s1c+2sTNt2TKnm\nfMm6nw6w7SRuibXX7259qtXPKpLl+E7qcuWWp19rqE0i/PCqbn+Zl+9WlBeW0ciuibtv/Aq5Wx1y\nHzFeS5XYz/6vZ81XV1jEbybFVV+6396ojzSOo6GORPMiREY/L91v7tX9ri6TZ9zZ93f8yt/erDs9\nS8zbvdcKnzs1X7HVIbi4+zFGRmX5G2/d+WkOPvbmpD9m8tvMeMbkXYsnzVahg8lRCjq+1GV12fd/\n3ayLdvL2Q/KV+VvmXdWozJBHsdG2r8zfP8v+zTqe78JMafN8Q2TTYV2XPzD5921nr9CP+CTwkH7O\n2tLI4bHja5wyjGR9ktK/PmaZLpikO5EVP3vz/dr9Bv8Agk9A0H7Ousqz5z40uTj+7/olnxX4545z\nb4Bmn/z8p/mz4zj6lKHD0mtuaJ+eZjhhtXk8mZWb+GobqPzo9ju3y/LuX5lZquyXE15bxIm5gq7f\nMb5dv+1VC6Z/L8iHcqL8yMr/APfVfplStKofptHDwpmJfW7yN++mYJH8u1fmrKu43juH43eX/qtv\n/s1dDNGkMj3f3127fl/irB1S2maHe4UFmXcv+1/DUxqR5uVs9Knh+aPwnPahcStI3yLEFdlZv9ms\nS8m8lwruuW/i/hroNRt32yIU+fdj5v4a53VI0bh9qbfl3f3q76MohUwkdzE1i4eRTbw7UVn+dmf7\n1Ymob2U73XK/Lu/hrW1SP5FKTcK21G/u1i3zRbRv+Z/uu38NepR948nFYOXN7pj3rbVbybb5F+V2\njrNvFQp/tfw1qzM679m3Yy/drLmRPM3v/C33a9SnE8arg+WQmmw7WbydrfP92uo0G3dso7yNtT5P\nk+6tY2nwvE4d0X7nzba6nw/b7o2d5mI2f3K6oy94mOF983dGt/JVEf5y33Pnrt9Dt0mhZ9m3b99V\nrm/D9vMFR02jb/Fsrt9DtXbZwu7/AGv/AEKorS93mPWwtGMjV0uwtvLjTtJFu2snzLXT6Tpc0LNv\nRVEyf6z/ANlrK0VUa4SG2f52Xa7fe+Wup0OyuY2dJnZyrrsZf7tcMuaR6WHw8blu1s/Lk+zb127t\nvlq/y7v96voH9kHxFJ4J8YWF/DD9qm+0bYo/urH/ALVeJWVrZ3BSa2hyW/vf+hV6n+z7HqS+LrZ7\nDa6+aq7mibarblrKp7pGaYfmwckfqh8LfD/hXwH4J1fx/pVzu1TVnkuLq4aLaqq38K/3mrtPC3jL\n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\nVpW+oJcPBMiSIn8aq/3q7qcuY5pUY/EdtpervpMqJMissjsvzfw1srre5VZLlcyf7P8ADXnMPiJG\nYJOjMVf91tX7taUPjCZv9DmmUqv3W2fNur0aMjzsRTjKJ3y69bLPstppCZP9n71RtrDxxu8w+RZd\nu1f7tcdb+JEmkTZNhl3bm2/KtMm8TIq/vpvl3N8u77zV6NOR5NSmdtqGsPNHss79dn3tq1mzeIP9\nIZ3T5I9u+uWXxDprTKj7lRvvSbv/AGWoJPETxNtQrK025vl/u/w7q6I1OXaRzSw/Mb154kh8yb99\nu3P/AHvurWbf+JrmZSjzbP4om2f+hVz154i+ZkeOMyx/3X+9WFqHiRF/c75DF/dWlUrR6GX1flN7\nUvFT7N6OoZfmddnzVkap4ij8lraGZWbf86x/w1zGoeJNsex3UqrbXZqyrrWPLVoUfb/uvXNKpLmN\nY4fl2NbVvEEsa+S87bv7yp/47WHcahuZkSZVXf8AIu/dVSbUnkwm/wCZf4WqpNM8fz4Xaz1y1pSk\na+y5S4t9c+WWSRWLfN/vVJHM/mb/ADo/l+ZN33ayFvHSNpvO+X/ZqKbVHZhsfluG21zfF7pfwnQX\nGpTMqzfL/d+/R/aU20fOqNJ/C1YMl8Zl+f5dv3WqSO4m8xf9W3+033mrmlL7J0xlym3HqTySK8if\nIq/PUzXXmsdkONq/xNu3VjR3iSKIXh5/3ttTW918qJ97++2+sZR5T0KdSMjbh1C5Rk+VWRfm8z/2\nWtfT9Ufbs2Y/uSVzEa/NvTcR95fmq3YX21m3zN833Y1/hrmlGSOyMjs7HUH3b0m+VV+ZVaug0ed1\nhF07/ei27m/iritH1Pcyo74ZW+T5N1dBpupeduh+zKdr73/hrGUpm1OnzHRWt35cfyO2I2+Td8zV\nox3j+YvyfIz7fm/9CrHs7hL5ofnjikk+Vl/2v96r8MnmMkLorfP83+9WPNym0Izl8Rf8ybcm/a/l\n/eb+LdX6Gf8ABJos37OetSsm3f41uG2+n+h2dfnY+JGiR/lf/c+Wv0T/AOCTSIn7OesmM5U+NLgr\n/wCAdnX4544Sb4Gnf/n5D82fJeIkf+MZk/70fzPz+vI/3MVs/wByRF3f3az5IZlmlTyVCRttX+7t\nrUks3uFO9OFfcm3/ANBqFtnnQ74flV9su56/TJVOb7R+tUcL/dMe8t3LG2hfYzJ5vy/dZaxdQkRY\n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\na38K/wDs1NVUaT+78u3/AHqljt3jkR3+VWTa8lOb5V+RPm/3KXtOb4Thlh+WWpDGrxyN911Z/u0e\nY/mNv5p7Q+YV/u7flZajf5lSN7bYzfxUvi5jHl5pEi3zxvs28t/FVuC+hjQQh9v/ALNWdte1k85J\nmbdT4JrZpkdwvy/Ku7+Gsqkfc1NqcuWZsWt0jNsRGq9pbxRzM6PtRvm+VKyLe48uRXd9zf8AoVXL\neZ23b9u1f7tcnvyjqelRqcp0+mzus2+OZVWRvnWuhs7h1X7Sm1V+7t3ba4yzk8uFZkm+Vvv7q3rO\n6dsQ/KyRpu+b5t1RL4bndTkdlpd4/no7/Kv3tsdbVn5KzBE6fe+ZPu1yvhu/H8aM5+78q10+nxu0\nbpdeZvZl2fL95a87ESlzHoYWMZRL/wBhmhYb02Cb54tr/er9Ff8AglHsP7O+sPGGCt4zuCA3/XnZ\n1+ednBtuFmmfJVdu1vurX6Hf8EpnVv2d9YRFICeM7hRk5zi0tOa/HPGuTlwTO/8APD8z5PxKgocJ\nTS/nh+Z8DrHDHIyI8m1tqurfxfLRJawjLw7W+78v+1VmO3hkVPtLsiq3ybfm+al+y/aI9kyMw+b5\nlRv4a/Tox9/3T9pwdEwr7S3ib50kAbd8sbbV3Vk61HtjLzbn2/Nt+6zV1l3DumdELC2X5UZl+81c\n7qEKSRum9i0n95664noU8PDmOJ1ZR87/ADLCqbn2ru2/7Nc7qVrti3vtZ9u3av3dtdl4h0e5WPZ5\nasrfNtVvmrn9S0vdH5yIyFk37f7tdVOXuxPQhh48kjjrqNI8w71kdfmb/ZrOmtYfLXY7Z37nXdur\npNSt4Wjf54wZF3fd+ZqzVt0WPf8Ac2pt+5XpUebTsctbDwkYE9nuuN5THnP/AA1DJauZNibsN/Cy\n/LWvJbpG48nn+L/aqOb51XZEzn7u3+7XqUZRX2T5/FUYRKVvDPGvy7drfwtWtY/vG2PCq7f4l+7V\nOSNI5TIk24/dX+9UliNszOn3v7y/erf7B41SUU9Tq/D+wbUjfd/tNXb6DeSSMkNzMsUX3VZYq4HR\nbuPzjDsZHb5dy/eWut0O+dWZJpmfb8u3d96r5eaPvER7RPRNBvLOOd7OB1fzG27tnzV1nh++ZrX7\nNvXeqfJCzbd3+1XnOj6o8OxI0+dfmbav/jtdXod07H7S8+dz7vL3bd1c3tOU7KNTljynpOk3rxyJ\nNMkaGOLbt+9ur1L4L6pb2PiBdSufnW3tZHTan+z8u3/arxPRdU3NHczTKn8LrXo/w1mubrULiwtk\nWVpImaJo/wDdrxs6lKWXTUex6+VS5sxgz0r4S/Dv4b6t8CLzVfHMy2Nz428UMr6hqFwqyeXG33l/\nu1L8A9J+G/gn9rC3+Hvw68cw69pEbRtut23Rxybvu183ft5fEB/Dfgnwd4A0PWPKkh0triVYdy+X\n5jfN8396vbv+CCX7MN38SvjNefEXWZ5JdN0q2W4vGkf7u35l/wC+mr80y6nifY66HpcVyoT5qjP1\nw/avlis/g7Y6jJDJDBDZxokcf/LNttfn38T/ABY/iy+udSv3+SP5YpGbarNt/i/2a+4f2v8A4y2U\n3hmHwrDZx/ZIEOVkX7zbflr8wPix4wvbrxdc/vtkPmsrRqm1Vrrx+IjXlGMJHzvC2BnhcNKpVjy8\nx0V/oug6xa77+G3eOOL55I/kkZv97+Kvlj9o74f6ba2Vyng+5WS8mumWX7RZbfl/2Wr6J+HviTRt\nauI7DVUkitbdmW48l/mk/wC+q6rxV8AdN+I2kteaBpUdpbwozLNM27zK1y+pBztM3ziPL70T8hPi\nRB4h063mS5hkikX5X3JXlV1qHiTSbeTYkgWT70m2v0j8Wfsv6JeeJLu28RfZ38l/kkk+78tfPvx4\n+D9np6zvomgq8X/PPZ91a+zy/FYf4ZRPgcZhcVVjzQPkm11bWNWuPJf53/2q2tY8K6xpNolyUX7n\n3a328I6DpOopeW0MyFmb920TfLUXijXpry3+wIi7Vi27ttenXrKUowhE8SGFrxfvs4htU+0L5PmK\npX79afheSa6uPJT5T93dVKw8Ove33yfMGTd8q16p8KfhLf3UyXj2zbW+5trOtKlTgXQjVqVTvP2b\nfhTc+MvGVroL2citcPsim2blX/ar1/8Abi/YV8efs5/Duz+LvifSpLfRLqeOCK8uGX95I33VX+Ku\n1/ZH8Ev4X8ZWGpalZR4Vl+ZvlZq+zP8Agtt8Gdc/aJ/4JreFPFXhKLzrrwn4ghvLrbJ8zR+X5bNt\n/wBmvkKtSU8xjB+7Fn3EsHy5R7SOp+IWta5punwj7S6r/c3VufDX4mfDfRdQhutY0+O5ZX+7u27l\n/vVyXjb4P+NodW2alo9wIm+VGkq98L/2ffEPiDxJFYPpsiiRvnZvu19M8BhfYc058p8vPG1adWLh\nS5j9K/2JvE/7J3xZeF/BOr2Ol61G+37HfIqtJ/tV93WXw78E+OPCv/CN+JNHt57y1t9kV0sCqy7a\n/Iv4d/8ABPf41LqFt4k+DLyQ3MLrLEqt8zf5av0S/ZR1j9pbTdXsvA3xp8JTaXeRqqvdRv8ALcL/\nABfe/ir43NMPWpR56U+aJ9hl88NjaVq0OSZ7f8EfD+u+Dbe40f7TI1n9o2o0jfdr3T4O69bf8JZb\nb42dftG1l2tWHa+CbOHTBqBhYJM6s25NzM1afwW8a6V4T+J+PEFur6fY2811Pc3G1fLWNWbdXy0K\nNOti4Rl/Mj1K8fZ5VP8Awn5xf8Fxv2vNH+O3x0s/gn4F8QyXFj4BnkivWh3K32yT/Wf7235Vr4u0\n+3hmuvOSHft4l3Ju+auv+M2oJ42+OXjDxPC7eVqHii+uIJJE+aSOSRmX5v8Adqhb6WjKHkfC7/nV\nf4q/ZaVGNKlGEeh8HgsPzU+YjXT0jwjw7xs3JGr/ACq1Xo7FFyieZ/us9WrOz8mTZ9mZyz1PHC7T\nb03BG+9Ht+7WFb3vdPbp0eWPuxMu4tXe3V3hXZt+f+Ksq803crpMF2/eRlXa1dPNC8cgTf8AJ93a\n38VY2rW6TMzujBv+ee77tZUf5ZGVSjzQ0+I47ULMKzTb2D/eWsbX45FmX5227V3ttrqdStdrO6dN\nm52/hVa5/VPO+0M7zM6qm1I9tdlOPvWkeRUj7uhyOrWsMnm7OGZt3y1y2uWO5i/8TfL81d3qFl80\ng+VFrn9R00bW38fwrXo048rPJrU+55/q1jbRx7NtfaX/AAb52Edv+2/4pniXaD8Lb1dvb/kJab0r\n5J1rScqTsbG/+L+KvsT/AIIBWjW37aniYnv8ML3/ANOOnV8Z4q6+HWZf9e3+aPl+JFbJq7/ungX/\nAAW1aQf8FOPiYEGcjRv4f+oLY18ptdeX8n8VfWf/AAW0t5h/wUx+I8427SNG6/8AYGsa+SpFxJvd\nMnftr1uA434Gyq//AEDUP/TUToyZxeT4f/BD/wBJQ+ObbNvhRdrfw7KtQ3nXc64WqG141+T5l/vb\nqdDP82x4fl/hr6nl6Hp/FL3jbsbxPlLx7l37srV9dSDK3kurN/B8n8Nc5BN5ce+F+W/hWrEdw6yM\niblSiXxcxEpcx09nqTzYhhRd33d1Wf7eeNVSba235a5WG8mjP2aN9p+8+2ntfbRlNpP95qfNy/CY\n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\nrNNBbMixxbtv3v8AvqvnqkvdPr6dP2h0Oi+EfCVrC2t+J7C1eSayZIpLj7sf+0q/3q+Y/jZ8G9N1\nTxauq/2VNJbzXDJFGsW5lXd8tfTHiDx54W8E6olheIuovsZpVWLcsNcVfeL9N1hZB9khc/M+6T7s\nNezlsv3Wp4WaU+Wryo+ddS/Zd0HT45bm8sIYhv8Am3f7v96vBPixoug+EZHSO8/1e7eyt8v/AAGv\nb/2lfjVeaDaromlWc0sU25vMaX5a+LviN42v77UjbXjsyyOzfM25d1exGdSUdDx/Z0sP702Qa14y\n3Xh+xvJFGr/wv/DWJdeOJrVtiTMwb5V3NXPapr3mNJC6bv8AarlbzXHuJkREby2fa+7/ANCrpp0f\nb/ZOCtjYU3aMj6h/ZN+FPi34uao+qpDN/Z1n8txcfdXd/d3V9Y+Afg7eWviCC5sHbYzqm1ov/Hq+\navhd/wAFA9B/ZU+Eei+FPASWtxcfY2/tS6mtVl85m/3q6C9/4KqWHijwWLvS5oYdRX7/ANni2ttr\njrRqX92kevh5YeEPeqx5j7D+P3ii2+HOi2fg+515ppL7bJEq/Kscf95lr6y/4Jca5Y6t4CutFgK/\naZbZhE8VxuWRfm+avwlm/a08V+LPFreJ/E/iG+vLmaXa0l5cfKy/wrtr7u/4J6/ts3Pgm6trxNV8\n5WlX92su1VX+Ja83FVKtCUZzjsdeFnQxNKdGlL3mffHin9rrwf4B+IF78IvEOpLb3bRbYmml+6u7\nb92vP/E3jLSfiRpMvhW8mWaxVvkkZfmkb+Fq8E/4Kha54Y1r4Xr+1F4Pv47TWNNv4/tUa/6yaFvv\nKteN/s2/tOX/AIkuIEu9TuJ5mdVlWR/lb/drhXPKPtYP3ZH0FHD4eUOWovePqr4E/s9+LU8bPNo+\npXFxEt/t+zzfd2/wr838NfUd5rGq+GvDcOlXmiRw3bJuna3Tay/w/LVD9kb+yNb0K31Sa2VZWbcz\nRv8Avd395q7j40rpqsUis2+WJl+VvmanWjGNByXxHlVpSjjFTPCvF99NqV5/xMkaTb/E1eFftreI\nLzR/2dZbaGLybPWNRhggWSLd5kit/Du/u19DeJNNttL0b7fNGw3fek+6y/7NfG/7dnjC88SeINE8\nAXM0ktjpdu14qw3G6NZJF+X5f71HDWH+sZvGUvsl53iPZ5e4r7R8+WukXm1v30YZU3fvErW02F22\n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\n9tjfa1aS61vt/Oe83MzqryMn+zXFWeqQ3CsnnbVX/no1WG1RzGjpMzM3zbY/ljrx6y5tT2qNTlgd\nguqbVS5jT94yt8zNTJNUyzO9zv8Au+aq1zy688Nn/rsGRNn+WqRdWmiVv+mibNq1Eaci6lSB0K3D\nySsju22b7lKt1Zxqu+b51X51jTdWLb3zvGqO8ilX2/7W3+9UlvcJcSH5/N3blebbt3KtR7Mj2kPh\nLc10l2rzTSs0Tf3V21hXzTSxrNbSMn3ldW/vVtbIZoVffuEaf6vd95ao3du8cLu+1kbb+7j+9Vxj\ny+6ElzHO6nNftH9jc733fd/2a5vULf5pkmmbau1kVv4q7C+heFvO8mTDJ97/AGq5/XNPSSTy3h3f\n7SrXVRqRj7qOSVHm1kcvqFq8MmyF2f8A2v4dtYmpfKzTbPmX5UbZ8tdRq1r5e77u1fvVgatMgGx+\niv8APt/irrjU5pjjh+aPKctfW825n+638CstZ+oWzvGwT5n37vmrcvlMg/1Pyt/47WXf2TyK3zso\n+9XbGXumNTD8pjzK8ch9KW1t3jbfNHt3fNVjyUbO/wCb+KpY7UM2x33nb8tac3Kc/sZ/EWNPV/m8\nlGDf3m+7XQ6Xapa3EWxPm+6zL92s7TbVIdnnQsG2bv8Aero9LhSSP54Vbd9xmSvPrVoHRToy5zV0\n+FF2Om7d93/Z3V0NnHNGyb5FD7PvKlY9isIi8nLfN9zb/DWxZx/IyvMz+Z827+7Xmyfvczid0Y8v\nwmtZq8cfyTfe/iZf4q1dPUMrfut8UafMy/3qz7Fprjy4U2nam35f4q1LFXb/AEZwuPuurVjKXu8x\n1R980IUfa8Lw7yzbauTrM0cUybc/d27vu0Wq+XiaaH5fKbbHGn3lp+n2u0lEhb7/AN5q5fe+KB0r\nljo5Fmz861VHRF3bPn3fNVqzV5mSa2TY2397HIu5ajs4ZoULvCriTd95v/Qa19Lsd0iujtsXa77f\n4V/u1pCXvSOyPN7L3S/pdq8W3y4Y9n3ZW+7/AN81uafpqKv75Pu/L8v92q2i6bNbqqzXO+LezS7l\n3blroLWzSaRXiRXEPy16dKPuXiZfDIpx2LyTLsT/AFny/NWno+kfu/n6t9xd+3btq0unpGFTerlf\nuRwruVq17Oy8va8yNv8A7u3+L/2WuuEo0xylKUit/ZnmWI2bVTY29W/hqS30kt+5h27Nu7c396ti\n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\nZuoX3lgrv3bflqG+uvJkd/Mx/drIvNVTdh5sOzfxV20jy61blLN1qCR7djsE+9t31Yh17y7cIj7v\n9pfutXPTakm4u+1QrU23vk+Z/O3f3lWto+Zze0n8R1UOpJJIrwur7v8Ax2v14/4L4TCL9jzw4GOF\nf4k2asfb+z9Qr8Z9Lk3SLsfaV/vPX7J/8F+3Cfsc+GiQTn4l2fT/ALB2o1+L+JGniNwv/wBfK35U\nj5PO5c2dYD/FL/20/Jc3nnMrvu3L9/56WG4mm/vLu+VqpQsnmb/4G/i/iq5aLPtZN/3q/aJSPq6f\nxaGlZyP/ABn5v4dtXLW68uP5OP8AZ/u1mwTPDIIZvu/3v4au2rbvuOxX7tYyj/Md9OPU3IbhZmTf\ntRV/iX+9V6zvtsw+f5VVty7vlasO3wqrJPMqIzfLWgt4WJTeqbvur/FXNKMDup80feNu1unWzR0f\nMjbtnyf+OtVuz1GNIdibd38e7cy1zf26aPd8m3d83zVbsdQ+VEdl+VtyR159aJ3UakeY6Bbh5ttl\nc7nRfu7U/wDHavLcf6Qk1t5iN95W27qwY7iZY/nmZl/i+atGG6dVV3DY/jVfurWcoy5dDSpym5Jd\nTKUCBlDS/vWZfvVbtZEmk2Qov8P7yP8A5aVkWcyTXqJMkjo3zJWpawzRqZofkRf++t1YSjHl+Ifx\nTLqx+fDsR1Ta/wB5f71F5Dtb7Mjt5Ujrs2/N81OM263RHdvufvWk+VaerXjKNiMhVPk+Tcu3+7ur\nOpzx906Y8stjIvFmXd5MvmeSjKjfw1iahbpJC7pctlVZmWul1Cx8lZTZ+WI/7sfzfNWHdWrhRBcp\n/tfKm2lGP2izl9Tt3WF0eFVuN27dJ93btrlry1eNi83Ndz4itXVtkKbn2/J/drlrq1eaR3hhV933\ntvyrXXTqe7cuUeXY5TWLWbcqxuyj723+7WbdQ7mPz7m/vVvXlj9qmZH8z5f4aq3Gnv8A3/8AdWuy\nnU5dDn5eYwPsqDcifdb+JvvVcsbHDRl15/u1ba3TcqCNWZfm+Zau2Nn/AMs3fcrJu3f3aVSt/KXT\noxj8RY02xjVt/nK0v92tezhTzA8KMu7+9/DVezsYY/Kfycv91WX5q1Y7J7Xcj9Pvf8CrzpSibSpw\nLVvb7pFfZh1+X5f4q1NPheObzoU3bm2t8ny1Vt12yb1fKyJ/F81aljG6t874f5dsa0+blhocvL75\n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\nvc2tJt4ZG85OkPyfL/eb+9Xb6Pa7oUD7iV+X5q5jS7BLf99sZpvm+Vf/AEJa6vw5D5caQu8hRtu9\nv4vmr1sLHmgedWlKnI2rO1v4WbyYdp+95jJ91f7ta2n6b5kqCFJDui+8v3ZKn0u322rJs3K3y/vP\n4q3ND024t7ZLa52r5m1nb7q7f9mvTo05bHDKsZ9lpd55Zd9u3/lqq/dq5HpsUOOJJn+ZW/h27q3b\nPS0bfCvCK6/e/u1eh8NpNO6XKbt23yo1/wDQq6+X3iIVpS0OPutLSa2aG5dnWT5W/wBn/ZrjtT8M\nv4m8Yf2NZ6rCkdi6u9vN/E38P+7XrfirQ303w7fTb4UZV2xSSf8APRvlWubsfh7beBbe21XWE+z3\nn+qulkdW85t33vM+9trxM6xEcPQt/MVXxE5fuzE8eXUFrobM6Wtpc71RGh+8zfxf7v8AerwLWrq8\nj1q4ub+88x9vyMz/ACxr/druPi5Z39nqWp2E7xvNNLt3ebu/4Furze6tbm+WPR7C2Z5Gibd5n3Vb\ndXylBSlscUve9057xtY3k1mk9rDHsWJn/wBnd/erzfxhMY4Wmhud1zsXd6LXq/i5bzRdLh0S8ud6\nxtuVY4vmb5fu7q4C+8L3OuBM+dH5j7drJ8rf71dVGpGM/IKkZShynAQ6akl2u9FZ4X82WRn+61UN\nSv5Li+Wa2Tj7jt/E3+1XobfD25vLUQq6q7PtXc235v8Aa/2aydR0PStJjSz1W/tftbbvNkj/AOWf\n+zXrxlQlI4KlOUYHAeIrKG1kifzpJkZN26Ntu2s1Y3tYpX+0tvVt21mrqtet7G1kR9/mBvmdv4dv\n+zXLapqENxL+4SN/7jbvmWolKEjL3ojvO1Web5H3Rybdnz/NXQaPYa9JGdh80bvl3L/DXP6XqFhK\n2x5sS7921vl212ek606sjpCqQt/t1wYyo6cYnXh/3kviNLQ7waVMX/drc7du2RvlWu/8D65Msge5\n2vcNtXaqf+PVyVrJpWoYhhmt9330aT+9WhperTabfeTc6lCySN/yz/hr56vKNaUrn2eV2pSjzHu/\nhnxNNbRl7n7mz96v8O3+9Xtfwl8baVrmjtZ/uZRt3eY396vk2x8QOy/udVbayMvzf3a7L4b+OLzw\nzcJZW1+tonmr82/5W3V42I5afun29CrSjLl7n1VHoNnIq3MUKymPdt8t9q1Vk0fT9F1a2v4YWaGR\n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\naz7pU8mM7X2/N96qu4o2yaFUaP50+Stoc3NzM5JSIdLs5rMv5MaqJIv9W33Vatyz2W7hB8/yKjyL\n81Z1jb20kjzIiov3mrQ023SOZvnbzfuv/dZaxxEeY2w/vG3Cq28jTSbSzIqquzburV0+RFkVNke7\n+Dd/FWTaxPI/kzfKn3Yv7y/7VbUNn5yrv5RWVn3fKqtt/hrglzcvwndT+I17NZ71U2JlpHw/y/Lu\nrahhdW3vx/7Mv8VZdnvjQuXwV+5t+7urY0GSFt0f7t1b5UZv4aI8nNblO77HMX9PtYJJP3MPyt83\nmK3y7a6PTbWzkkF4ibdvyrtT5mrN03Tfs7L5ab0/jXZ91a6PR7JLVUTfIFV/3XzV2UaXVHPW92Ja\nt7d92PlEv8Lf3VrrPD6wrJG+/c3zfN93bWZpapN5vnozru/e7k2s1b+h2Mx2/Ou2OVt+5Pm2/wAN\nezhY8vunl4iUuXmOn8Oy+dIULx7f41+83+9XS2a7oWaZMLv2xLs3bq5bw/G7TPOgYf3m/wCBfdrr\ntNkTzVmhdtq/fj2169OPKeTKUueRs6fG8kPnbI1Vfvsv8Vb2nw23zI+4+d8sUm3ay1n6O1tdTI6I\ns6L8u1V+Vt1bem27Nb/I6sv3K6OX3R+SM3xR4ah8RTado+xti3Sz3EK/N5yr/ermfjZa3+pa5cTW\ntnbtbWsS+V/Cyt/Cteha9efYdPTfcwxG3tWdJPK3SRrXlfijVNS1TTQ+q20breXCrLJHuX5V/ir8\n/wCIakvrtvskU5SqTueL+PPDs2ta5NrFt8iq6rLGr/dbb96uUk8MvY3hvIbbZJN8ssiv/wCPV3Pi\n7T5m8QCz+2LDaLLubcu3dWb8QFe3LahYI0aeUsUX9xpP/Za8aM+SOhr7OftThPF1jc6gtnpsKZih\ni3PJt27m/i+aud1zQ9K0e4t7k7mTfuuI5n+VmX+Kuo8W/adP017mGbeNqq6/+hba881zVJo7eTzn\nVl/h8z5mpU6nu3O2nh5I4/x1rzw6s9yl4sy+b+68tvlVa4C4vr/Utaeab97t+8q/ear/AIuuLbdI\n8j7du7fH95a4u+8WJax/ZrN23KiszR/fr0qNSmoeZ5uIpykXvFN26zf6S8caTRKyrI/zVzWoM9xf\nKls+/wCT7qrWRea5c3Vw/nXLbF+ZFaks/ET2NuJEdd2/738VdVP3Y2OOpGL1H3Elyt4k29RLv2s3\n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\nalcr58aM1rIsvysrfw1tXV9tjHzr8qbnbfurKn7p6MqlKtHmjsXF1KZZt80zLtl+9u/8dp9xrXys\n8Lr8vy/3flrmdS1BJZkn+1Mm1N27+9WZN4k+b9y/8X72uuNQ8+UeY6uPXry1kZMr977392pV8QNM\nyTTTK3z/ACrv+WuKXXIVmMPnN+8XajN96o5PEH75XSFSkafxPtolUj8REY8p30fiSe1hP2l42Tfu\n/eVeXxs8Kq4WMiRPuq/ytXmDeJJpNvzsqUyPxI9uoTzl3q/3d9R7Y05Zn6yf8Em9TGrfs56zcCQt\nt8aXC89v9Dszj9a+B9H8beTdNM9y2yRlby9/ytX2z/wRY1Qav+y3r92Ccf8ACwLpcHt/oNjX5q2/\niq5mkVIbmMIr/N8vzfdr8O8OKnL4i8UP/p5Q/KqfNZHCTznHpd4/+3Hueh+MrCZk+TfEzfeZv9XX\nd+H/ABqlxH/obsis6q67fvf7tfPHh/WvL2PP5bsybkZf/ia9C8O+KHjaPfMyL99I1f7rV+zSxHNr\nE+tjRme42fiC8mkiSGbb83yQyfe2/wATV7f+xTqw1H4qakhJBTQpsAjG79/Bk/59a+UNH8RXM377\n7Ssj/e+b5dtfRX/BPjXm1j4x6gsu3ePC0zNsbIP+k23P61+f+Kle/h3mUf8Ap2/zR5XENCX9h15f\n3TQ/aW1qWz+OOuwWrZZDa71/7dYq4CTxNDHu2Px9123/ADbq0P2xfEq6f+0T4isFaNWK2nzP/wBe\nkJry7/hMPORoYbDadnzNXqcC17cD5Wv+oah/6aideS0JPKsO/wDp3D/0lHeTeKpoZkR7nO5N27+9\nVebxTNKodHUp8y7v9quEt/Ek0nlzXMaxHdudo/m+WrH9sTBm8mZkG/dt2/LX0csV757n1Xm942tU\n1aPbMjwsf4tq/wB7/ZrB1K4eRpnZ5F8ld3lr8zVFc6vczbZjtIb50b+FaytSvHkYv9sYfN80K/wr\n/eqPrEpbFyw8YwJLq6hWSF0/ii/1jN935qyZPEG5nTf937zN/FS6ldeZG+/ciM3yfxfLtrBvj5it\nNs8zavzbm2s1bU6hy1MPH4jqI/ElnHsmmf5tmzzP937tQyeKkvpmRJlO5G+ZWrhm15FkT5Nqxy7t\nqt/s/wB6q3/CSOq703A/xNvrU5+Q6q+8RQyRrDC+9vu/L/drHu9YhH+jIi+X5X977tc/Jr/mQtNZ\n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\nffnc+3btqexscqtsifJ95GZN1c1bY6KdHlnyl21uiu1Hh3bfvxtu3bt1dRo95Csezflty/vJHrlr\nWF41Kedh/l3bn+7/AMCrY064f5LZ33sqfumb7v8As15sj0Y05RV2dbcQ7XFz5K71fcm5apXdz+8V\n327/AOJdldDeae6xl5o1dv4dqfdWsjUtOhWP7ZM6om372z+Kvj/tH6RRpycfdOauP31uru8ZK/xN\n8q1z2rfvJWmR8Kr7pV8r5m/3Wrqtajs1bZDDkN822T+KsTVI7maPe6NuVNywq3y10U/dPZwuF5jj\n76/CjYk2Xj+ZFWKse+3szbNqs3+3XQatZ/u3SHcm5Pnbd92svUI4ZFZLlIyyqqtIv3q2p1PZ+6fQ\nYfL+b4jltStZmmV0dWeP7i1l6lA+4QzOqMy/d/irptRWzhX7T5rbN+5I1Tcq1g30cGfJ8lmdm/1m\nz7td1GtzCxWWx5TFmsXWMpvVXV9qbqiht5pG+zOm5ldfm2VfkCQjZv8Alj+b+826n2tiI1OyNsr/\nABN/FXrU63LD3j4TNsv5eYfp9nut1+T5t/8Aq99a1vo9xcRjyRu2/L5cn8VR6fboscXnJuf7396t\ny3XzZE37QWRl+X+7/eo9pLm0PjMRR9nAq2eltJsdIdqRuy7f4lrY02zn8iTa6j51+XZVi3t3ZTC/\nzRL83mL/ABLWnpq+dhIXZ4VXc7eVtrH+9I8mty9QsdNhmkWF3Xztv+7urd0/S3mh+SGRH2bW3fwt\nS2unQzLHNDYec8e3/Wbd3+0tdD4dsYVkUiFl3bt25Pu1PtJfEc9OPtJe8VYdPMkkaeSpZfvN92tB\nrVIoG32ap8+7du+9/srWlb2aW6uiQRyNJ8sXmPUk1mjN8+13Vm2/L8q1yyqe9zHfRpxjqjnG02ZS\nNm1ZP+WrbvmX+78tL9l/dmwmjV5Nu75f4V/iram0m5mVZkTcfK/v7W+9SR6S6zY8jYqurM33lVf9\nqolL2kbSOmj2MD7H9nZLmHps+ZVr72/4KxQmb9nLR1EQfHjO3OCcY/0S75r4ijtUZndJlWNnb5V+\nbd/tV9z/APBUqNZv2ftHhaQLu8Y24GTjJ+yXfft9a/HePH/xnXD3/Xyr+VM+R4mvLiXKLfz1P/bD\n83bzTXlaS8mfIZtvzfd+X/ZrOmsfmX7NtKL/ALFdndaK/wBoVEEe7+JWf5Vqh/ZdmsLQ+TudpWVZ\n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\nInzM1W21WwsbO4vLn5fLt9qKvyq3/Aq8w0vSX1bWLnVYXjXazN8vyrJX1+Q4Hm/fSPheKc0i/wDZ\nIfM7b9pXw74G+N/w1vNK0rQY4tRtZd1vNJa7XZlX+8tfHfw5vLybw7qvwK8To1tex7p9IaSL958v\n8NfW+i+JrbQ9WiS5jmeVtu6ORvu15l+118M3+1Wnxj8DWarqOmy+fcLCvyzKv3t1fUfFSPhIynFH\nj/wz1a28UaXceA9S+ZpFZbeRk+bzF/vVx/ijRb/wrrk0PQx/I25vu1f8SahbaH4oi8Z6I/7u6VX2\nx/Ltb+Ja2/iFqlh46t7fxClgsRVF3f7TVnGXKXGPL8JyEfktZrv+Xb83zNurlPEVxC6vC/zVv6he\nJCXtvm3f3v4a43XriG4kfzudtUXGJi30O5ZE3/LVPzPl/d7WFXLry1Yon9/+/VGNf3jQIm3+9VfE\naxEaHd8+/wCX7zK1Q3C/3z/3yKvTW7rGE+Zw38NVLpf+mfzLUlFCTezvsP3ajkbc1S3R3NsCc1B8\n4Ul/4aBx3DMm3p8rVKqzbtny/dqEtkLn1qRJPm96BDmZV+QBc7fvVF5zt8mKbIu1qWNfmGXoHysX\n7w+SmDeuAHxuqYbIz89FspmnRMc/+y0RCO5YaX7PZ70++3ypt/u0trlvn2VBdMjXB2fN/dqS3j8x\nv9dtZv7tHxEyOq8Mr5brNDtU16t4XuL+a3/1yqipXlPh9fsixzTOrbf/AB6u6s/E0zWaWdlbbP8A\ngdae7GJhKPMVfi1qW6xKTTK7L9ytz9gf4W3Pxk/aM8K+CbZP32reI7WCJW+Zf9Yvy15f8RNTmkvN\nk024/wAK19rf8G/XgP8A4S7/AIKAfD55oVMVrqn2h2/3V3VphY/vEY4uXs8Mz+sj4WeFbDwP4E0j\nwhplv5UGmadDbRqv+yqrX4Sf8HqVjMPih8ANV2KYvsGqQfe2nc0kdfvbpF5i1V33D5f4q/FP/g8x\n+Hk/ib9n34WfFy2i3R+GvFc1reSKu4Itwvy5b/gNY14Tlzm+CrUqcYIw/wDgl348ttM+COkPDM26\nG1j/AHKy/e+X71fT3jL9qq6ure4s3RbhI7fZ5Myfd3V+Zv8AwTl+Lj6f8EdLtdiuY4tr3S/L8v8A\ndr13W/jVNdXDJc3LLFv2ttX5mWvxLF04xxs4n7Xgqt8PCoe/ahr3wi8QWtz9vtmiuWib5VRWS3+b\n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\n9N1C28GfErVo9S06+02JVRbiT7y/N8v3vvV+qXirxXbXnhOx+K2iSKj6d804+9+7b+Fq9PHUlOpG\nrH7R5GEqyjTlSn9iX/kuzP5Qv+C1n/BOfXP2A/23vE3w1ttOZPDmsyNqvg+4VfkktZG3eXu/vRt8\ntfGv2e50+TZMm5vu/d+7X9Wf/BfT9hDwp/wUR/Ybv/iz8PbeK58ZfD+yk1TSGgX95NCq7poP++dz\nV/Lfq1r5LPDfw8M23d/ErVzV4qpFVV1+L1PQwdd0p+ylt9nzR13wrmfUrV9N+953y1z3izRZoby6\ns5k+aN90W771a/wniSx1NEj4j3Ku6ui+Lnh/+z76LW9N2sky7ZV/hrk5uY7ZcvOeR+GdUm8N+IIk\ndvkZv71fUPw71i11nRdn2zLNF91fu180+MtBSzkF/Cm0bNyf3a9I/Z78aIzCwuXjH8KM1RKMoy5i\nuWNQ9Q1SxRVd97KP738Ve7/sz+Mv+Eg0v+x7y5b7Xa/Kir95q8W1S3SVH/iT+Jo60PhF4u/4Qvxl\nb38160NtHL+9/wCudRiKftKWprg60qFWNj7EtdNmt137VVN/97/x5quQ2O7ykvbmFlk/ij+VttX/\nAA2tnqmlw3lo/mJdIrq3+9V+axf7U/nQx/KrbGb+GvGj9qJ9pDljCMjGaxDTTXKczN8qbX/9lpbf\nS5mk/fWyu0nzPt+Xy/7tbdhb3KyJvtv3Tf61vl3M3+zU8en+X5v2Z9rLu3Mybl/3q6qceUqUYS95\nH0h+wxAbf4R38ZQqf+EglJUnJB+z29fIN5oNwjM6JtdX3O0afdr7J/YyhWL4YX7KuBJr8rAjoQYI\nOR7V8r3FmizLM6MTG3ybXr8Z8OU34h8UNf8APyj+VU+L4bgp8RZpfbmh/wC3nDa9o8Nu2y2H3vm2\n1yOrWdtNcP5zqpX+7Xo3iKPy1dLb7q/P/u7q4PXF/guUj3790qr95q/XcRE/QcLTcZabGVMuza6J\n8y/L/s7a+jP+CZHnf8L/ANYE0W1h4QuARtxx9qtMV85ySbbfZZuyxq33pG+Za+h/+CXsjS/HvWSz\n7iPCEw3Z6n7Va5r8t8ToyXAuP/69v80cHGMZLhXFv+4/zRzP7dl1IP2qfFcSkfK1iEAbksbC3ryS\n3vHVZZnm+825PLb5l2/3q9L/AG/LlIf2s/FZCZ+awBHv9gt8NXksdxZxr5c0yp8zN8v3qjhRW4Oy\n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\nS+L4jDlG+Y/ll361JCvmIvdv7tJHC8iZ+9/srWrpWjvcMNkLZq/iHIhsdO3Irl2bdW1p+ks0m9E3\nLtrc0Xwe6w+c8G5f9qtVtNTTVbzEXP8AdrXl5Y8pj8UuY5y4s3tVLhG3NWbOu6TeB92tfWrpGVnh\nbDKn3awJpZpJGfeu2spSKjHmIbiaRmGxGb/aals1dWZHT/aZqRpP3a7wxanQ27sdjvvXZuo+Ef2D\nT09ftLKm9VVf7yVsNp8zWu+H5i336xdPuNs+zy/k/jauks5LYQ7N+0NVcxMtjM+xzQsPMTa6t/31\nWnpLOtyPu/K/zrS3SQ8eTz8+1/n+7TY5Idy+T8prOPvByx6noul6Ho+raemybaVTb8teP/GDT30f\nxMLZ3Zfl/wB6u50e4eO2ZLN2Vl3K/wA+5WrhfjJNcTX1tNO6lvK2s1IcY++Zfhi58y62TP8Ax7q9\n48EzbvD4j8xWC7flr500G7eG6D/Ka91+G139q8OzP8w8lNzsv3qv4Qlz7GP8WtQdtLebqjbv+AtX\nicm+SYu235q9M+MmpbbYW3n8Nu+X+9XmKcMKZdOPLG50Xg9Q1xGm/Zu+81fQ3wzkeTR1hhTPyfNt\nr5/8HxvJNG6fd3/xV9DfDe3hj099o+Tyvl/2qOb7JjL4x/jC8hkjPySAxrs2t/FXh3xC8MvcNLqV\ntbNlWr2PxNHc6hMz3KSD59u5qyW8KvfL9mezZ/4lk2U48hl73PzFj9nHXJNQ8Oy6U94vmW+1ljb+\n7XdalYbo3uUfJ/iVU+7Xk/gWN/APxOht5nYQ3j7fMb7qtXs7XLhdm/8Aj2/N/EtT8PumkuWXvHE6\nhBNDcOjvvRk+X/Zr1b9kP9pTxh+zP8TLDx54buZIfs9wrXEMb/6yPd8y15xr1ikNzI6bZEkZmf8A\n6Z/7NVrVfLuBJvw33drf3aenJymHvn9KPjT4ffC3/gsv+whpXiLwzqwi8TaZa/atB1VWXzIbtV+6\n237u5l21k/sy/tXeNtK/Zz174b/GnQb5/FXhu1m0PxHpcNr+8VlXbFcbf9pa/Mf/AIIH/wDBTC5/\nZL/aJi+AnxJ1jZ4Q8ST7YJppf+POZv8A2Wv2/wD2hPgH4Z8S3kf7QPw/vFtLqWCP+3JLOHf/AGlY\nt947f4m2/dau/AV4zthqz93oebjaFWCeIpfF9r07nj3/AAT6+M9h4p8QXnw38QXRNtrunGH7K7bl\nZtrL/F/s1/Mx+1F8O9E0X9oz4n+DNHRWttB8f6pa2rR/d8tbhtqrX78ePYdU/Y2+OFl8Wr63Ww0G\naK8vfDrTP+8S1WFtu7/ar+enXvGV54k+MnifxDqVy0jeINcvLyVmTb80kzN/7NVY2MsPUf8ALIrL\n6kK1OPN8UbnLeDVudF1ZVmTdCsvz/wALba9Z8SaTba94JuHSFi7IrRMvzV5+1mlvqT+cjMG/4E1e\nmeD7h7zR4tMd12Mm3a38NcEfiPRqS908VmtodW06awuUZXj3LuauY8GapL4T8VGGZ8bZfl3V3HjD\nT30HxhP8i+XcPtRV/u/3a4X4gaV9g1BdXtk+Tf8AO392iXve6aUZS5uY+nfDt6niDw9HeO+Fbb8q\n/wDoVVNQheO4kmh/hX+H+7XD/AXxg+oaWtg82/8A2Wbb8td9rET2q7ETe237yvUc3u2CpHllzH1l\n+xv8Un8ZeCW8PXlzun019nl/eZo9vy17D5bsXTy/mb7vnV8Qfsv+PH+HvxSs7y8m8uyuv3V02/7u\n77u6vuqUpcTeYk0ctvIi/vI1+WT+7XDWjyysfVZTW9pQ5ZDtLhmbzQiZXZU9sl4ykwp8y/L/ALy1\nZsYYVj2bNif3d9WLXTUjXfCjK+/am2iK5j1PaS92J9B/sgqE+Gt8BHtH9uS8fSGEf0r5cvLV1kkS\na23ivqj9k4Mvw7vlYjjW5AABjA8mHivmq6s/3b7522t83mV+NeG0L+IvFDXSpQ/KqfGcNTkuJM0U\nesof+3nDeIls45PtOGzIv3lrznxFdQ2twYbZGLt8yNJXpPiaBFZHhSQJCjbI5F+Xd/vV5nrVjNCT\n/q3Te235vm3f71fsGIjDlP0nC+8c5Os1vcbIX3jd88i/+g19H/8ABLKdD+0VrUEa/KfBty4b63dp\nXzXdW9tumR7mZEVd0qq//s1fQv8AwScuHP7R2tWxOVHgm4ZW3Z/5fLOvyjxQafA2YJf8+3+aPJ4x\njfhLFv8AuP8ANHOf8FA5gv7W3i6N2bH+gEY7f6BbV4vDeFZmEL/OyfxJu3V6r/wUUuriP9sTxdFG\nBtb+zwxZuP8AkH21eGyakJpvO+bbGzKrL8qtWnB8ebg3L/8ArxR/9NxO3hp8vD2C/wCvVP8A9IRt\nxyJHqGd6/Nub5auR6xD5mxJJGZfmT+H/AHWrkLjXHhX9y+GVtqfN96hvE0DQ7HlVJtn8Pzba+hjT\n5j2PaHZtrG1RNNN+9bdvX73zfxVZsfESM7fuWUxxfupmfau2vP5vEAuI0Tf+9aL5/L+XdTP+Eimh\n2/Oz7vlT591EqcpaBHFcmp6ba+JJtyp8qLHu3t/e/wB2pLXVppGd3uV2t8m5fmbdXmtv4shZVtpn\n/wDsa1P+Ene3m+RI2G7b+7f7zVv7OXUKeIhKZ6Tp+rQtcCFHZ0jTb/d2r/eq5p+sJJbyeS7FWb7u\n+vM7fxY8MrmDcV27vv8A/jrVoaX4mfzPPSbbt+Zlb722s+adM7qFaEp3PSPtjzRqm/8A5ZfMrfw1\nYkktr6z8yF2O77u3+7XE2Pie2+0Qu95tRl+ba25mq/b+LEt5F2PsTyvvN8rbaVPEcr0PRpx943Lz\n5pEfZuX7v3qydSmtpJo7Fpldvm2/Lt2/7W6sW+8QPIGeymVdz/M2zdWLfeNPNX5Jm/dvtdfu1lUq\ne9zRO2Mealc1tW1rzIWtkDfKnz7ovvf8CrKi1zzhF5MzMmzait/DWDqniqa53Ijqzqn+r37du5qy\npvE22IobnYi/Mjf7VdOHrHl4qnynpnh3VLbbFbI6l/vf71dho+rfdheZUDL8zL83zV5L4Z16Fm+e\nb7v8P92u103VN0LIjr8zbq+zlT93mPySnipxkdbb6pN57JNNIvz/AL3zF+Xb/erSSZLiSIJ93722\nP5d1ctaXm7zNnmMv3Uaata1uvMjV5nbEbbl2/dWsZUYy2PcweYVYm/G32i6e587zQ0W1l3/dqby0\nkZ0R12/e3Kn/AI7VbR50jd5ntlZfuvu+6y1NZxzSXC38O10X7q/dXb/FXnVKdrn0+HzKXKmUL61h\nluPnf+H5W+7WLqFrZyQlLl2Ib+Jq3dQ/fLv2Lt37Ub7u2su4VI5lmf5n+Zdu6vExEeWR7FPGfurn\nG61p+xl3uz/3F2VjzaOtwqzbNg2bXZfutXWX0aNItmm4fvdzbqg+w2ybkR925m+Zf4q8+pLlCnW9\nscHqmgvIzTP+6X70rN8y7qxb7RdsDPsw33dq132p280cbwum5VT5VZfvNu+9WLq2lzeYXmRQsKf6\ntU+7uo9p7p0YenGU7nD6po6W8mXTavy/LVNtJcsybJE/e/d27q7HUNPEjL56bP4dv8S1nTWKbt77\nvm+ZGo5pcnKfY5fThGJh2tk9veJbfZt/ztvZn+6tb+m6fM0e/wAnLK+1VZtvzUlvYbbjZ9mVdzf9\n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\ncJM02397uf8AhrKMuY9WjL3tTkbqxdXld081flVPk+aqc2nwwq3kq3+wtdPdafDLveHdG/8Aeb5t\n1ZeoWKRp/eO9W3baXN759Rg8UYNva/MiCBiY/v8Anfeb/drU0mH9586ZX/nn/FTb7yZJP9fJ8vyq\n0f8AFRYyT27D7NC2Pm3bm+bdWXKj6TD4ilKBu2sbx26oltsdlb7zbalhDtMf3ezb/wAtEX5W/wCB\nVU0+6M0J3o2z727+LdV2w3+WEd9m5/njZvlbb/drTm5TzcyxUeX3S3YwpJvKTNFufc+6rSxwrHut\nn2r/AAKqfdqBY9sDzPcQ7V/hVP4qsR+crM9tCqq3y1rGU4+8fEYzEe2lygv7jy/tP323Oq19o/8A\nBS9C/wACNKKkBl8WwFSemfst1Xxxb27tHxbKzx7lik3bmr7O/wCCkUaSfA3SxITtHiuAsB3/ANGu\nfzr8s44qf8Zxw9L/AKeVfypn43xjGUuKsoVt5VPygfCF3b7VdLlPkk+ZGWoI9NSV/kRmGxdi7/lW\ntO4sXkWQ7GTazfNJ8tWNN0V7eP7S6ZWbb93/AJaMtfrX1iXL7x9p9XnGRnw2eVe2mmbGzft/u/3a\nsNp7tiF0ZG/iZmrVXT/lXcixKz/xJ8u3/eq4mkwyM0LzKrb90S/wtXB7R8+/um9OjLmszkLzSYY7\nd7mY7V2/NGz/AHq4j4P+NYdH8SeO5nha2Vp4V3Q7WVty7V/3Wrq/idqj6TqEemwoyssTP+7f+7Xz\np4b8UPpvijxJZzJMWvrVm8uOX/lorfLX2+SUKlPDe1f2j4PiCvGeL9nH7JW+KV59n8ZXMLxyReZK\nzeZJ95q8+8WSPY30V5D5h3Nt/eVtePNa+2XFvreyTO3ZK0j7tzf3q5/WribUrP7S8ylGRm2/3v8A\nZr3IylI8L3TlPF2oTTaozptCsn3qzrySFbYzTbfl+4rfxUniK4VZN7p8+2ud1rVnkh8k7g397+9V\n/aKH+Il84iZ0wrf3axIpvJZofmrZgc3uijzDny2rMkj3Sb4PvUfCEfeIpP3f393+9TJB5kf3OP71\nSXCBl+5yv8NQTcMqb9w/urRI05eaRAx29ak2Oyq9RuN5yaVfu7PMpc0S+VCx7Nxy3SrWmSPHL9/7\n38NU6ktWCzLu6UhSidJbSSeTs7L/ABU2RXjZtnzbvvVHZzPJDsTbT93k4RUyn+1T93cxG/eOzO1v\n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\nsjjZu+X71Mvptuz+JF+Z2X+9UP2zzj9ptpF+X7i7vm21rGUj16NOMhGm/wBHCFJA/wB7bJ/CtMms\n0hX/AJZszfOn+1TFmtpoRsTKxptTdSeZD52Uf7q7V/iZq1p/EceOp9Ty7VbB7G4dE/hT72za1Ys0\njtvjQYP/ADzr1LxN4V8xVn2Kv8Xy/erjtZ8KTWcnnJt/ef7NfSU8R0PxfEYaUdTntLuJrNt8KMfk\n27f96us0XULpow+/dtXbtVP++qyI9NmiZd+0My1t6TYzRypawpj7rM33f96ipWOajS5Ze8db4fkh\njVbmZ2+b5dqt92u20nUsSfI7PuT738VcBpdi8MbPG/nfxJXV6be/ZofO34eP76rXnVPelzcx7OFj\n7P3ju9FvprPbvRW/vtXX6FrCXCr/AKtF2fxfLXl1jqUMkaJbeYp3q3zPW1Z69LtV7l4dm/a275ZG\nb+GuKpRlKZ6lHEcp6WurW00LeSkgj3fKyptXdUd1qiLN882xG+4y/wB5a5LS/EEzRu7u2z7qNH8y\n7qh1bXXt7rf9p+b+Bo3+X/d21jHDz7ndHFc0feOg1a+jWT98/LfKjfe3VkX148h2PMxP92P7u6sa\n68TOc/adrfwov8VUf7etpt8iOzlX+Tb91aqVGXL75p9cpRloaN5ffNLDN95W+dvu7VrIuryGZ879\npZfvM/8AFUGpeILaFd/nSfN8vlt/6FWXeX0zN9xXbfu+b5af1X3YlSzKKL7XF5dK1sky/N83mMi1\nXWN2YQwouPlWVf7tMtbzbHKnnblVNz/3qs2O9pR8iun91vlqJRlHTlOeWO9pqzV0tfs6hE+Z2b5m\nb5vl/hrdsbM+W3nIwjjfKNv3bmrH0t0WHzPtKpL/AM82+81asMsKzJC7s7Qv8393c1efKpLnNIYr\nmhymxpP7yR4ekke1n877rbq27MJcKU8lklZP4X+Va5u1vJrdVTyM7m3JV6G4k8n/AI+WZ1b/AHa5\nq1P97znbh+aUpSOhtbqG+j2edGd331b7y7a+zP28XiT4SaWJQMN4liAycc/ZrmvhqG/eSSLZbbdv\n8P3fmr7d/wCCgVybX4NaZIIlcnxNCBuOMf6Pc81+ScaxcOMsia/nq/lTPhOK1y8X5L/jqflA+ZLW\n4hk2wj5Ek/hZvu/7VasLW0zb4PnSNNv95q4iHVkhZnM+f73ybm/75rVtdVdXR4V4Xav/AAGv0+MY\n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\nvtkuZEXzdyqrblrnNY0WaNmTyfMSH5v3f/s1dNGtKXxH5hiMPC55jceHYZGDp8wV9su5P7tW9Pt4\nY4V2bQzP8jN95lrpL3T5riT59ztGm2X91tqvb2cMMxhe2XG/Kt/FWn1j3fiOP6vKNX3SGzsZFb9z\nDvDfNtrStbGbcu+LIb7+1/lWp1j8mzCIm1o/m+X+Ld/eqSCaYW8R+zM/8P3KUanNGyNI0+X4iaPZ\nC3kw7f3jf3fu0LPDCwR5vl37t392s1vOjl8mGdj8/wB7f92i4uv3zujq6fx7fu7dtaU4395SM5VI\nm9Hqzx7fJTZ/teb8rLVDUtcuVDPNMzL/AA7qwf7Qmb5JkZ5WRV+V/l/2aLy48lgn2n7vy/draMYx\n0MpVJcvxF9tYnvGZ5rn5f4V37tzVJHqTyK9y9yqeX91W/irnW1JI5j5brTP7URVeGby3i2q6R1pK\nnzQsc3tpxkbsmpOq/anvF+Zv3Ucm35v9moI5kupHuZpmZ1+9tesua8S4kSa5Xem7918u7a1Tw3SR\nyF96qnyr8v8ADWVTlUCI4iUo6m3aum9YYfMQf7P3WrSt1dUXUk2v8/7qNl2qtY9ncJ8qJy2/c+2r\n0N3DJ+9mdmXeq/u1rza0pOXNA7acubc6fT5N00dtszK3y7ZP/Qt1XZLpFm8l5l3b9y1zFvqT/ax5\nMzStsZfm+Vavzah837sSZX+HburyK3P7e/LoevQ5JRN2HU3dfO8pY2X5fmepGuPtCpClyqNs/e+Y\n/wAzLXMyah5kwT78TN8219rLVv7XMzfvjvWP/wAerLllKPMerTrcvuo6e31a2hhhT5pX/vf3v9qv\nuv8A4KQ366f8ENJleLeG8WQLt+trdV+fEeobY4k+438Db/lX+9X3z/wVCu4LP4BaPJPLsz4xtwrc\n9fst0R0+lflPGtNrjPIe3PV/KmfC8WTvxZkrv9up+UD4zbXJl+SzhjVfveYrfMtWtO1p42LpMpDR\nfMzfNXIR3XmTfvH3hl+Zl+VatR6n5NwERP4P4a/WFT5tj9E55KRJ8bPHj6D4BvLmG8aOWSDykaP5\nm+avjbWrp4ZG+dnT73zfer2T9oTxpNqGtJ4ehfy7e3i3S7fvf71eM6sySM3dV3f7zL/tV97keH+r\n4Xml9o/NOJcZ9bx3LHaJyvi2L7RalNm/cv3a5fR9Y2q1hNIyj7u3+7XT68u7d96VfK27vu7a4PxB\n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\nu/LU1tp+795sUfxbVWp5UORDHHt+d92V+6uyrml6XLfAbE+7/FVi1s5ribZ5H3vl3KlddoOgwxwD\n+Jdn9z+Kuimclcz9J8MvLl4f4V2/N/E1blr4Z3TbEmaUx/Mv+9XSeH/CkNxJ9o8jj7yLs/irobHw\nik0Y2Kqu3zblWrlE4vafynE22i3MK7PJZm/g2p92tVNPmt8edNsZV3f7O2u3bwnf2rRulszM0Xze\nX92qF94TMavM6Rjy/urIrN8zfw1nUjzfCbR5/tD9Wa/adn8lcMvz/wB2sCa/m+1H51xs/uV0d9HM\n0MrzFl3Pt2t/DXL6lDDbt8779392voY4WHJ5nFHFS5iWHVjbtGmyT5vm8z73zVu6fr3l242O3yvu\n2t/drkVnSFT95H+VUZqtJdTFAifeX5ty1Ty+MvsmscdKOp3f/CUPI29Jo96orIq/+zf7VWo/Ejze\na6XO/an+r/8AZq4CG/mRWd+DN9xvvVN9s2M298SK67FX+7RSyvmi7FSzC8LncQ+Lv9WgdmX+Py3+\nZv8AZpj6g8is5mhXc/3ZG2yf73+1XLW+oC623M6eW7fK6t/7LWrpaxxS/wCk7SrfKka/eVa0/s3l\nMvr3MbC3C3s2yFFD/dVm/iqa3t7lZIvOuVcN8rwqn8NV7ezhXytjthX3Izf3q2rWzX7ULaZ2x95m\n2Vay/lOf657xd0exmkmj+dW2/Mi79rbv9qumtdJKsIXeNn+98r7lXdUOg6P+5aZ0jZF+42z5ttdh\npGnpax+TMjNFJtbdJ96pjg77DljOWPvGHH4bTy2eSH545fkbyvvf7LVch8PzCP8AfI3+q3bo/uq3\n92ui+xw7fJk+Z/NXymb+FauLovzO8KLv+b5mqo0OWJP1jmOUm026urhXm2od33pP7tUNY0na2+H5\nvMX733l3V111pHlxvNs2lZf4n3bv9qsfUrGGPZ5Ls+7czL/FVRwvu8wvrnvHA6xZ7Yc/ciZGV/4q\n5m8h8yH9xuG5NjMyf+PV3viCH92uxFXbubatcXqcbwhpHdjK33/3X3a1p4fsOpiOU4/WrfdIf3Ox\nF+VmZ/vf3a56+haPa7vuX5VdVrrNatd0zQ+Tvj2fPt+7urndQjdmSQ22759u7d/7LXTHA8sbKJhH\nES+Iy/ImZWfeyMzfer9B/wDgvLDLcfsZaRBEQN/j+0DZ9PsN9mvz+23P2j59p+T5o/7tfoH/AMF3\n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\njzM6I7ZV9u2tvw1I6zeTcuqqv3FZ/vVz6tBNJsT5dqbqvaTqD2rq77W2v/c3fLWNRe77pvzcp7T4\nHunjgV7yaNnV1+7/ABL/ALVe3/D+8doYXmdXdfn8xfm3V84+CtaSM/ZkmVWj/ib+LdXsXgLxAlvL\nbwvMxST5vlb5VWueXPLUmXwnr+m3j3Vx9mubbcPvfaFSttredk/1LOV+aJm/9mrj/DurabcbHhuW\n3LLsRt/+d1dHpOpQqwR7ba/mtukb5d1Yy5vdfKcXumjZbNx86T/f/wBmkjjkhmZ0myPuRR/w024u\nHmhVbb5fvfNVDUtbe1h8l5o2k27tv3VrT2kdwPinUr50ZrZHXaz/ADs38NItu99cGaZ22xrulZdr\nbmrDGpXNwvyXKlWf7v8AEzV0Hh23kUpcvD919z+W3mKrV+qxxXunyVPC+7c1dH0fc2Niuu1flauk\n0/w7Gqpcuke5V+7TNHsknmV158tPnkk+XdXT6bY7Yw72ylP+en/j1ctbHSlHSR2SwvwmcvhO2uNj\nx2zBI/m/4FS3HgtFy9ydu1/ljb7ys392u00fT5poRM+5hIu5G+7/AOO0TafbRloQVUfKit977v3t\n1cUswlGV+YxlhIxPO7zQ4Y40mJYmbcnzfeh/3qzL3SUa4H2PdGrfdZn3fw13+o6W7SNbQ+YE27lZ\nl+Vt1YmpaX9jy8Ntimsw9pvImOFlDY5ZXht7hEdFcL/e+8zUR3W3zHfzFT/ZSrd1ZzWsk2x/nml3\nIzf3azrya2kgPk/cVdrrt+9SliveNPqfcvWOtPp+N+7f919z/wANWbPxMlvI+ybcP7rVyVxcpb26\n2qbdsf8AdRvl/wB2oG1p1jSJ/k3fLuVK0ljubYyhhe53reLkmjdw67V2/LTG8XQWbEJub59rNv8A\n4q4Btc8qNn3su1PkZqzZPFm2NbnfJsmXcytVfXOcpYeUT0+bxl5cOyzvJvN+78zfe/2az7zxJbTM\nZkmZjJ/ra8yuPGybW/fMflb5V/i2/wANXrHxBc3EIeSeMMy/db+Kn9YiqVmKWHnGXunbLqUMzNM9\nzJtVfm+b7y1HPqPzD52fzE27Vf7tctY6w6rvtpmbzNyMrJ/6DWjb3KbldPLYb1X5flZm2/xVEsZy\nx5UXHDXleZo7nkjTzvM/uszfN5dI2+RmTezbU+X5f4qhs2hk23KTf3kb5/lqyykSI/y7Y4tu5fu1\nnUxnKdEcPKRUuI4XbeifL8v3m3fNX2n/AMF5lU/sLGR4ywj8VQtgH/pyvK+Mb6PzI0gh+ZmRv3i/\ndr7X/wCC6Nobv9h2RSoKx+JYpHXuQLO8PHvX4B4sYj23iPwlrtUxH5UTxcfQVPN8H5yl+h+EmrR+\ndYr8zNuRWRWX/ZrlriF7W43p/ertdaX7HpsU3mNtZfl3f7tcNqFx50pP8W6v1b3T7KPxBDqk0Lq6\nzN8tdL4f+I+v6fMjw6lJuX7jbq5BULNtq1p9u7NsfcB/eqSuWB6hZ/FzxXNEIbnUmmi2N+7uF8zb\n/wB9UXHibR9QZ/7Y0GxuVaL5NsW3/wBBrhPOmjVkR+Vq1b3T/Kyc7v7v8NVGXLIylsb8mk+Br799\nbaJNb7U3fu5/u1dhuLaSza1h3Ou3b8yfNWJazO4+5tVvmbbWnpczrPvnmbC/3Vq4ilL+Uh1zwreX\nUMWxFaPZ91l+81cfq3gzVdPlO22k2r/d+bbXrWrLba5ouz5kfb8jK+1lrzvVtS8SeHZpLWab93/e\nX+L/AHqn4RxlPmOUKzW7fPwy0+4uvPGyZPmXvW1/wk1hcnZqWlRt/tL96s7WmsAwa2Tll/h/ho5o\nm3xFCiiioLG+X70qrtpaKr4QCiiinHYAooopgFFFFABRRRQAUUUUuVAKq7u9b2mTTW+kl027awVO\nG+f5q6CyjkQRpDtxtXg0SiY1T6L/AOCd+nzab4s1Px4kK/aY7P7LYXDfehkZtzN/3ytf1DfDj40w\n/HH9nfwr8R9D1hZbbVvCtvFcQ+V80c0caxyf+PV/OP4F+Gt/+zvp/hvwTqr7dQvNIh1a/haLa0P2\nhdyr/wB87a/Zf/gh/wDFKHx/8G/F/wAHbzVVkuPC91b6ja2rfNttZv8AWMrf738NdGHlyzPnsVUl\nUlofVkd8/g3ULLR7+88ma+sGngk3/wCsaP8Au14t408D6b40+K0HiiHw9CHjWQSyW8S+a0n96u2/\nbAvNS0fxH4O1vSraR4rWWaB5FX7qyLXEfFr4veDP2cfAL+PPHPiqPS7toma1t1TdPeSbflWFf71d\ntSpCj7xx04zlofDHxdv7Lwt+17Lqt9OsVvp3iKwmnd8ARoghZs9hgA/lXmv7WH7XnjD42XVz4b8E\n3rWuhb2+1XH3ZLj5W/1f91aj+I3j4/E/VNY+IN1p8lsNTaaZoJm+dRgj5j6kDJ+teHePPG1hpeiz\n+RtlZlkbaq/N8qt8zVXFmKlHD4Jxejpp/gj9L4zjJ5flK/6h4flE+MfCljNeeINYuXDFW1eb+P73\nzV2Nu3kr5PzfL/DXG/DeN76zmmmfa81/I+5v9pmrs/JTcmE3Oq/Jz8q/71eRS+A+XfUfNC8kO/Yu\nJPl+ao22L8jwq4+7/u1NcHdD8n/AttUmj27/ADkZlb7u2r+ID1/4A+KPDfgrw34h8Q+IYY5biP7O\nulqzfN5m7c22uM+JXjK88Xaxc+IdSufLT5nePd8qrVDQJENiyPt2L/d/9mrzD4+/Eh7iY+EtKmUL\n/wAvTR/+g14lajKti7HPHD+2q/3Q+HXjR/Ff7TfgVbZ/9Fh8Z6WsQ/vf6XF81e5/8Fbv+af/APcW\n/wDbOvmf9nP/AJOE8Cf9jnpf/pXFX0x/wVu/5p//ANxb/wBs6+6y6EYcMYpR7x/NH6TlUIx4Kxyj\n/NT/APSonxrQW280UjLur5o+OFoooquYAoopPn9qoBaKKKXKgCgNu5pU+8KNqKo2fepRAaowMVoe\nHr99PvPtMfXbtqhWx4I8O3vibxDbaHpsavcXUqxQKzbRuZttPm5feIqe9Cxqza5e6lqiXM0zZ3L9\n771faHwzsPgV46+F/wAN9V/a0h8eXPgnwK9w32Xw7qKt/osknmSwxrJ91pG/iWvmzU/glp3w/wDi\n1/wrXxp8TvD8N3byxrPeafdfa4I5G+bbuX7391q9G/as+KfivX/CGlfs+eGvCOhwXWl2qyXl14fu\nd32i3+6q7f738VZ168ZWgt2ctFa3Z6f/AMFPNT/Zm/aA+COi/Hv9nj4kaD4L8I6JeLpPgP4HWcvm\n3VlZ/wDLS6uWRv8Aj6kb94zN/srur4El37uKdqFleabePYX9s0M0b7ZY5F2srU1mTjfTjGUTtGsN\nslDO7Sb0FIxy3FSW6/Mc/wANBHwmv4R0/wDtLxJpump8pur+3i/76kVa/pe8TrDa2trpriZkh0iz\niWP+H5beNa/nO/Zt8O3Pib48+CPDyQ+c+oeL9NiSFfvf8fC/dr+ibx1ffY/EF5bb9zLKyIzfN8q/\nKtcuIfwxOat0OUurxJrhoXtmTy/7zbVrndUaaNmRPl3bm+at3UGkkaV7lI1XbtZV+ZqwdabzF3vu\nJZfkk+61c0vdiXH4zj/Elv8AarcI5VFXaz7vm2tXDeIlmXels7f7e77tei64sK7/ADhGEjRfN3fe\n/wCBVwPiJbnz3tkTzPnbf/dZa5KnNOR30YnD6pI9qyJMjJ5nzt8lU5LqY75NnKv8y/eq9rDbt1tC\nkjpub5V+b/gPzVlwrNuWaFG3b9sqt96ueUZndGRYt5po2810aXzP4f7tWbO4haNndJNiy7dy/wDo\nNVI/J8tbl7aSOTzdqbafCsPzWybs72leP+83+zUx/vGko80S0t+8Z2JNI7K/yr/d3V9qf8E4rprr\n4KawXzuTxdOr59fstr/jXw2skizPsRmDMqtu/hX/AHq+3f8AgmlJ5nwK1ckgkeLrgHByP+Pa1r8d\n8cp83ANT/r5T/NnxvGitkcl/eifztanqjtNv8vb/ALNUobt4d0yPs/hq/wCJtHezv7mzmkbdDcMv\nzfL/ABVSntUhX50wrfMlf0TD4D05Ei6xNGvzzNVSTWJpuHfP+y1U5i+FTvu+SmSD59p5/vf7NXy+\n4TdGva65DGqo+4f7VakfiLTWh++v3vk/2q5La7Ns+6v8NPj3quz/ANkqfsjOnbULBtu9F3L/ABLT\nJNUhZdiIqfxLtrCt/lH3/mq1G3mTq7u1VKXYzJ5tSZF379xqrdahcybpN7YX7u2pJI/MV3d/l37V\nqxa6dbM4+2PsFL+6VHYj8L+MtY0G6FzajKr96uv03x54eluC82jyb5H+ZpHqro+jeG5bf5If3q/f\n+f71TXGm6P8AadlnC3+20lVy/wAocyPVvCmheFfGHh954UaJvKZZY22/53V4f8SPCb+DdakhTlGb\n901evfC1ptN0e4meHai/w/3q5f42aXJr+lNrITPl/cZacveMvfU7ni13M9xMXemfw/8As1En3x/v\n0lB19AooooNAC7eKKKTb8uKAHKvzffo2/NnZSUsaiQ7KCeZkpbcB/s1JHHuZecNUaoZJGf8Au1Zt\nVRmXf0/jp8xJraLbZbztilVb5a0/El4ljoroX+aT/bqHS7NF2/Jv/irJ8aXyTXQsYX+WP7y1PMjJ\nR5pmHSxrlhx8tJU+m232q7RP9qjmR0nW6DYi30XZ18z5ty0ySHf9xN9WrGZGZbN38pF+X/7KnTQv\nuZUfC/wN/epROaWxTmt3+yKj7fmf+KktZPs8jHe391PnqSb/AJ47/u/xVC2+T9zDJz/H8n3afLza\nC942LeTzIQ/3m/36WSNPMTyf9ZWbYXzw/u3f5v462I7q2k2I8K/c3J8lP7BPOVFh8ufzs4XfVuFo\ndx/xpJo/lbYmVZabYq8cjSb/APx2lHYf+EljXav3Nu6rOl332VtnnbBv3VE8KcTb2G6iS1Rto2ZZ\nfm+aj4oC5rHRrcJdW/7l1Ur/ABNWVq0P2eRvn83d81WNHuI2jCfcZvvLRq0Zb50+9sq4kW6HIeJG\nLW0vz/M38LV9n/8ABMXXv+FhfBX4i/Bn+0mj1CGwj1vQ1X/npD/rNv8AwGvjDWm8yGdJodrfwV61\n/wAEzvjlZ/Br9qjwzqevOp06+uJNN1SOR9qfZ5l27m/2VaqpSlGfMKtT5qVon1lJ408Q3WsaDc+K\noWto4Ym2XElr80391v8Adr0bRbO21T4YeNvAeq6l9sfVrNrywVn8tYZl+bzF/wBr5a/RUfshfs3/\nALc/7K+hWGm2Wn6Z4r8P2Fxb2GsWlvsi+X7u7/e+WvgbTPhX48/Zd+Mln4S+J1tHaf8AEy+z281w\n25ZI/utJ81fS47BxrYaNen/29E+fw2IqU6vsZ79D3f8A4Is3Buf2XvEMhct/xcG6AYjGf9BsK/Im\n81JIWCO/3vu/7NftT/wTk8B/8K38J/EvwpA5a1i+K97Jp7lAu6B9P090OB7Gvw4l1SEsN+5j/dr+\nbPDT3fEjir/r7Q/KqcuVJvMcWvOP6mrJqUMe6HDOrfxLVmx1BMq6bt7fw7q5qTUnaT9y6/e+Valt\ndYeGR385vv8A937tfuMZH0EoSXuo72HUodzlLZl/uRrX2n/wRQuhc/tV+ICrn/knt18p/wCv6xr4\nBsdeMcaIkzfM38P3q+5f+CFV6Ln9rLxGu/cT8O7ssf8At/sK/O/Fr/k2+Z/9en+aPKzaFssqvyMj\n/gp3Io/bl8cxmVgdumk7Rn5f7MtPlrwiO7t7hQjp8zbV8z+LdXr3/BU3Uvs37fHjxVkUbDpeQV/6\nhVpXhC6mk2/zvlEfzOv8NetwBpwHlX/YNQ/9NQKwEL4Kj/hj+SOkjvEVQiPG211bbUp1B45N/nb2\nV/u1zlvfQqyJ5iqsf3V2f+PVZOqI1uZ5kVU2/IzNtb/dr6/mnGJ2Rp+6aGoX3nL51zMvyr91vvVz\nt1qiCYw/KNrbtqrVbUNY/d4+VX+7838P/Aqx7jWHa43pMu5vl3VnKR04OPLPU2G1LcpRE2Ju/i/i\no/tGH5pX27WdVRVX5t1Y8V15kiyb9x+98tPkk2q0fmf6z5lbf92uSXxHvU+Y2Li4SONf9J2D+8v/\nAKDSx3zxSfJ8m7+FWrMa6e3VNiK23arr97dU26Zm2JJHhdzO2yo5eU2lI7fwrrv2dvLe5Vw1emeC\n/FSQ2ohmufn2fKsn3tu6vB9L1Z44RND8m35v+BV1Gk+JkVVe52r8v+sX5vmqJR+1EyqSjyn074X8\nVbV+zedlGT/Vt91W/hrrtN8VFlxc3LSCNtyRq38P8VfN+h+OvJ/dzTbVZflbd81dlpfjf5kSGb7v\nzrI38VRKPc5JS949r/4TR4bMwQosifegXftZv9msfVvGTvHK/lrsb7/8X8P3a8+m8cPIw2XWW/vb\n9q1h6t8QPLiaa5mWJm+8vmtWUqfNEXNCJ5Ho+oeZJHvSNV/jj3fKtdr4ZkjjjJSONF3bWhj+Xd/t\nLXmmizWccbTTTfu9+35fvNur0Lwu32ZYn3/d+XdJ/F/vV9ZWxXL8JhTw8fhO58O/JCsIjVNyfdb7\n1ddoMiYZHTy2+7FHsritLjhnkExdZtv35N/8P92um0u5aGNJrr5UVtyfNubb/DXHLFSlqbSoxO10\neaZm/wBJm/u7JNu2rs1qjZuYQuybd5q7/wDx6szRbi2+yb4JmmaP5nX+GtKO3S82pMcFk3eWv3Vr\niqYocaRn6pZuqo+zeYUZtqvuVqwNXtnk+5bSK0m35f8AZrs1VPLSN3/e/MvkslY+sWbr5ttDNu3P\n+6j/APsq5vr0YyKjheaWh554mjSVmubban73ZuX5q5fUZptrQJ8p/vbK7nXLOGBXj85Wbezfd3Lu\nrldQtYPlmhdmlb5W+X5W3f7VV9el3CWF974TjtWvoYv+XZWeNNrSfMv/AAKuZm1h2kVPtLZXcrt9\n1a6bxJapHbtC7soX5drfxV5/rn+jXTp8zP8Ae2s/yr8tdVHGe0OepQlEs3XiKa3VHd/3qtt+X/0K\nsfUtcu4/3jzM3z/dqjNrk1vcfIi/c+fdWTretQyxs79VrqjiP5TCVHlNWz1SNrhnm3Ntdtv+zXTa\nHfR+Wjvu2feRZK8z03Uo/tG/zm+b5q7fwnqU/l+T52Xb7isn3ar2yD2fwnZWcyRsj37qqf3l/h3V\nr6e32fZD/rG+8vmf3awdPmn+0RPNMrrs3PtSt6wuvJbznfn+7s/irCVbll8RtGP8xsaX5KlU+88n\n3of9n+9VltkjM+xSrfeX+H/ZqnYrNcMzvtaLbu+X+Gr0bIsLTf8ALuv93727/drmljJfaNqdMjk8\niOLekOyX7zbd21f9mvt//gt5HHL+xS0MhI3+JIlU4yATZ3g5HcV8UTXDx2bOkLD5f4q+1v8Agt9c\nNafsSvdLbiQx+JYGyWxs/wBFuvmr8O8SK8qniLwu+1Sv+VI+ezulyZxgV5y/9tPwj+Kl9DZ29vYQ\no3yr83+9XAM38dbfj3WX1fWXmR8isvTtPmvrkRRoxr9wjE+kj7sbhY2/nygbe9b1vp7w2/B3M1bO\ng+BX+y75E2u1Q6+0OlwsiDJ3bavl5TPmjIxv33nMjupO/wC7WhpNqm754WrDuNURmOxG+Wki8TXl\nvIHR+KXwi9+R3lnojyf6naE+9u/i/wB2pI9Njt1i33Knb8zs38NcpY/EK/DeTO+1W++y1c1rTLnV\n4vPsdaDI23YgpylzClHlOuF5YSL9j/tKEj/rrUV9pMOuWv2aYK8ez5JF+avO5vDWuxMXhDOF/iV6\nm0xPHdsv+hw3RVfm2/w1MecqMY7lXxLoNxouovCfu7vlrKkZ87Grc1vWdSuBs1WxIdV/5aJ/FWHM\n7yNuakaxFopFbPBpav4ihv3/AGxSMu2nKu2hl3VAC0UUVcZAFFIrZ4NLRHYApeVNN53b91LUAAbd\nzRSKu2lrQAooooAfHHukXf0avW/2VvA2m/EX46eFvBmq7fsE2qRy37M/3YY28xv/AEGvKLH95IN/\nG2vev2WfDepWV5P4wsJZEmX91ayMn3W/i2/8BqZe77xx4qShE+sv2ttY/wCEm+M0/iq2mV7aZVit\n2V/uwrtVV/4Dtr7F/wCDf74jWfhL9q7WvDd5qvlL4i8HzQMsn7xZGjbctfn7pdrc3V5/aXiR8xwp\n92RPvN/er3f9gH9oCH9nv4+W3xatoVuIdJsrj/R5H2rM0ke1VrGnUtLnkeI5c5+wv7ZX7SnwZ+G/\nwz/4TDx7ryxLp9xG1rZx/wCtvJl/5ZrX5F/tFftQfEP9pLxxJ4w1hJokjdl021uLjdFZx/dXy1/3\nfvVmfH74jfEj9pD4gXvxF+KPxFjkVrpv7I8P2cXl21jD/Cq/3m/vNXmcmi6Pasz/ANvXU6MrblWX\n5V3f3a48Zjp1fQuMfZnqOlRFvhnLDe3ivmxuBJNG3GPnzg+39K8h8dah4S0DwXqjpNG5a1mbdGm5\nmby69T8L29lZ/Bt4IogIF0+7+QtnK5kJrw341eILXRfhnqt/ZwqhXS5otrL8vzLtr3eKFz4fLWv+\nfMfyR+gcX64PKV/1Dw/KJ86fDO3ePw7BN5PMm5tzf71dTJvhzsT5fvfN/FXP+B/9B8M2cKQ/6yJd\nm1q2lmeWP998p/utXPCOh8pU+ImjjS3jaZJmK7F2rVSS48kF5Plb723+GoLrXLaPMP2nZtfbtasa\n+8RIvyQ7Sn96l9rQXLGRqeIviU/g3wfdJbJH9ouG/dTfxL/u14TeXc1/dSXly7O8jbnZq6D4iatL\nfXsMH2reiqx2BuFaubqY04xlKR2UafLE7L9nP/k4TwJ/2Oel/wDpXFX0x/wVu/5p/wD9xb/2zr5n\n/Zz/AOThPAn/AGOel/8ApXFX0x/wVu/5p/8A9xb/ANs6+nwX/JNYr/FH80fcZZ/yReP/AMUP/Son\nxrRRRXyx8WFFFFACMMjiloorQBFXbS0UFd3FT9oAooZfmye1FPlQCt+7au1+BWr6bo/jb7Zf7d/2\nC4W1Zv8AlnN5fytXE0b3Vg6Nyv8AdqZRJ5UbUWnzLdPc3k2597M0m/7zf3quW8F42rrq763J5i7d\nszP8/wD31WENVuQhTPBqM31y38bCr9zlMOSrzXub3xDvbLVtcTUbYbpZrZWum37t0n96sBd67t9G\n4NIzvTJF+bmp5TeO4L8nCPU0bKmE6bv71RbTu+SrEMM0mfumpJaufS3/AASn8K/8Jh+338LdKmto\n5IYfEa3T+Z/0xjaT/wBlr9w/Fd1CLyWZ33edcMySL/eavyN/4IS+CpNY/besfEkyRvD4b8L6hes0\nn/LNmj8uP/gXzV+sd9Ntt/kfeJPvKz/xf71ediJe8Yv3nymRdN+7d/m+V/7n3qyNSie4ZY3s22sv\n975lrS1BrZbqSGO8Zwvzbf8A2VarXiw3UaTfbP3f/LKNflaSubm6s6oR945XVrVxG6PbZf8A5a7n\n+Vv96uS1LSUhYiZ23yP8vlv81d/qcJaRke2XLbvNb+Jq5i8sZppJSzyJMqfJtiX5f9ms5e9E6qcT\nzTVNHcRo6Iqtt2urL92sSTT3jZ7Peqn7zbl/75r0DUrFBueZY5TMrK23+GsO6tLZQ1s88hRtvzNV\n/YOnlOVW3uo4/J2fMsv72T+FarFZlZJ98ed27zFb5q3NUtUWHfbQt838O/5WrNuP3yt9p3IJNv3f\nm2tXLKjKUtS170feM2SZJVdEdkZpd25futt/hr7f/wCCZgI+BOsKUxjxfPz6/wCi2vPvXxFJHtaV\n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\n/wDj1ee+KPDbrumRFLLuVGb+7/dr6/C+9HU+IxUZc/wnlEmkzRzNC8K7q7b4f2sMl8qXj+X8mxd3\n+7UMmiwrOHdF37v4m+7XReDdLmWbf23rsWvYj7sDx6z7HZeHdN8ny2fyxt+VW/vV2vh2ztmsykaS\nHc+3dIn3lrH8Pwu0kcMI+dvu12Wh6a8d0zuikyLu/wB2uWQR93QrWenwiZtj7hJu31YhhSOGaG2f\nzZm2qjM+1dtaVxZu0zwvCuz7u5fu1FYWsNvumvF2Q/eaRk3bdtcdWnGWjOynLljzEniKzfwn4Tl8\nc3KKyw/urfcv3pP92voz/g4GRW/Ym0VpIDIq/EaxZlAzkfYr6vk/9qTVnb+xPDsbzfZPs/n+WrbV\nk+X5Wr63/wCC+8dxL+xHpyWgJk/4Tu12BRk5+w31fi3iDCMPEPhZf9Pa/wCVI+Yzip7TOMF25pf+\n2n45+JviFNofhs2ulPs3Lt2x15DeWuta3e/aphJI0jfxV1Ta9pv2iKHU+V3L5qt/6DXsfwu8ffs0\n6PCH8VeFbi8l8raixsq7f92v3OPKpXkfSS9rH4D5/wBN+HPiHULhE+xvhm27tlddL8ONF+H1n9v8\neSeTNs/0ezX5pJG/vN/dr174hftIfD3SbO4sPg98PbW2m8rbb3l187r/ALq/3q+bvFF14h8QatLq\nus3M000j7mkmatfaR2gKn7WWtQl1zxN/bV4ttDttrb+COH7tQMqbWS2/76rJWN9x+RhRHJcq2yN2\nqNfiNuX+UvJZlW+d1ct/eqwtvDCux32t96qEM0zN8/y7fldqvW7PMy/e2/3m/iqjOXulu3td0Y8z\nrXcfDXQ4Lq4abZ86xMyLt/irkbE2y/O78t/DXf8Age6/s2MO/wAiM3zs1KK5SeX2m4y88P21jm81\nKZlTzd27dXDazrU2u6t9gs5pPJjf5F/hWuh+JniIaxeyab4c3GST7+1/lVawrfwvqXhvw9N4hubZ\ni4X5G/u0x/DI5vxQ0J1hvI/hVQ/+9WbvX1p80jyuzzNlmfczVEy7aDoQ+iims2G49KBjqKKKXxAI\nq45NLRRR8QBRRRRyoBFXbS0qru5TpQy7TimAY249f4qlt4/3io/FRLwu+rOnIJJgnks5Zv4aXMiJ\nS5UftF/waW6JeeHfi18RfGGzamqeDZrJmZFZfLh2yfe/vbmr76+OUk2jeLnvHdvKml2QMqbVVq+P\nP+Dea0s/g58OvGOoaq7Qy2/h+3tftEa/euriTzGj/wC/arX1d8aviJ4eutLXUrq8hfyWZoo2dV3V\n2U6sPZHyWKcqlY+WP2uPFmm2vjCz+23W77VB+9jh/wBn+KvFtQ8ZWF9uhO1Sqfwv/D/u1e/aY+JW\nleNfHxtobCREt4ttvMqbl+Zvm2tXlmqeIobXc8L/ACqrbG2fM1eLWxHNPlN4e6jZ1C+8+4+SZSu9\nvl+7uqr9uRpv7/zbUbbXLNqUzyNM74MfzfL/ABLWhazPcsro8aFfmdv977teXUrSjHUIy5z0nRpm\nPg1py/mHyZjk9/mbj+lfIP8AwUA1SOVfDGjrcyM7Xk08sLPuX7vytX1fod26fCuS8uJA7JY3LO6d\n8F8n9K+Gv2wtaudW+IWlWkzfLb2sjRfPu+Vm+9X2mfOLpZcv+nMfyR+mcVL/AGPKv+weH5RPMbqb\ncoT7tVbi6RcQJ9773y0XEjqrb34/u7qrXUvlxh0hrype8fJ25ZWK2oXm5d/as+8m27d/3atXU237\n7/K392qTb2j3um5dlV7pUSr/AMtaKTb82aWj4Tc7L9nP/k4TwJ/2Oel/+lcVfTH/AAVu/wCaf/8A\ncW/9s6+Z/wBnP/k4TwJ/2Oel/wDpXFX0x/wVu/5p/wD9xb/2zr6XAr/jGsV/ih+aPtMs/wCSLx/+\nKH/pUT41oopqN2P4V838R8WOooYbutFQAUU1RlcU4ru4oAKKKKvlQBRQW280irtpgLwRS7Tt3UK2\n3tQAxxlc0vhJkDHcaSk3fNilplBS7jt20MNq4oXDfJ3rMmO5Jbq4Zf8Aarf8OWE2o30VhZ83E0qw\nRbf4mZtv/s1YMaIoBc19Cf8ABOX4QWfxn/a08C+ENQhZ7P8AtuO91H91uXybf943/oK1FapGnTlL\nsKMZVKsYo/aD4WeGU+FPwV8E/DSG2WJNB8KWdnK33fm8vc3y/wC81WNW1R5NyIkZi+8u1tvy0zxZ\nrk11rlzPf7nEl1uiXev+rb7u2ub1K43fIk24/wAP97/gVfKRq+0nzPqetVo+zVix9qmkmV3eN1X5\nWX+9/doW+L3CeTMy/wALrs+Vqy2mS6hbzbjJ3t8q1LayeVcKj7flX5JP71ehGXNL3jnjT5TZjZ5L\nTZsw+zbFUcy/Z1dJP9lZfn+VqihummX/AF251/iX+Goo5rZVXfy7O29l+ZWo5o/EdHL/ACjmhfyX\nS2/drJ8zf3lWsq4tY7q3lf7vyNsZq0P9GbLwJuK/Lu3VVvoYV3zpt+986/3aqnsKpLlOavLPYzb5\ntzM6ttZP9XtrntR01HzbJ+62y7vM/wBqup1b5V2IGdm+4rfKzL/s1zGqRvCrOfMxI26Jt25f+BV0\n25Y6nHze97ph3xdpejFGbanmf+y19ff8E6kaP4KasrIqn/hK58qv8P8Ao1txXyPfX1tJI1tNcqrR\nxfJ8+2vrf/gnQ6v8FtXCzb9viycE+h+zWvFfh3jzCnHgKdlr7Sn+bPn+MpKWQS1+1E+A2h23E32a\nzVD5vz/9NK8s/ac8F/8ACReCbm5aFXkjVn/3Vr2WZVuLoJ/CsW7cqbtzVzfiTQbDWtHntrxJP9Ii\nZJY2Td5fy1+oRlKNWLifocqca2F5D8zNa0n+zdQms3j3eW33t1UMOrHf8u3/AGK9A+OnhH/hF/FV\nzD93dK3y7a89kb957V9nS/eQiz5CUeSfKyLzEWM9/m+9Vu11QISj/MuyqO0K3yfepyrJuXYefvU+\nUo3Le+RsfPj+6tPaSPzmfZktWNHHNu8tP97dVq1utsmyZ1Ut/FVRMuVF7bN2TP8AtVMsjsq7Bn+F\n1aoIrj7qf3nqeH/SG8taoPcNrwzfJa3Su6Y2/wANeyeD/GkKwpbPHlo03Kq14XZxvDMjmbc3+y9d\nNomqXVq3mPux/tNSj7vxGdSPN8J67q3jC8urrzoYVVV+bav96se61TUdWuDNM7E7tqR/3a5uPxvp\nrY84tvb+JfurW3oXxB8Nwqk0yLI6v87fdp81ifh+ySfETS7y4+G97YeQwWSD7zJ81fM0sbRysjDl\neGr7Gm8WeHvFnhV9Ks7qNX2M3lt/er5P8caNLovia7spE27bhttBtQ92XKY9FFFB0hRSMcDiloAV\nPvCpYVdi3+7USjcanhX7orMiW5q6DA8jKmz/AHKn8X3jw2iWZflvv1a8Mxoyqkybd38TVz/iS8F7\nqkkicKvyrVe6RH3ijWhodukkrPNu/wBjbVKKB5nGzmtPTVRJhbP0z96qKqS+yav+tX76r/7NVdv3\njb/J+6/yVfWGOSNqzLrfbzbPm+b+GlzRjEx9ma+lzJJKN6YDfLU95b+ZGEfa5VP4f4ay9Jvk87Z9\n0t/erXhZJoz8+w7vmaiOxUomLdQvHcq6fdb761Y0++eLCeZ96rl1ao2Zkbd/tVm3n+jts8n5l/io\n+ImMvsm3a3zyKEmT/wCyqVo0k23KJt2tu21h2d9tm/iKr825vu1tRXkEkZEM2Sy0c3LEXLyzK8Mb\nwsfOT71Wl2tGHTc3+9/DSrbuzMm9V3f+O02OOeFm3/Nu+VFX+Gj4g5eUfHDJB8/WrMKzSR7dm35P\nkqFI7lgmzp/dqaNnW5++3/AqcvdIiIzeW3k7dzMnzNR5m2Nhjb8nzMtOmjmaRXebj+FmWoriZPJd\nJ3w396lJcwfCYOsbN0r78lv7tcpdsJG2J/49XTatM8anem07PvVy9wxkY7z/ABUf4TanuT6NcfZL\n9Jt2Pmr9l/8Agkn+0YmtfAH/AIRL+1ZppFVre6aP5W+X5lr8XdzKd69a+0/+CSPxofwx8VU8H3kj\nbNQ2rFGrfek//Zrnr051KUuU87PMM6+Bmkfu18Etf1PX/BKnVLgyNaXLQR5OdqbVcDPflyfxr8uv\n+C/Xwh0rUPiVqnxF8H3MdzbWd6sqNa/MrW83y7q/T/4FWtpbeErg2Thkk1AvuBzk+VEDn34r4S/a\nr8Av8TvDupaDdv8AJrGjSJLJNu+Vl+Zdv+1ur8M8JsVLC8f8S0au8qlG/wAlV/zPz3IcVKjjXGXW\n34f8OfjtIqK7fIyv/danxsm3fsbc38NTaxpeoaTqV1pV4m2WznaB1/2lbbUUMb/3NrbP++a/f5R6\nH6TGXNG5YjVJGYJzur9A/wDg3VjUftreKJFXGfhbe/8Apy02vgGNUVTvGVr9Af8Ag3aRk/bV8ThC\nDH/wqy9wR6/2lptfnniypLw4zP8A69v80efnjtlNVeR5r/wWaRD/AMFLviO3kktu0b5v+4NY18zK\n7qpfZ8391a+nP+CzCkf8FLPiKxXjfo5/8o1jXzR5fzeWqN8z7kavY8P2v9RcqX/UNQ/9NRDLub+z\nqP8Agj+SEhk2rvTd8zfdp7N5279xt2/xNU0UE3yps2/xfL/dohgPzP8ANhv738NfW/YO37YQxO0z\nHftX7z1oWavJJ8iLtX7lVo7d4/vuv97dVm2ZCwT74ao+yaxj7+hoRnyY9nys392rlmz7hv2tt+bc\nzVRtm3SfIm1v4GarUNvtkCXO5mX77LXPKPMenSiXY1Rt8ny7W+6qtViz+aHzH3I235lb5t1VYY3W\nRZoYf49taNuzs2/f8v3flT71R7stjsUuYkt0RvKmcfJs+6v8VSJavIxcXjOsKfOuz7tLHC6xo6fO\nf4dvzbf9mp4ftKr5zn5G/iV/vf71MwqR5veIpLXzJPkTcu7+L5adHbw/Nbfd/ubamkj8lmd02bfv\nfxUNb7pN6Ozf3G2bflropy+yeNiqc+a5VlRVjXcfl3Ns3VRvFRYWfYvzVpXSo2zzNrfN91X/AIqo\nXkKW8n7vbtk/hrXm933TljH3vePN45Nred5zbmf5Vq1Z3HmRs8yMPLXbu3/erN+0TSSI/ULVu1k3\nR/I7Lt/iavLj8J7cDZs7942CbF2qv8Lfd/3qvWd55LLMkzbv7yvWBZ3T+c1s6f6xd1aNo23CQx8f\nd2/xUvscpvTlzHYaT4keT5EmkLL92u28O6lqBVdki4k+Xa38Neb+H1fzn8yHd/wPbXa+G7ry23wX\nMaOrr95a8rGR/lPoMD71rno3h26m8zZNcsu1NsX93dXceHYnvJC/2zfKq7XXZuVq880O6RVHlou5\npV+0SSJub/gNeh+FJk/dI+5X3fJ5a181iKfLGXMfWYOXwo7HT4XkjR5uFZfkVU+XdWgsKJIsOxlP\n3k/2VqLw7bvHHF5w+Zfm2/3q6GOGZfnyrq3zeWv8NebDmjOx63LHl5jm76xSCJZrZFWRd37yR6wN\nQt/LtxNeW375nZlZW3fxV2OqadCzN/Au3d9zdtrH1i1hWEQ/ZlLqv3lX7y17WF/d7Hh5gubWxwmt\nW+63mTYvms+373ytXE+ItDtpoWTyVTzPu7fm216X4m0lLWTZND87fws23y65q+sYVt3hto2Mrfc/\nir6vCSjy8yPh8dHml7x5bfeH0SYPMm1N+7c33WWtrSdJTzNnkqWb5kb+Hb/DWvcaCk0m+aHYirtl\nVvu1Y0zT0hiDwoodv4v4dte7CXNC0j5TEaVbo3PD+lsix3LosW7/AMd/2q63TbObc3yW+9UVd275\nmrnNLaGHykdN275d0f8A7NXR6TIlwwS2dm3f+Pf7tYy/uii+UsrGLxTNlkRfllVfl27a5LxX4403\nWLi503RppGgsdqyxxy/6xv4v+BUfFv4jQeA/D8xs7mE39xEyRQr/AMs/l+9XnfwjM0Oj/wBq3nmF\ntUlZ4mb5d395qwlz850VJe6dd8ep31jwn4O8cwzMdP1rTt8X2hdzRsu5dv8As7dtfav/AAXekRP2\nP9BVxkN8RLQD/wAAL8/0r4K8Xak958F7/wADanqTNc+DdWmn07d/y0t5Pm2r/s195f8ABeJ4o/2Q\n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\n8k+827+8q197XEk0cJmMDf7v92vgc9xcqmM5Pso/QOHMv9nhPbS+0Zd5dFf9GmdX3S7E3N826s+4\nuHjLQ2ybv4n3fdq1fTPCsyJCwT5WfcnzbqqTL5jOmyOXdt/3vu/drxvby5/7p6lbCxqcyZPZw/MP\n9Tv/APQastH9li/f7RG3937y1nxslvMieS33dztv/iq4l1ugX7TDtT7zru+7XbTx/tDyamB5djPv\nvlaO58jcGfbtZvmZa5y8jtlhUuV3+a3y7/vbm+7urqdcuraSMzTP/HtXb/DXK6tdQq0mLzlfuLs/\n8er3sDiO54uOwzjuV7qSH7Pv6tG/yqv8P+zVZtReONv9Zuk+/UF5qVszF3diknzI38LLWHfaw8dx\n5KO2N+1vl+Va9unUj/MeBUjOJfvtWCyeT5zI+z/nr81YmratuJhCKr7t3+t3K1ZM18/nN9p+XdLt\n2r93bWXfX3l3bJ9pX/pkrf8AxVavYx5i1qF4dvmWyLG7L+92/Nur7d/4Je3C3P7P+rMu75fF9wp3\nHP8Ay62lfAc2sBtqXKbGbd8q/K+6vvL/AIJUTrP+z5rZRSAnjW5QEnOcWlmM1+J+P0Irw9m1/wA/\nKf5s+c4snfJmv7yPg+4vkhkEYGVVWZ/9lqoX11cx6bcu6ea/lf8AAv8AeamR3kNxMZn+VZNzbV+7\nHWX4svEs9Dub9LnY7Iy/K+35f7tfr06cef4T7CnW5YHy9+0V4sTRZpYV/wBdcKyozf8ALP8A3a8Y\n1SP7VHHc787k3bq3v2hPFH9ueMpIYV2xRt8nz1zml3D3Gm+S/wDDXr83LCNjhl73vFKNfKYps/jo\nkjG7e74q3JabUfYjMf49v8NQyL91Nmf9qtPc+Ikgb93j+KlhkdpN/nfL/dqCSR1U9/nqJpHVagqM\neY19Njea6XZNw38NbE2lu/8Aq0rntLvPs8yu74rqtL1y2lt/L+6f71V9ozlsZtxoT/O6I3/Aqrf2\nbeQuudu//ZrpPMT5f4v9mpo7e2Zf9R8y0+VBzGFpuqaxZ7U85lZX+Sum0fxtqsPyTBgWf52b5qzm\nghZd+xflf7rU5ZfJ+5D977lHLKIpSO90vULPWI/Jum8p5F2vIvytXSaVZa3bSRxWd+0oZNv3/l/4\nFXl+n/afOT+997czV634D1j+x9DfVdV+5t+Vf/ZaPhgTLl5uY8//AGlfC1zNpFtrY2sYfll2t93/\n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\nD5bP83ypudY/vbv71c3q1zi387exLbvmb+JlqTUvECTRvbIilpE+9G1YF9rkMjb03NJt/if5a9Wn\nzS5TyKnITX2qPNHHNDtbbF97+Ja/Qf8A4JKPv/Zx1rE/mY8a3PzZz/y52dfm0upQyfcdt3+y/wAt\nfoz/AMEe5PM/Zn1w7GXHjq6+93/0Oy5r8b+kCreHVT/r5T/Nny3FTvlTfmj89re58zZ9mm3LNK3y\n/wB2uW+LOqTQ+Gbn7G+3dFt/3a0obw28Z+8pbds2/wDoVeffFLxVDbtJps213mTd5bf7tftHLLmP\npoylI+UfHSvJrlxcv99pW+ZqoaNefZpmL/datTxtvk1iV3+4z7q59ZTFOrJ8wV91dEY+7ymkTp/J\nkjV38nG7+9WVfSPHhH3Y/wBmtCG8S6sU3zfe/u1mXnzbnR2Lf3ar+6Ry++U5Gy3u1RyY/g+7Ukkj\nswTYtRbTu+SpNIg29pPMd8GrFrqE0Lb/ADm2/wB2omhmYb/vUpt3X5O/+1Vf4gNyw8UOijem4f7V\nben+I3kZoU2ruriI43b5NjVdtfNjZZtjf7tLm5SZHZeZ9obfsVW+7tqeytd2Zsq/+zWPo94nkL87\nH/erb0+8QN5KJ97+Ja15uaJiafh3T/t1x9m2bPnVV3f3a6/4gf2lHpNtoltayBIYt0rf+g1zfhO7\nhj1KFLnanzbXZv8Aer1S+bTW0dtVSH7YWiVWVnp8xHNHnPCNem+z2svyYTZ8y7a84mYtMX2Y3V7n\n4/j8N6tapbQ2EltIy7vL+9Xj3iLw/NpVxvSFvKb5qj4fiNqcrmVSqz7tlJToVQSLv3UHSa/h218x\n/kHP8VWvGEwjjhs0udyL822p/DFskamZ3XGzd92sPXL57y/d96srP95aX2zHl5plMnzGrR0+aeO3\nOx/mrPjH7zD1s6SsKxsNn/AmqAkXtLvHe1MLvvdqbqU1zb7tnziordU8w+S/zLUupfvpxCjtv2f8\nBoI+H3kV9P1a5uG8n7v8PzVfurxLeNn2bf4dy1Hb2MNrGZKjvmSSEwvyfvfLWgub3x1vqW6RXeZc\nN/DWxYpuhlmhdii1ztvp73TLhPu11WgzPZ27o6KEZPmVaA+IzZL77L7q33qI7hJ1Pl7R/ElWtUsb\nZm3pG23ft+7VKPS3jmZN+0M+1Kr4hfEMXWE8zy3fO3+9WjDveH7T03fcrMt9JRm2fKSv3/7taMdw\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": { - "tags": [], - "image/jpeg": { - "width": 600 - } - }, - "execution_count": 26 - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ijTFlKcp6JVy", - "colab_type": "text" - }, - "source": [ - "Run `train.py` to train YOLOv3-SPP starting from a darknet53 backbone:" - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "Mupsoa0lzSPo", - "colab_type": "code", - "colab": {} - }, - "source": [ - "!python3 train.py --data data/coco_64img.data --img-size 320 --epochs 3 --nosave" - ], - "execution_count": 0, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "0eq1SMWl6Sfn", - "colab_type": "text" - }, - "source": [ - "Run `test.py` to evaluate the performance of a trained darknet or PyTorch model:" - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "0v0RFtO-WG9o", - "colab_type": "code", - "outputId": "6791f795-cb10-4da3-932f-c4ac47574601", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 - } - }, - "source": [ - "!python3 test.py --data data/coco.data --save-json --img-size 416 # 0.565 mAP" - ], - "execution_count": 0, - "outputs": [ - { - "output_type": "stream", - "text": [ - "Namespace(batch_size=16, cfg='cfg/yolov3-spp.cfg', conf_thres=0.001, data='data/coco.data', img_size=416, iou_thres=0.5, nms_thres=0.5, save_json=True, weights='weights/yolov3-spp.weights')\n", - "Using CUDA device0 _CudaDeviceProperties(name='Tesla K80', total_memory=11441MB)\n", - "\n", - "Downloading https://pjreddie.com/media/files/yolov3-spp.weights\n", - " % Total % Received % Xferd Average Speed Time Time Time Current\n", - " Dload Upload Total Spent Left Speed\n", - "100 240M 100 240M 0 0 17.9M 0 0:00:13 0:00:13 --:--:-- 20.3M\n", - " Class Images Targets P R mAP F1: 100% 313/313 [11:14<00:00, 3.02s/it]\n", - " all 5e+03 3.58e+04 0.107 0.749 0.557 0.182\n", - " person 5e+03 1.09e+04 0.138 0.846 0.723 0.238\n", - " bicycle 5e+03 316 0.0663 0.696 0.474 0.121\n", - " car 5e+03 1.67e+03 0.0682 0.781 0.586 0.125\n", - " motorcycle 5e+03 391 0.149 0.785 0.657 0.25\n", - " airplane 5e+03 131 0.17 0.931 0.853 0.287\n", - " bus 5e+03 261 0.177 0.824 0.778 0.291\n", - " train 5e+03 212 0.18 0.892 0.832 0.3\n", - " truck 5e+03 352 0.106 0.656 0.497 0.183\n", - " boat 5e+03 475 0.0851 0.724 0.483 0.152\n", - " traffic light 5e+03 516 0.0448 0.723 0.485 0.0844\n", - " fire hydrant 5e+03 83 0.183 0.904 0.861 0.304\n", - " stop sign 5e+03 84 0.0838 0.881 0.791 0.153\n", - " parking meter 5e+03 59 0.066 0.627 0.508 0.119\n", - " bench 5e+03 473 0.0329 0.609 0.338 0.0625\n", - " bird 5e+03 469 0.0836 0.623 0.47 0.147\n", - " cat 5e+03 195 0.275 0.821 0.735 0.412\n", - " dog 5e+03 223 0.219 0.834 0.771 0.347\n", - " horse 5e+03 305 0.149 0.872 0.806 0.254\n", - " sheep 5e+03 321 0.199 0.822 0.693 0.321\n", - " cow 5e+03 384 0.155 0.753 0.65 0.258\n", - " elephant 5e+03 284 0.219 0.933 0.897 0.354\n", - " bear 5e+03 53 0.414 0.868 0.837 0.561\n", - " zebra 5e+03 277 0.205 0.884 0.831 0.333\n", - " giraffe 5e+03 170 0.202 0.929 0.882 0.331\n", - " backpack 5e+03 384 0.0457 0.63 0.333 0.0853\n", - " umbrella 5e+03 392 0.0874 0.819 0.596 0.158\n", - " handbag 5e+03 483 0.0244 0.592 0.214 0.0468\n", - " tie 5e+03 297 0.0611 0.727 0.492 0.113\n", - " suitcase 5e+03 310 0.13 0.803 0.56 0.223\n", - " frisbee 5e+03 109 0.134 0.862 0.778 0.232\n", - " skis 5e+03 282 0.0624 0.695 0.406 0.114\n", - " snowboard 5e+03 92 0.0958 0.717 0.504 0.169\n", - " sports ball 5e+03 236 0.0715 0.716 0.622 0.13\n", - " kite 5e+03 399 0.142 0.744 0.533 0.238\n", - " baseball bat 5e+03 125 0.0807 0.712 0.576 0.145\n", - " baseball glove 5e+03 139 0.0606 0.655 0.482 0.111\n", - " skateboard 5e+03 218 0.0926 0.794 0.684 0.166\n", - " surfboard 5e+03 266 0.0806 0.789 0.606 0.146\n", - " tennis racket 5e+03 183 0.106 0.836 0.734 0.188\n", - " bottle 5e+03 966 0.0653 0.712 0.441 0.12\n", - " wine glass 5e+03 366 0.0912 0.667 0.49 0.161\n", - " cup 5e+03 897 0.0707 0.708 0.486 0.128\n", - " fork 5e+03 234 0.0521 0.594 0.404 0.0958\n", - " knife 5e+03 291 0.0375 0.526 0.266 0.0701\n", - " spoon 5e+03 253 0.0309 0.553 0.22 0.0585\n", - " bowl 5e+03 620 0.0754 0.763 0.492 0.137\n", - " banana 5e+03 371 0.0922 0.69 0.368 0.163\n", - " apple 5e+03 158 0.0492 0.639 0.227 0.0914\n", - " sandwich 5e+03 160 0.104 0.662 0.454 0.179\n", - " orange 5e+03 189 0.052 0.598 0.265 0.0958\n", - " broccoli 5e+03 332 0.0898 0.774 0.373 0.161\n", - " carrot 5e+03 346 0.0534 0.659 0.272 0.0989\n", - " hot dog 5e+03 164 0.121 0.604 0.484 0.201\n", - " pizza 5e+03 224 0.109 0.804 0.637 0.192\n", - " donut 5e+03 237 0.149 0.755 0.594 0.249\n", - " cake 5e+03 241 0.0964 0.643 0.495 0.168\n", - " chair 5e+03 1.62e+03 0.0597 0.712 0.424 0.11\n", - " couch 5e+03 236 0.125 0.767 0.567 0.214\n", - " potted plant 5e+03 431 0.0531 0.791 0.473 0.0996\n", - " bed 5e+03 195 0.185 0.826 0.725 0.302\n", - " dining table 5e+03 634 0.062 0.801 0.502 0.115\n", - " toilet 5e+03 179 0.209 0.95 0.835 0.342\n", - " tv 5e+03 257 0.115 0.922 0.773 0.204\n", - " laptop 5e+03 237 0.172 0.814 0.714 0.284\n", - " mouse 5e+03 95 0.0716 0.853 0.696 0.132\n", - " remote 5e+03 241 0.058 0.772 0.506 0.108\n", - " keyboard 5e+03 117 0.0813 0.897 0.7 0.149\n", - " cell phone 5e+03 291 0.0381 0.646 0.396 0.072\n", - " microwave 5e+03 88 0.155 0.841 0.727 0.262\n", - " oven 5e+03 142 0.073 0.824 0.556 0.134\n", - " toaster 5e+03 11 0.121 0.636 0.212 0.203\n", - " sink 5e+03 211 0.0581 0.848 0.579 0.109\n", - " refrigerator 5e+03 107 0.0827 0.897 0.755 0.151\n", - " book 5e+03 1.08e+03 0.0519 0.564 0.166 0.0951\n", - " clock 5e+03 292 0.083 0.818 0.731 0.151\n", - " vase 5e+03 353 0.0817 0.745 0.522 0.147\n", - " scissors 5e+03 56 0.0494 0.625 0.427 0.0915\n", - " teddy bear 5e+03 245 0.14 0.816 0.635 0.24\n", - " hair drier 5e+03 11 0.0714 0.273 0.106 0.113\n", - " toothbrush 5e+03 77 0.043 0.61 0.305 0.0803\n", - "loading annotations into memory...\n", - "Done (t=5.40s)\n", - "creating index...\n", - "index created!\n", - "Loading and preparing results...\n", - "DONE (t=2.65s)\n", - "creating index...\n", - "index created!\n", - "Running per image evaluation...\n", - "Evaluate annotation type *bbox*\n", - "DONE (t=58.87s).\n", - "Accumulating evaluation results...\n", - "DONE (t=7.76s).\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.337\n", - " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.568\n", - " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.350\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.152\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.359\n", - " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.496\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.279\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.432\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.460\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.257\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.494\n", - " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.623\n" - ], - "name": "stdout" - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "VUOiNLtMP5aG", - "colab_type": "text" - }, - "source": [ - "Reproduce tutorial training runs and plot training results:" - ] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "LA9qqd_NCEyB", - "outputId": "1521c334-92ef-4f9f-bb8a-916ad5e2d9c2", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 417 - } - }, - "source": [ - "!python3 train.py --data data/coco_16img.data --batch-size 16 --accumulate 1 --nosave && mv results.txt results_coco_16img.txt # CUSTOM TRAINING EXAMPLE\n", - "!python3 train.py --data data/coco_64img.data --batch-size 16 --accumulate 1 --nosave && mv results.txt results_coco_64img.txt \n", - "!python3 -c \"from utils import utils; utils.plot_results()\" # plot training results\n", - "Image(filename='results.png', width=800)" - ], - "execution_count": 8, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAACvAAAAV4CAYAAAB8IQgEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAewgAAHsIBbtB1PgAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xd0FNX///HXbkhCIKEHCIQaEkBB\naujVCnwoKiCiHwS/KoqoYPmpoAgKImBDlA+IIHxEsYEFRawE6VUIQSD0HkIIJRASQpL5/cFhPrsh\nuztpm0Sej3P2nLm7d+7cnXCY98687702wzAMAQAAAAAAAAAAAAAAAAAAAPAKe2F3AAAAAAAAAAAA\nAAAAAAAAALiekMALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAA\nAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAA\nAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAA\nAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAA\nAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcAL\nAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJ\nvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAX\nkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAA\neBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAA\nAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAA\nAAAAeBEJvAAAAAAAAAAAAAAAAAAAAIAXkcALAAAAAAAAAAAAAAAAAAAAeBEJvAAK3fnz57Vs2TIt\n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\nde3aVWfOnDHfq1+/vvr166fatWvr3LlzWrZsmX7++WdlZmYqMzNTzz//vHx9fTVy5EhLx4iPj1fv\n3r114sQJlSlTRnfddZeaN2+u0qVL68CBA/rss8908OBBSVeW9x42bJi+/fbba9oJCwsztw8dOqT0\n9HRJUuXKlRUUFORUNzQ0NKenwjRz5ky99tprZtlut6tbt266+eabVbZsWe3fv19ffvml9u/frxkz\nZqhChQqW27506ZJuv/12rV692nyvUqVK6tOnj5o0aaLSpUvr8OHD+uabbxQTEyNJ+v3333X33Xdr\n6dKllpaFunjxovr06aPdu3erZMmS6t27t9q0aaOyZcvq2LFj+uqrr7R9+3ZJUkJCgh544AGtX7/e\n7bLfsbGx6tixoxISEsz3ypcvr549e6pJkyaqUKGCkpKStGvXLi1fvly7du1y28fExER16NBBsbGx\n5nuhoaG688471aBBA/n7+2vv3r36+uuvtX//fknS/PnzFRAQoA8//NDjOQAAOPNmbJEbN9xwg9q2\nbauGDRuqfPnySktL0/79+7VkyRLt2LFDknTmzBn16dNH27ZtU82aNbNt5+LFi7rrrruc4ppOnTqp\nS5cuCg0Nla+vr5KSkrR3715t3LhRGzZsUGZmZoG3ZUXt2rVVosSV28THjh1TamqqpCvX25zEGp4k\nJCSobdu22rdvn/le6dKl1a1bN7Vq1UqVKlVScnKy9u3bp5UrV+qvv/6y1K7NZlPz5s3Vpk0bhYWF\nqVy5ckpJSdGuXbv0ww8/mLHe4cOH1atXL0VHR6tMmTLXtHM13jt9+rR57kuWLKnq1atne9y8nJvi\nFAcDAIqfq/csJMnHx8dlvbS0NPXv31979+6Vj4+Punfvrk6dOqlixYo6deqUfvvtt2t+r+/du1cd\nO3bUiRMnzPciIiLUu3dvhYWFyW63a8eOHfryyy/NOhMnTlRgYKBGjRrltt8jRozQtGnTnN5r1aqV\nbrvtNtWoUUM2m00nTpzQxo0b9ccffzjFmLkRFxenAQMG6NKlS5KunKvbb79d7dq1U0hIiOx2u86e\nPavY2FitW7dO0dHReTqeo7feekujR482yz4+PurWrZu6du2qsmXL6uDBg/r666+1e/dus69dunTR\n+vXrne5RufPpp59qzJgxkqSGDRuqT58+qlu3ri5fvqwNGzbo888/V1pamiRp+vTpuv3229W7d+98\n+44AABSWzMxMp9/bvr6+buunpqbq1ltv1bp168z3goOD1adPH910000qVaqUDh8+rEWLFunvv/+W\nJP3yyy/q37+/fvzxR7dtf/755xo0aJAyMjLM98LCwtSzZ0+FhYWpdOnSOnXqlLZu3ao//vhDJ0+e\ntPQdg4KC1KFDB7Vs2VJVq1ZVQECATp06pQ0bNuiHH34w45vPPvtM1apV05QpUyy1C6CQFHYGMYB/\nNseZzUqWLGmkpaV55bhyGFXkbnT1k08+6VTX1Ww1V02cONGpvqsZhZmBFwBQXD311FNO159NmzYV\nyHEyMjKumX1t3Lhx2S47tGLFCqNixYpmPX9/f2P79u0u23aceezqrC3du3fPdtnklJQUo2fPnk79\n2LZtm9u+O85SZ+Uab3UG3iNHjhiBgYFm3fLlyxt//vnnNfXS0tKM4cOHO32/qy93M709/fTTTnWH\nDRtmnD9//pp6mZmZxpQpU5zqzpgxw2W7jrPaXO1Py5Yts+1Lenq68eijjzq1/f3337tsOzU11Wja\ntOk1/T537pzLfTZv3mz069fPOHToULaf33333WZbNpvNePXVV7MdgX7p0iVj5MiRTsdeunSpy+MC\nALLnrdjCMKzPwHvfffcZjz/+uNt4wjAMY968eU4zst1zzz0u686ZM8esFxAQYPz+++9u246LizNe\ne+21bGf2zc+2DCNnqwFkncHVE6sz8GZmZhrdu3d3qtu3b1+3s77GxsYaDz/8sLFq1apsP+/SpYsx\nevRot/FPenq6MXnyZKeZ555//nm33yk3y18bhvUZeItzHAwA8K7cPCNISEhwuu517drV6XPH65xj\nfOBqVllHly9fNlq1amXu5+fnZ8ycOTPba1hSUpIxYMAAs66vr6/b68wXX3zh1KcaNWoYy5Ytc1k/\nKSnJmD59uvHSSy9l+7mVGXjHjBlj1gkODvZ4Dvbv3288++yzxq5du7L93GoMER0dbfj6+pp1q1Sp\nku2Kj+np6caoUaOczkvHjh2NzMzMbNvNGovY7XbDx8fHmDZtWrZ/o61btzotv92sWTO33x8AgMKQ\nm3jozz//dNqnZ8+ebutnzRl54oknjAsXLlxTLyMjw3jjjTec6n700Ucu242NjTVKly7t9Jv+ww8/\nzPa6bBhXYq3vvvvOGDBgQLafb9myxWjcuLGxYMECt7P/Hj161OjUqZNTTOAqfrmKGXiBwkUCL4AC\n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\nKysJdu/eXdOnT/e48uCePXs0btw4l0mv/v7+TjPexcfHq2PHjlq+fLnLNpOTkzVz5sw8DfStV6+e\nhgwZolWrVrkdWLRz506n5OVWrVo5JRzn1IQJE8zVKdLT09WrVy+tW7fumnoZGRl65ZVXNGPGDPO9\nTp06Oc0UCAAAXHv22Wfl5+dnlrObhbdp06ZOE4k8//zzeuqpp3TmzBm3bSckJGjmzJm68cYbtXHj\nxmzrvPPOO+Yzn8zMTPXp00cfffSRyxWCMjIy9OOPPzpN9nLVbbfdZm4nJibqoYceyvZ+2qVLl/TC\nCy9oypQplu+DACh8JQq7AwCuH35+fvr444/VunVrjRs3TidOnJB0JYhYtmyZli1b5rENm82mvn37\navLkyU5LKufFgAEDdOnSJT388MPmjaaoqCiXs94FBQXp+++/V9u2bT22HRgYqFWrVumee+7RH3/8\nIenK912yZInHGWJuvfVWffnll05LOwAA4C02m01fffWVhg4dqnnz5km6MvjmmWee0ZgxY3TzzTer\nRYsWCg4Olr+/v+Lj43X48GH9+uuvOnDggMf27Xa75s6dqzZt2pg3Ql555RV9/vnn6tevn2rVqqVz\n584pKipKS5cudUpemTRpklPSxj9FaGio3nzzTQ0bNkzSlfPdpUsX9ejRQzfffLPKlCmjAwcO6Isv\nvtC+ffskXUnEtZrEMWnSJMXExJijvP/zn/9o3rx56tatmyIjIxUcHCxJOnv2rPbu3astW7Zo06ZN\nbhOHCpqfn5+++OILdejQQSdPnjT7/cUXX6hnz55q2rSpypcvr6SkJO3evVt//vmntm/fLkmaPHly\ntm1+/PHH2rt3r6Kjo5WRkaFx48bpvffeU7du3dS8eXNVqFBBGRkZOnPmjGJjY7V582ZFR0d77TsD\nwD9VQccWVj3//PPm7/Hk5GTdfPPN6tWrl7p06aJy5copISFBUVFR+uWXX5SZmalq1aqpd+/emjlz\nptt2MzMz9d133+m7775TpUqV1L59ezVv3lyVK1dWQECAEhMTtWnTJn3//fe6ePGiud/kyZOveaCS\nn20VJXPnzlW7du20Z88eSdLChQu1dOlS9ejRQ61atVLFihV18eJF7d+/X6tWrTJXJ7r33nuvaeuF\nF17QAw88IOlKkk+LFi3Ut29ftW3bVqVLl9bx48f166+/asWKFZKkxo0bq0GDBvr666899rN69eq6\n7bbbzJhpypQpmjZtmmrXri1/f3+z3mOPPZarGfCIgwEAxZWvr6++/vprtW/fXocPH1ZKSoqeeOIJ\nvf766+rWrZsaN26s8uXL69KlSzp9+rR27NihjRs3KjY21mPbffv21ciRIzV16lRJV1Yr7Nq1q1q3\nbq3bb79doaGhstvtOnHihDZv3qzffvtNycnJGjx4cK6/T3p6uv773//qv//9r6pXr6727durSZMm\nqlSpknx9fXXy5EmtXbtWS5YsMVfjsdlsmjJlSq6PKUk33XSTJk6caK70cOLECXXo0EE9evRQ165d\nVaZMGR06dEhfffWV07mrUKGCPv74Y3OgEQAAcK969er697//ba5qs3jxYm3ZskXNmjVzqvfmm29q\n+/btZj7H+++/r48//lh33HGH+ezEMIxrnp24SsS9ql69epozZ47uu+8+ZWRkKDU1VUOHDtXkyZPV\nq1cv1atXT6VKlVJiYqK2bdum33//XXFxcQoLC7umrTZt2qhTp07mfY4vv/xS69ev14ABAxQREaG0\ntDTt2rVLixYtMichGTdunF555ZU8n0cAXmAAQCG4ePGi8e677xpt27Y1SpQoYUhy+fLx8TGaNGli\nvPbaa8ahQ4cste+4/+DBgy3ts3PnTqN3794u+1OyZElj8ODBxrFjx3L8fTMyMoyvv/7aaNOmjWG3\n211+V7vdbrRp08ZYuHChkZmZmePjAABQED744AOjUqVKbq/Xrq5rDz30kHH8+HGXbW/ZssWoUqWK\npfZsNpsxZcoUj/3t3Lmzuc/YsWMtfceoqCinY7lTq1Yts97cuXM9tj137lyzfq1atTzWHzNmjKXz\nMXz4cOPAgQNO7x04cMBt22lpacbQoUNz/LeUZKxYsSLbNgcPHpzjuCun/d67d68RERGRo/66a/P8\n+fNG7969c3UerMajAADXCiq2cKwbFRXl8vivvvqqpeMFBwcb69atM8aOHWu+17lz52zbdIwPrMY1\nEydOLPC2DCNnsUhO46icxFCGYRgnT540WrdunaPv5+pv+X//93+W9q9bt66xZ8+eHMUs+/btM2rW\nrOm23aznJ6fxTXGMgwEA3uV4DfcU31hlJa7x5MSJE0bbtm1zFct5Mm7cOLfPULK+XF3TrVz3c9p/\nPz8/45NPPnHZ95ye24kTJxo2m83SsUNCQoxt27a5bS+nschVubmvAwCAt+Q1Htq1a5dTbNGnT59s\n66WlpRkPPfRQjuMDScaaNWvc9mHx4sVGYGCg5fbCwsKybefw4cNG9erVLbXx0EMPGWlpaU7vrVy5\n0mUfHdudP3++y3rt27c3640fP97t9wZgXdGdkgHAP1pAQIBGjhypNWvW6PTp0/r99981f/58TZ06\nVRMmTNC0adM0f/58rVixQufOndPWrVs1ZswYl0ssZWUYhvm6OrOPJw0aNND333+vhIQEffvtt/rg\ngw/0+uuva8aMGfrpp5+UmJioefPmqVq1ajn+vna7Xf369dPatWuVmJioJUuWaNasWZo0aZImTZqk\nWbNmacmSJTp16pTWrl2rvn37MooaAFBkDB8+XPv379frr7+uZs2aebxG1ahRQy+88IJ27typ2bNn\nKyQkxGXdpk2baufOnXrqqacUFBSUbR273a6uXbtq/fr15uwk/2SvvfaaFi9enO0oa0mqWbOm5syZ\n47S8pFW+vr768MMPtXbtWvXo0cNp+ajs1KtXT08++aQ2bNigjh075vh4+SUsLEzbtm3Tm2++qRo1\narit27hxY7399ttuY7bAwEB9//33+umnn9SxY0ePsxU2atRIL774onbu3Gk5HgUAuFaQsYUVr7zy\nij799FOX1xR/f38NGDBA0dHRat26taU2p0+frsGDB6t69epu69ntdt1xxx1as2aNRo0aVeBtFTXB\nwcFas2aN5syZo4iICLd169Wrp3Hjxl0zM85Vs2fP1rvvvquKFStm+3lgYKAeffRRbdmyRfXq1ctR\nP+vWravo6Gi99dZbuuWWW1S1alWVLFkyR214QhwMACiuqlSpolWrVmnBggUur9NX2e12RUZGavz4\n8ZZWVRg7dqz++usv9ezZU76+vi7rBQUF6b777tNTTz2V4/5f9emnn+qee+5RpUqV3Nbz8/NTv379\ntHXrVg0aNCjXx8tq1KhRWrt2rbp06eIyHi5TpoxGjhypHTt2qHHjxvl2bAAArhf169fXXXfdZZa/\n//57bdmy5Zp6vr6+mj17tlavXq1u3bq5jUMkKTw8XE899ZQ2bdrkceXmXr16ac+ePXrsscdUpkwZ\nl/V8fX1166236q233sr28xo1amjTpk3q16+fy9ghIiJC8+fP1+zZs8k3AYoRm2EYRmF3AgAAAEDx\nkZCQoI0bN+rkyZM6deqU0tPTVa5cOYWEhKhFixYKDQ3NVbtpaWlauXKl9u/fr1OnTql06dIKCQlR\n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\n115J1k6/tb8mhTkdqvBIFUakDEP60pui27xz1Ts6XMeLj+mk26uTRlWBcMvtg7kAACAASURBVHWM\nKlWUujgNTTmrj/7tol9ZGaruLsoNfc+hJC0tzcodOTk5uvjiixtsW1hYaD3qOT4+XnFxcUEzZlsa\nmDZK//zh/2p4zlxbi3grTafuqbytqpDdRg5Deqo5/7YAAKCDkFNaryqnPK70nPvkMpryjJDGeUyH\n7q683faMIrXgM1AAANpRaP+0DACAzqqpj7purM1PX0lbnpW+XdXix2UDAICONTk9UYPiY+oV59R8\ndDfal8fj0fz5863XS5YsqVVIW+3xxx/XP/7xD+Xm5mrTpk368MMPdcUVVwTEmE8++aSOHz8uqarw\nt2bxbrVRo0bpkUce0T333CO326358+frrbfeatH8AQC1NVQM3Nwi4dbuju9vR+K686jbtu7r6l2H\nfRUn/2Zkcr3diKX6RctSVeFwF4dDFV6v8opO6NXsvVq9rUBmnQw0OCGmwYJjX4XJ1X36+n/kaxdl\nX99jKJkwYYKeeOIJSdKaNWt03333Ndh29erV1nFGRkZQjdnWRv76Fv2r31k68vH/q2HH/qFIo1Km\nKRmnLsHmHJebYVrlveCXXaht4nQYujglTndfnsK/LQAAQYGcYo/qnHL8fx9WWtmn1lMsmptV3KZD\n673peso9zfbi3XCXQ78+qw+fgQIAApphmqY9t8Og1fbt26fk5GRJUn5+vpKSkjp4RgCATsHrbfxR\n1421aUofzcCaF1z4/QKAziOUd4FrqvZY99avX69LLrlEkjR27Fht2LChwbavvfaabrrpJklSZmam\nXnvttYAYs3///vrhhx8kSXv27NGAAb4fQVhcXKzevXvrxIkTOu2001RUVKTIyMgWfQ++kFMAAE3R\nGTJQsK15Ho9HSUlJOnDggCTp888/14gRI3y2GzlypHJzcyVJa9eu1fjx44NmzIa0xe+X1+NReVmJ\nunSJVHlZiSQpIjK6acflpVJYpCLCwlTurtrNN8LltOW45q7TAIDQRE4JzDEb0lY5pbTkZ0nNyCfV\nx1FdVe6pKluyK59EuJwN3nwHAAgdwZJRWl+B04ZWrlypadOmqX///oqIiFB8fLxGjx6tJ554wtrl\nxQ7FxcVavny57rjjDo0ePVpxcXEKCwtT165dNXjwYM2YMUNr164Vtc4AgKBU/ahrf4W3jbVpSh8A\n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\nBEGAIAgICQkp9zZnz54Vn8/Ozoajo6P5F6Hh5ZdfFuMJgoARI0bo7YcgCGU6FxEREVUd06dP15oD\n9OrVy+IxzX0Q0bNDIvBfNRGVUUFBAc6ePYvIyEikp6ejdu3aqFevHnr27AkXF5eK7p7JHj16hAsX\nLuDBgwd4+PAhlEolnJ2dUbt2bTRr1gz+/v6ws7Mrt/6kpqYiLCwMycnJePr0KerUqQMfHx90797d\nIh/YpKam4uzZs0hJSUFaWhpkMhlcXV3RqFEjdO7cucxvdBERUeX0rIzbSUlJiIiIgEKhgEKhgEQi\ngYuLC+rXr48OHTqU+ks2T58+xcmTJ3Hnzh08fvwYzs7OqF+/PoKDg6vU/bEUlUqFkydPIi4uDunp\n6fD29oavry+CgoIsdo60tDSEh4fj/v37ePToEeRyOVxcXNCsWTP4+fkZTJatKGq1GhcvXkRMTAwU\nCgXy8/Ph4uICHx8fBAYGmp2gAwApKSn466+/xLmZnZ0dXF1d0bx5c/j5+VXL3z8iqho4tygbpVKJ\n8PBwxMTEICsrC3Xq1EGDBg0QHByMGjVqlDrujRs3EBsbizt37iAjI0O8nhYtWqBDhw5mJSBbMlZl\nFBUVhYiICDx48ABKpRJOTk5o0qQJAgICdCbu6pKZmYmwsDDcuHEDOTk58PT0RKNGjdCzZ0/Y2NhY\n+Qosg/NgIiIiIiIiIiKi8scEXiIiIiIiIiIiIiIiIiIiIiIiIiIionJkeK9SIiIiIiIiIiIiIiIi\nIiIiIiIiIiIisigm8BIREREREREREREREREREREREREREZUjJvASERERERERERERERERERERERER\nERGVIybwEhERERERERERERERERERERERERERlSMm8BIREREREREREREREREREREREREREZUjJvAS\nERERERERERERERGRxalUKkRHRyMkJASvvPIKunTpgho1akAikUAikWD69OlWO/e+ffswduxYNG7c\nGPb29vDw8EDXrl3xySefICMjw2rnJSIiIiIiIiIylbyiO0BERERERERERERERETPnnHjxmHXrl3l\nes6srCxMmjQJ+/bt03peoVBAoVDgzJkzWLNmDXbs2IHOnTuXa9+IiIiIiIiIiDRxBV4iIiIiIiIi\nIiIiIiKyOJVKpVV2dXVF8+bNrXq+sWPHism7np6eWLx4MbZs2YKvv/4a3bp1AwAkJSVhyJAhiI2N\ntVpfiIiIiIiIiIiM4Qq8REREREREREREREREZHEdO3ZE69atERgYiMDAQDRp0gQhISGYMWOGVc63\nbt06HDp0CADg6+uLY8eOwdPTU3x97ty5WLBgAVavXo20tDS8+OKLCAsLs0pfiIiIiIiIiIiMkQiC\nIFR0J4iIiIiIiIiIiIiIiOjZp5nAO23aNISEhFgkrkqlQoMGDZCcnAwA+PvvvxEQEKCzXocOHRAR\nEQEAOHz4MAYMGGCRPhARERERERERmUNa0R0gIiIiIiIiIiIiIiIiKouwsDAxeTc4OFhn8i4AyGQy\nvPrqq2J569at5dI/IiIiIiIiIqLimMBLREREREREREREREREVVpoaKh4PGTIEIN1Bw8erLMdERER\nEREREVF5kld0B+gfSqUSUVFRAAB3d3fI5fzxEBHRs6mgoAAKhQIA4OfnB3t7+wruERnCOQoREVUn\nnKdULZynEBFRdcE5inFFcwIACAoKMljXy8sLDRo0QFJSElJTU6FQKODu7m6xvnCOQkRE1QnnKVUL\n5ylERFRdVJU5CkfiSiQqKgodO3as6G4QERGVq/Pnzxv9UIUqFucoRERUXXGeUvlxnkJERNUR5yi6\nxcXFicdNmjQxWr9JkyZISkoS25qTwHv37l2Dr0dERGDYsGEmxyMiInpWcJ5S+fG9FCIiqo4q8xyF\nCbxERERERERERERERERUpT158kQ8rlOnjtH6bm5uOtuaokGDBmbVJyIiIiIiIiLShQm8lYjmt7vP\nnz8Pb2/vCuwNERGR9SQnJ4vf7rXk9oRkHZyjEBFRdcJ5StXCeQoREVUXnKMYl5WVJR6bsi2mg4OD\neJyZmWmVPgGcoxAR0bOP85Sqhe+lEBFRdVFV5ihM4K1E5PJ/fhze3t6oX79+BfaGiIiofGiOf1Q5\ncY5CRETVFecplR/nKUREVB1xjlLxkpKSDL6u+SEh5yhERFSdcJ5S+fG9FCIiqo4q8xyl8vaMiIiI\niIiIiIiIiIiIyASOjo5IS0sDACiVSjg6Ohqsn5OTIx7XqlXLrHMx0YWIiIiIiIiILEFa0R0gIiIi\nIiIiIiIiIiIiKgsXFxfx+OHDh0brP3r0SGdbIiIiIiIiIqLywgReIiIiIiIiIiIiIiIiqtJatmwp\nHicmJhqtr1lHsy0RERERERERUXlhAi8RERERERERERERERFVaX5+fuLxhQsXDNZNTU1FUlISAMDD\nwwPu7u5W7RsRERERERERkS5M4CUiIiIiIiIiIiIiIqIqbdCgQeJxaGiowboHDx4Uj4cMGWK1PhER\nERERERERGcIEXiIiIiIiIiIiIiIiIqrSgoOD4eXlBQA4ceIELl26pLOeSqXCV199JZYnTJhQLv0j\nIiIiIiIiIiqOCbxERERERERERERERERUaYWEhEAikUAikaBXr14668hkMixZskQsT506FQ8ePChR\nb9GiRYiIiAAAdOvWDQMHDrRKn4mIiIiIiIiIjJFXdAeIiIiIiIiIiIiIiIjo2ZOYmIj169drPXfl\nyhXx+PLly1i8eLHW63369EGfPn1Kdb5Zs2Zh9+7d+OOPP3D16lX4+/tj1qxZ8PX1xePHj7F161aE\nh4cDAFxcXLB27dpSnYeIiIiIiIiIyBKYwEtEREREREREREREREQWd/v2bXzwwQd6X79y5YpWQi8A\nyOXyUifwyuVy/Pbbb5g4cSJ+//13pKSkYPny5SXq1a9fH9u3b8dzzz1XqvMQEREREREREVmCtKI7\nQERERERERERERERERGQJtWrVwv79+7Fnzx48//zzaNCgAezs7FCnTh106tQJq1atQnR0NLp27VrR\nXSUiIiIiIiKiao4r8BIREREREREREREREZHF9erVC4IglDnO9OnTMX36dLPajBgxAiNGjCjzuYmI\niIiIiIiIrIUr8BIREREREREREREREREREREREREREZUjJvASERERERERERERERERERERERERERGV\nIybwEhERERERERERERERERERERERERERlSMm8BIREREREREREREREREREREREREREZUjJvASERER\nERERERERERERERERERERERGVIybwEhERERERERERERERERERUZWmVgvIziuAWi1UdFeIiIiICADU\naiDvaeF/SSd5RXeAiIiIiIiIiIiIiIiIiIiIqDRi7mdgXXgCQqNSkJOvgoONDIP9vDCze1P41nUC\nUJjcqyxQwVYqhbJABQCoYSuHVCrRet1eLhOfKyt9MU05V1EycvF+EhEREVUJKVHAmW+AmL1AfjZg\nUwPwHQF0mQt4+VV07yoVJvASERERERERERERERERERFRlbM34h7m74hEgcaquzn5Kuy6dA/7Iu7j\njf4tEK/IwoErycgt0F75TSoBAhrWhpODDc7cfKQ3+ddcxROK7eVSDGrjiR7NPXA6/iFCo/UnGsfc\nz8CnR+JwMk4BlVB4TTKpBL1auGP+gJal7hMRERFRCQIgbdQAACAASURBVGo1UJADyB0AqdRy8WJ/\nB/b+F1AX/PNafjYQuRWI3A4M/wpoN8ky53wGMIGXiIiIiIiIiIiIiIiIiIiIqpSY+xklknc1FagF\nfHw4Tm97tQBcvJ2m9Zxm8u/qcf4Y0a6e/vY6VtLVlVCsLFBjT0Qy9kQkGzwXALy+PQLFL0elFnD0\n2gMcvfYAH41ugzHtG4irCNvLZaU+5sq+RERE1VTx1XHlDoWr43Z9GfB4zvSk3qKE3YfxwLnvgKu7\ngQKlkZOrgX0vA/teBZr1AfouAbz9LXZpVRETeImIiIiIiIiIiIiIiIiIiKhKWReeoDd5t6wK1ALe\n2B6B5h610MqrFpQFKthKpchTq5GoeIr1pxPFFXaLVtLt09LDYEKxsXMJQInk3eIW/RaNRb9Fl/7C\nNHBlXyIiomqkKNn22gFgz0vaq+MW5ABXthU+pDaAOh+wqQG0Hg4E/Qeo10E7mfd+JHBmTWGs/OzS\ndgiI/7PwUb8zMGBZYfKwbc1qtzIvE3iJiIiIiIiIiIiIiIiIiIioylCrBYRGpVj1HCoBmLL+HLJy\nC5BboNZbr2gl3d2X7qG06cQq6+QhGz7n/6/sezzuAT4f387gasNERERURaVEAX99DcTuBfJzjNdX\n5xf+Nz9bO6m39YjCFXMv/QwknbVsH++eBX4aWHgslQHN+gN9FgNefpY9TyVVvdKViYiIiIiIiIgq\ngczMTPz22294+eWX0bVrV7i7u8PGxgZOTk5o1aoVpk6dikOHDkEQLP8J3r59+zB27Fg0btwY9vb2\n8PDwQNeuXfHJJ58gIyPDrFjx8fFYuHAh2rRpA2dnZzg6OqJly5aYO3cuIiIiLN738qBWC8jOK0BB\ngRpZynxkKfOhttKKTkRERERERFQ6ygIVcvJVVj/Po6d5BpN3NVXVvxzVAvDGjkjE3DfvPQEiIiKq\n5MJWA9/3KEzCNSV5Vx91PnD1V2Dvfy2fvFviXCrg+iFgbTAQ9at1z1VJcAVeIiIiIiIiIqJy9Nln\nn+Hdd9+FUqks8VpmZibi4uIQFxeHX375BT169MCmTZvQsGHDMp83KysLkyZNwr59+7SeVygUUCgU\nOHPmDNasWYMdO3agc+fORuP98MMPmDdvHnJytN/4u379Oq5fv461a9diyZIlWLJkSZn7Xh5i7mdg\nXXgCDlxJLvHhLLcVJSIiIiIiqlzs5TLYyaUmJ9eSYSq1gPXhiVg9zr+iu0JERET6qNVAQQ4gdwCk\nBtZtTYkC9vwXSLlSfn2zNEEF7J4NuLd85lfiZQIvEREREREREVE5un79upi8W69ePfTr1w+BgYHw\n8PCAUqnE2bNnsWnTJmRlZeHUqVPo1asXzp49Cw8Pj1KfU6VSYezYsTh06BAAwNPTE7NmzYKvry8e\nP36MrVu34vTp00hKSsKQIUNw+vRptG7dWm+8TZs24cUXXwQASKVSTJgwAX379oVcLsfp06exceNG\n5ObmYunSpbCzs8Nbb71V6r6Xh70R9zB/RyQK9Ky0W7St6NFrD/D5eH+Mal+/nHtIRERERERUeanV\nApQFKtjLZZBKJeVyzv1X7iOPybsWdTAqGZ+MaVtuP0MiIiIyUUoUcOYbIGYvkJ8N2NQAfEcAXeYW\nJrdqJvZG/wrsnlOYAFvVqVXAmW+BUd9VdE+sigm8RERERERERETlSCKRYMCAAViwYAH69u0LabFv\nyk+bNg2LFi3CwIEDERcXh8TERCxatAg//fRTqc+5bt06MXnX19cXx44dg6enp/j63LlzsWDBAqxe\nvRppaWl48cUXERYWpjOWQqHA3LlzARQm7+7evRvDhw8XX586dSpmzJiBvn37Ijs7G4sXL8bIkSPR\nsmXLUvffmmLuZxhM3i3u9e2R2HouCe8Nf46r8RIRERERUbVWtJNJaFQKcvJVcLCRYbCfF2Z2b2rV\nv5eu3kvH/B2RMO2vODJVTr4KygIVatgyjYSIiKjSiPoV2P0ioC7457n8bCByK3BlB9CgE5AcUfgc\npACesS84xewBRnxjeMXhKu7ZvTIiIiIiIiIiokrogw8+wOHDh9G/f/8SybtFGjVqhO3bt4vl7du3\nIzs7u1TnU6lUWLZsmVj+5ZdftJJ3i6xatQrt2rUDAJw6dQpHjhzRGe/TTz9FRkYGgMLEX83k3SKd\nO3fG8uXLAQAFBQVa569s1oUnmJy8W+T8rccYuuYU9kbcs1KviIiIiIiIKre9Efcw/Otw7Lp0Dzn5\nhSu85eSrsOtS4fPW+Hsp5n4G/h1yAUPXhJv9dxwZ52Ajg71cVtHdICIioiIpUcDu2drJu5oEFXDn\nr/9P3gWeueRdoPDaCnIquhdWxQReIiIiIiIiIqJy5OrqalI9f39/cdXa7OxsxMfHl+p8YWFhSE5O\nBgAEBwcjICBAZz2ZTIZXX31VLG/dulVnPc3E4tdff13veWfNmoWaNWsCAPbt24ecnMr3JptaLSA0\nKqV0bQXgjR2RiLmfYeFeERERERERVW7GdjIpUAuYb+G/l/ZG3MPQNadw7NoDrrxrJUP8vCGVSiq6\nG0RERFTk4JuAWlXRvahYNjUAuUNF98KqmMBLRERERERERFRJOTn9s+VoaRNgQ0NDxeMhQ4YYrDt4\n8GCd7YrExMTg9u3bAIDWrVujSZMmemPVqlULPXr0AAA8ffoUJ0+eNKvf5UFZoBJXiioNlVrA6iNx\nFuwRERERERFR5WfKTiYFagHrwxP1vq5WC8jOK4BaTxzN12PuZ+CN7RHgorvWI5NK8J/u+v/GJyIi\nonKkVgN3zhaurlvd+Y4E9Oxk+KyQV3QHiIiIiIiIiIiopLy8PFy/fl0sN2rUqFRxoqKixOOgoCCD\ndb28vNCgQQMkJSUhNTUVCoUC7u7upYpVVOfQoUNi20GDBpnbfauyl8vgYCMrUxLv0WsPsOfyPYxs\nX8+CPSMiIiIiIqqczNnJ5MCV+/hkTFutVV1j7mdgXXgCQqNSkJOvgoONDIP9vDCze1O08qqFiLtp\n2HTmDkKjC1+3lUkgl0mhYvKu1UglwGfj/OFb18l4ZSIiIrKelCjgzDdAzF4gP7uie1PxpDKgy38r\nuhdWxwReIiIiIiIiIqJKaMuWLUhPTwcABAQEwMvLq1Rx4uL+WSHW0Iq5mnWSkpLEtpoJvKWJpatt\nZSGVSjDYzwu7Lt0rU5z5OyLQwrMWP+wkIiIiIqJnhlotQFmggr1cppWAa85OJsoCNV7fEYEXe/rA\nt64T9kbcw/wdkVqr9+bkq7Dr0j3svnQPUokEKkE7UzdPJSBPVc23jrYSmVSC3i3d8Ub/lvx7loiI\nqKJF/QrsfhFQF1R0TyxLbg/4jgKC/g3UDQDCPgVOfgTAyLezJDJg1A+Al1+5dLMiMYGXiIiIiIiI\niKiSUSgUeOutt8Ty4sWLSx3ryZMn4nGdOnWM1ndzc9PZ1tKxTHH37l2DrycnJ5sds7iZ3ZtiX8R9\no9u/GqISgPf2XcWOOV3K3B8iIiIiIqKKZGyF3IICNRxspMjJV5sUb2/EfRy4kox5/Zrjiz9v6P3b\nSwBKJO9aS1E+chn+DCx3w9t6Y8XINpBKJbCXy6AsKExqLstxDVu5VnI2ERERVZCUqGcveVciA4av\nAfxfAKTSf57vvQho/a/ClYav7gIKcku29fQDRn1XLZJ3ASbwEhERERERERFVKnl5eRg9ejQePHgA\nABg5ciRGjRpV6nhZWVnisb29vdH6Dg4O4nFmZqbVYpmiQYMGZrcxl29dJ6we519iFShznb/1GFfv\npeO5es4W7B0REREREVH5MbRC7q5L9yCVlC7ptUAt4NMj1y3Y09KxkUkw3L8e/tO9cLeY9eGJOBiV\nbPKKwhVFJpVgTq9mcKphKz7nKJda5JiIiIgqgTPfVFzyrkQGNOwE3I8A8rMBmR3gVBfITAYKlACk\nKPyqVbFJoNQGcK4PZNwDVHn/PC+3B557HujyX/0JuF5+wKjvgRHfAgU5wIZ/AcmX/3m90+xqk7wL\nMIGXiIiIiIiIiKjSUKvV+Pe//41Tp04BAHx8fPDTTz9VcK+efSPa1UNzj1pYH56I36/cR26BaStJ\nFffjqQR8MaG9hXtHRERERERkfTH3M4x+sbEqrVgrk0qgUguwl0sxuI0XpnRpjHYNXLRWnF09zh+f\njGkLZYEKR66mYsFO077YKZMA8/q3wJcGVhS2FKkE+GycP3zrOln1PERERFRB1GogZm/5nU8qA9Qq\nwKYG4Dvyn0RbtbowmVbuULhirmYZAPKfFubw2jgAqtyS9WR22s+b1BcpYFuzsE+aymlXhsqCCbxE\nRERERERERJWAIAiYM2cONm/eDABo2LAh/vzzT9SuXbtMcR0dHZGWlgYAUCqVcHR0NFg/JydHPK5V\nq1aJWEWUSqXRcxuKZYqkpCSDrycnJ6Njx45mx9WlaCXeog9vD0el4I2dkcXXFTDo8NVUqNUCtyAl\nIiIiIqIqZ114gtWTUcuLXCrBnrnd0NS9JuzlMoN/o0mlEtSwlWNk+3po4Vn4xc59kfeQr9J9L+RS\nCVaP88eIdvXQt5Wn1iq+dnIpvJzskZKhRG6BGg42Mgzx80bvlu44HqcQ68kkEggQDCZEy6T/x969\nx0dV3fv/f+09M7lJABVCgKCAYCQYg3hpRVoEK0iqhJvRr+f8lApIK9r2AO2xaG2tbS3aUI9y0QqK\nRaUgctMGvBRQgihQDEbCxUvUSIiAQgMmgZnZ+/fHNEOuk5nJ5P5+Ph482DOz9l5rJkrW7P3en2Uw\nPLkrM65LVnhXRESkLfOU+SrfNgXTCVM3wrn9agZtK8K0dT2OrnR+3+GsvZ0jzCiqUS3wa4dXYKO1\nUoBXRERERERERKSZ2bbNXXfdxdNPPw1AUlISGzdupHfv3g0+dufOnf0B3qNHj9Yb4P3666+r7Fv9\nWBWOHj1ab9+BjhWMpKSkkPdpqIqLt+MuSyK5e0cmPbudwydOBbVvmdtLucdLXJROuYmIiIiISOth\nWTbr84qbexgRURGwvbhnp5D3rXxjZ+6Xx3jh3S/IziumzO31h3EnD+3jD9RWvxG0IixsWXaVxwA3\npPWo0g6g3OMlyjQp93gBiHE6/NtxUU7dHCoiItIeOGN91XAbO8RrOmHcU9A9rXH7CUf1AG9IZTVa\nP11NEBERERERERFpRrZtM336dJ588kkAevbsyaZNm7jgggsicvzk5GQKCgoAKCgoqDcUXNG2Yt/q\nx6qtXTjHag1SenTkmUlXcMMTOUHv8/qerxh7ac9GHJWIiIiIiEhklXu8lLm9zT2MBol2mtxwSY8q\nAdtwmabB4PPOYfB55/DoxJph3NraV76Rs/rjup6v2O7gPBNaqbwtIiIi7cDhPb4KtpEO8BoOsL2+\ncHDKWLjqLkhMjWwfkWJUm2OpAq+IiIiIiIiIiDSFivDuwoULAejRowebNm2iX79+EesjNTWVDRs2\nALBjxw6GDx9eZ9uvvvqKwsJCABISEujatWuNY1XYsWNHvX1XbnPxxReHNO6W4uKenbii99ns+OxY\nUO1nvbSbC7vFa4lTERERERGptRJrSxTjdBDrcrTaEG9GWg/+cvOgRvmM6wrjioiIiDRY3kpYdacv\naBsphgPGPQkXTwRPma/Cr9nCbxCqXoHXbl8VeFv4T0dEREREREREpG2qHt7t3r07mzZton///hHt\n5/rrr/dvr1+/PmDb7Oxs/3Z6enqN11NSUjjvvPMA2Lt3L5999lmdxzp58iRbtmwBIC4ujmHDhoUy\n7BblwTEX4wjyQrDHslmcU391YhERERERabvyi0qYsSKXgb95jZQHXmPgb15jxopc8otKmntotTJN\ng9Gpic09jLA4TYNpwy5o0QFpERERkRqK82D1tMiFd50xkHYrTHsLLsn0hXajzmr54V0AqlfgVYBX\nREREREREREQa2d133+0P7yYmJrJp0yYuvPDCiPczbNgwEhN9F2I3b97Mrl27am3n9Xp5/PHH/Y9v\nueWWWtvdfPPN/u25c+fW2e9f//pXvv32WwDGjBlDXFxcyGNvKVJ6dOTPN10SdPvsvENYVvs6ySgi\nIiIi0p5Zlk3paQ+WZbM29yBj5uWwatdBf0XbMreXVbsOcuMTW1ix84sW930hv6iE46Xu5h5GyJym\nQVZmWuOugGJZcPpb398iIiIikbJtPlie0PczHDD+afjVl3Dvl/Drr2F2Ecw+BOMWQmJq/cdoaYzq\nN2K1rLlyY1OAV0RERERERESkid1zzz0sWLAA8IV3N2/eTHJycsjHWbJkCYZhYBgG11xzTa1tHA4H\nDzzwgP/xbbfdxuHDh2u0u/fee8nNzQXg6quvZtSoUbUeb9asWcTHxwMwf/581q1bV6PNe++9x69/\n/WsAnE4nv/nNb0J6Xy3RqIHBV6Mqc3sp97TOpWdFRERERCSwymHd6pV2BzywgZ//PRdPHQFdrw2/\nXJnHRb9ez0+X7eLDg/8Oqb/GUBE43riv5vfElirW5WDC4CTW3T2UjEE9G6eT4jxY/WN4uCf8sYfv\n71XT4It3ofyEAr0iIiISPsuC/LWh79f/ujMVdqPjISYeHM5WVGm3DtUDvHb7mmc5m3sAIiIiIiIi\nIiLtyf3338+8efMAMAyDn/3sZ+zdu5e9e/cG3G/w4MGcd955YfU5depUVq9ezRtvvMGePXtIS0tj\n6tSppKSk8M0337Bs2TJycnIA6Ny5M0899VSdx0pISOCJJ55g0qRJWJbFuHHjuOWWW7juuutwOBxs\n3bqV5557jvLycgAefPBBLrroorDG3ZLEOB3Euhz+ClqBuBwGMU5HE4xKRERERESaSn5RCYtyPmV9\nXjFlbi8u08Bj2VXqg53yBBc2OO21Wbf7EOt2H+Ly8zvzu4zUGlVkq/cX63IwOjWRKUP7hlVx1rJs\nyj1eYpwOTNPw9zFjxW68LawicCCmAX8cfzHjLk1qvE4+WAFrflK1Kp67FD74u+8PgGFC3+Ew7JfQ\n83LwlPmKxbliz2w3ZpjGsnz9OGN9jz1l4Ihu+nGIiIhIaIrz4M3f+uYWoXDGwv9b0TZ/pxvV3pPd\neuamkaAAr4iIiIiIiIhIE6oIygLYts2vfvWroPZ79tlnmTRpUlh9Op1OXn75ZW699VZeffVViouL\neeihh2q0S0pKYvny5QwcODDg8W6//XZKS0uZMWMG5eXlvPjii7z44otV2jgcDu677z5mz54d1phb\nGtM0GJ2ayKpdB+tt6/Ha7Cs+0bjLuIqIiIiISJNZm3uQmSt2V6ms645Q6HXn58f54eNb+MWoZO4a\n3q/O/srcXlbtOsi63CIevekSRg1MrBLGrUtdQeARyQn8Zt2eVhXeBbBs+MVLH5DcrWPkv3MV7YaN\nD8HHb9Tf1rbgk3/6/tTFdEC/62DE/ZFbzro4z7fkdv5aX/DHcAB24Ep1hgkXjIBrH4DuaZEZh4iI\niIQubyWsmhpehdmB49pmeBcAVeAVEREREREREZE2Lj4+nldeeYW1a9fyt7/9jR07dnD48GHi4+O5\n4IILGD9+PNOmTaNTp05BHe8nP/kJP/jBD3jyySfZsGEDhYWFWJZFjx49uPbaa7nzzju59NJLG/ld\nNa0pQ/uyetdB6ru8bQOLcwrIytSFURERERGR1i6/qKRGmDbSbOCR1/YDcE1yQsD+PJbN/yzfDeyu\ntyrvmvcPMuul2oPAwdyc2FJ5LDty37ksCw7uhNd/DYXvNvx4VY7thQMb4MBrMO5JuOiHNavjhrL9\n4Wr4x/9UrQxs179KDLYFH7/p+5P0XRj5ICQMVGVeERGRpvThKnh5cnj7mk646q7IjqclqV6Bt94z\n8G2LArwiIiIiIiIiIk1o8+bNETvWpEmTQq7Km5GRQUZGRkT679+/P1lZWWRlZUXkeC3dRYnxuBwm\np731VwDIzjvEoxMvqbcaloiIiIiItGyLcj5t1PBuZY++tp9/fX4s6P4qV+XNykwjY1BPwBc6/vPr\n+9m473BjDrdWpuGLXDT2ysdBfeeyLF/w1RlbM6haUck2byVY7sYdLDasntbIfQTpy3fhmVG+7cao\nECwiIiI15a2El6eEt6/pgHFPte3f1YYq8IqIiIiIiIiIiEg9yj3eoMK74LuQXu7xEhel028iIiIi\nIq2VZdmszytusv5sYPOBIyHv57FsZq7YTf+EeD46fKLRKwbXxWkaZGWm0T8hnqzX97Np32EaK34R\n8DtXRTg3fy24S8EVBykZcNV0X/glb6UvUFu5km17VFEh+KM3YPxfIXVic4+oWaxbt46lS5eyY8cO\niouL6dixI/369WPcuHFMmzaNjh1rVrduiM8++4zFixezadMm9u3bx7///W+io6NJSEhg0KBBjB8/\nnptvvhmXyxXRfkVEpJkU58GqOwmrqqxhwpRN0KONr/RWvQJvY98J1sLoCoKIiIiIiIiIiEgQYpwO\nYl0Oytz1L1Ea63IQ43Q0wahERERERKSxlHu8Qc3/I8kbZvDWY9n8+bX9vP3RkUYN7zpNgxnXXcgn\nR74lO+8QZW4vsS4H6andmTy0Dyk9fGHHxZOuwLJsVv6rkNmrP4z4mOr8zlVbONddCruXwe7lvmqz\nm/4AdtP+XFs02wur74SuyW27ul81J0+e5L/+679Yt25dleePHDnCkSNH2LZtG0888QQrVqzgu9/9\nbkT6nDt3LrNnz+bUqVNVnvd4PBQUFFBQUMDq1av5/e9/z8qVK7n44osj0q+IiDSjbfPDn3fYFnTp\nF9nxtEiqwCsiIiIiIiIiIiL1ME2D0amJrNp1sN626andAy/lKiIiIiIiLVp+UQlPb/mkuYcRko37\nDzfasaMcJjem9agS0n104iWUe7zEOB21fv8xTYPMK87j4p6d+dP6vbz90dF6+zGwiOE05URhY9bZ\nrtbvXMV59VTWtWDj7+odQ7tkeWHbAhi3sLlH0iS8Xi833XQTGzZsAKBbt25MnTqVlJQUvvnmG5Yt\nW8bWrVspLCwkPT2drVu3MmDAgAb1OW/ePGbOnOl/PGTIEMaMGUOvXr0oKSlhz549LFmyhJMnT7J/\n/36GDx9OXl4eiYmJDepXRESakWX5VgQIlysOnLGRG09LVb0CbzjVilsxBXhFRERERERERESCNGVo\nX9blFgWsHuU0DSYP7dOEoxIRERERkUham3uQmSt2N2ol29bGa1lVwrvgC+jGRdUfOUjp0ZE/TbiE\nIX/aWGebAcbnTHFmM9rcTpxxilI7mvXWlSzypLPXPr9K2zq/c22bHyC8K/XKXwMZ88GsOzjdVixa\ntMgf3k1JSWHjxo1069bN//r06dOZNWsWWVlZHDt2jGnTpvH222+H3V9ZWRmzZ8/2P3766aeZMmVK\njXYPPPAA1157LXl5eRw9epRHHnmEuXPnht2viIg0M0+ZbyWAcKWMbRe/lzHadwXedvATFhERERER\nERERiYyUHh3JykzDWUd1XdOArMy0Khe1RURERESk9cgvKlF4txZeGxbnFIS9//aCb+p8bYz5Duui\n7meCYwtxxikA4oxTTHBsYV3U/Ywx3/G3dZpG7d+5GlrhTnwBI09Zc4+i0Xm9Xh588EH/46VLl1YJ\n71aYM2cOgwYNAmDLli28/vrrYfe5detWTpw4AcAVV1xRa3gXoGvXrjz88MP+xw0JDYuISAvgjPVV\n0Q2H6YSr7orseFqq6hV429k0vEUHeNetW8dNN91E7969iYmJISEhgSFDhvDoo49SUlIS8f4+++wz\nfv3rXzN06FC6dOmCy+WiQ4cO9O3bl/Hjx/P888/jdrsj3q+IiIiIiIiIiLQeGYN6su7uoUwY3LPG\naw7T4K0DR8gvivy5KxERERERaXyLcj5tcHg3ylH7DX+tXXbeIawwPpv8ohJmvbS71tcGGJ+T5VqI\ny/DW+rrL8JLlWsggVyETBiex7u6hZAyq+V2swRXupN0s0/32229z6NAhAIYNG8bgwYNrbedwOPjp\nT3/qf7xs2bKw+zx8+LB/u3///gHbVn795MmTYfcpIiItgGlCSkYY+zlh3FOQmBr5MbUG7awCb/3r\nWTSDkydP8l//9V+sW7euyvNHjhzhyJEjbNu2jSeeeIIVK1bw3e9+NyJ9zp07l9mzZ3Pq1Kkqz3s8\nHgoKCigoKGD16tX8/ve/Z+XKlVx88cUR6VdERERERERERFqflB4d+f6FXXl518Eqz7u9Nqt2HWRd\nbhFZmWm1X1gWEREREZGQWZZNucdLjNOBWceKGJHoY31ecYOOYRrQOS6KwydO1d+4lSlzeyn3eImL\nCi1mECgUPcWZXWd4t4LL8LJ6cC7GuB/X3cgZC44o8J4OaWxSSTtZpnv9+vX+7fT09IBtR48eXet+\noUpISPBvHzhwIGDbyq8PHDgw7D5FRKQFKM6DsmPBt3fGwMDxvsq77Sm8W6MCrwK8zcrr9XLTTTex\nYcMGALp168bUqVNJSUnhm2++YdmyZWzdupXCwkLS09PZunUrAwYMaFCf8+bNY+bMmf7HQ4YMYcyY\nMfTq1YuSkhL27NnDkiVLOHnyJPv372f48OHk5eWRmJjYoH5FRERERERERKR1qlhWty4ey2bmit30\nT4ivubSriIiIiIgELb+ohEU5n7I+r5gyt5cYp8no1ESmfu+CiM+1yz1eytyBw6T1GX9pEhv3Hw7Y\nxmUauCsFWg1ax0rBsS4HMU5HSPsECkUbWIw2twd1HCN/LWQsqDtgengPeBt5NV3TBX2ugdMn4Msd\nYDfsv5UWxXS0m2W68/Ly/NtXXHFFwLaJiYn06tWLwsJCvvrqK44cOULXrl1D7rNiFeijR4+yc+dO\nFi1axJQpU2q0O3LkCLNnzwbANE1mzJgRcl8iItJC5K2E1dPA8tTT0IRxC2HAjb4bktrBzTQ1GNVv\nzmsNM+PIaXEB3kWLFvnDuykpKWzcuJFu3br5X58+fTqzZs0iKyuLY8eOMW3aNN5+++2w+ysrK/NP\ngACefvrpWidKDzzwANdeey15eXkcPXqURx55VsMN0QAAIABJREFUhLlz54bdr4iIiIiIiIiItF7B\nLKvrsWwW5xSQlZnWRKMSEREREWlb1uYeZOaK3VXm3uUei9XvF7Hm/SJ+MSqZu4b3i1h/MU4HsS5H\ng0K8PTrHUHo6cFCjU5yLoyfPVIptLRGF9NTuIVc/DhSKjuE0cUaQlYrdpeApg6izar5WnAcvZtIo\nn6QrDgZkwBV3QM/Lz4RqLAvc3/q6dMX6xmYD+7NhzY+bsXKcCWMeh7T/B2//Gd76E/V+LoYDxv21\n3VT6279/v3+7T58+9bbv06cPhYWF/n3DCfDGxMTw5JNPcsstt+DxeJg6dSpLliypUljuww8/5Lnn\nnuPEiRN06NCBRYsWcfXVV4fcl4iItADFecGFdy8cDSPuaze/g+ukCrwth9fr5cEHH/Q/Xrp0aZXw\nboU5c+bwz3/+k9zcXLZs2cLrr7/OyJEjw+pz69atnDhxAvDdXVVbeBega9euPPzww9xwww0ADQoN\ni4iIiIiIiIhI6xXKsrrZeYd4dOIljbbEr4iIiIhIW1Wx6kVdN87ZwCOv+YJ4kQrxmqbB9Rd3Y/X7\nRWEf4/CJU5S7A4cOKod3W4r6qgA7TYPJQ+sPO1YXKBRdThSldnRwIV5XnK8qXXV5K+HlKUQ0vNv/\nehgxG87tV3clPNOE6Pgzjx3/2U67GbqlwMY/wEevN26VXsP0VayzvL7PJ2Vs1SW3h98LA34I2+bD\nnlXgqfY5mw7oN7LdBYeOHz/u3+7SpUu97c8999xa9w3VhAkTePPNN5k+fTp79uxh69atbN26tUob\nl8vFfffdx7Rp0+jVq1dY/Xz55ZcBXz906FBYxxURkRBsmx9E5V0g9ux29Tu4btXOndut5fa2yGhR\nAd63337bP1kYNmwYgwcPrrWdw+Hgpz/9KXfccQcAy5YtCzvAe/jwmeVL+vfvH7Bt5ddPnjwZVn8i\nIiIiIiIiItK6hbKsbpnbS7nHS1xUizoNJyIiIiISEZZlU+7xEuN0RPymtWBWvQBfiLdbx2jGXZrU\n4DHkF5XwzbfuBh2j8Fhpg/ZvLiMuSuCtA0dq/cydpkFWZhopPTqGfFwTm4yBnVieexTwVd0tJwob\nExuT9daVTHBsqf9AAzJqBmmL82DVnUQuvGvC+KfgksyGHSYxFW79e91VesPdtixfaNcVC95TZwLN\nnrK6g8aJqTDuSchY4GvniD5z3Kiz2uUy3ZWzHjExMfW2j409ExyvKA4Xru9///vMmzePGTNm8P77\n79d43e12M3/+fL799lv++Mc/Vuk7WOEGf0VEJEIsC/LXBtc2fw1kzG+Xv4+rUAXelmP9+vX+7fT0\n9IBtR48eXet+oUpISPBvHzhwIGDbyq8PHDgw7D5FRERERERERKT1CmVZ3ViXgxinowlGJSIiIiLS\ndPKLSliU8ynr84opc3uJdTkYnZrIlKF9wwp5VhfKqhcAM1/6gF+t+pAb0rqHPYa1uQcDVvwN1hdf\nt9wAr9METx15iCH9ujBzZDKLcwrIzjvk/7mmp3Zn8tA+oX+mxXm+6nP5a/mTu5TfR/uCGU7DotSO\nZr11BUs917HYcz1jzHdwGfV8v8pf7SvOdtX0M5Xqts2PXIXbs7rC/7c6slXw6qrS29BtAEelqEfU\nWcGNpaJd9WNJkzh69CiZmZls2rSJs88+m7/85S+MGTOGXr16UVpayr/+9S+ysrLIzs7mscce4513\n3iE7O7tKBWAREQmBZQW+yaWxeMrAHeR80F3qax/M7/K2zKh+E54q8DabvLw8//YVV1wRsG1iYiK9\nevWisLCQr776iiNHjtC1a9eQ+xw6dChdunTh6NGj7Ny5k0WLFjFlypQa7Y4cOcLs2bMBME2TGTNm\nhNyXiIiIiIiIiIi0fqZpMDo1kVW7DtbbNj21e8QrkYmIiIiINKfagq5lbi+rdh1kXW4RWZlpZAzq\n2aA+Qln1osJprxX0GKpXDs4vKolIeBeg8FhZg4/RWAK9vRff+5yr+p5LVmYaj068JLjKynUFY/JW\nwuppVZaOdhpnksNxxikmOHKY4MjhlO3kfbsfVxgHMAKFNTzlsHsZ5L0E456CgeNhz5pg3nYQzMiH\nd6XF6tChA8eOHQOgvLycDh06BGxfVnbm/+n4+PDCz6WlpXzve99j3759nH322bz33ntVVoDu1KkT\nI0aMYMSIEdx9993Mnz+f7du3c8899/Diiy+G1FdhYWHA1w8dOsSVV14Z1vsQEWkVKt1EhLsUXHGQ\nklH1JqDG5Iz19RlsiHffPxpe/b+1UwXelmP//v3+7T59+tTbvk+fPv7Jx/79+8MK8MbExPDkk09y\nyy234PF4mDp1KkuWLPHf6VRSUsKHH37Ic889x4kTJ+jQoQOLFi3i6quvDrmvL7/8MuDrhw4dCvmY\nIiIiIiIiIiLS9KYM7cu63KKAF/idpsHkofWf4xIRERERaS3qC7p6LJuZK3bTPyG+QZV4Y5wOYpwm\n5XWViw2grjFYlk3ul8d4ftsXrP+wauXgf5e6IxLebUzJ3Tow5Xt9+dWqvLDHGmi3T458y5h5b/PY\n+GRuGHwBcVEBogSBgjFQI7wbSLTh4Upjf/0N/W/C4zt+5/N84eGGMp2+QLDCu+1G586d/QHeo0eP\n1hvg/frrr6vsG44FCxawb98+AGbNmlUlvFvdnDlzeOGFFzh+/DjLly9n7ty5JCYmBt1XUlJSWGMU\nEWkTarmJCHdp1ZuAUic27hhM0zcv2r0suPZrfgIJA9r3XKRGgLdlz8sjrUUFeI8fP+7f7tKlS73t\nKy8VUHnfUE2YMIE333yT6dOns2fPHrZu3crWrVurtHG5XNx3331MmzaNXr16hdVPuPuJiIiIiIiI\niEjLktKjI1mZaXWGF5ymQVZmWkSWDxYRERERaSkW5Xxab3jUY9kszikgKzMt7H5M02DIBeeycf+R\nsPavPIb8ohIW5XzKK7uLcHurjr2icnBrYNswsEcn1t09lMU5BWTnHaLM7cXlMGq8r1ANMD5nijOb\n0eZ24l49hbUhFnPg2Nor1dUXjEm6IujwbtgsD+x4xlfhLpQQ73lXwaHdlULHY+Gqu9p3YKYdSk5O\npqCgAICCggJ69+4dsH1F24p9w/Hqq6/6t0eOHBmw7VlnncWQIUPIzs7Gsix27NjBjTfeGFa/IiLt\nSnFe4JuIKm4C6prc+L/7r5rumxcFMyeyPLBtAYxb2LhjatGqrfjQzirwmvU3aTonT570b8fExNTb\nPjY21r994sSJBvX9/e9/n3nz5nHppZfW+rrb7Wb+/PnMnTu3yhIJIiIiIiIiIiLSPmUM6sm6u4fS\nt8tZVZ4//9w41t09tMHLBouIiIiItCSWZbM+rziottl5h7DCrRJr2by0s5C3DoQX3q08hjXvH2TM\nvBxW7TrY4JBrcztw+CRj5uXw0eETZGWmsefBUeT/bhT7HxrNq/cMxTTqP0YFA4tYyjGwGGO+w7qo\n+5ng2EKccQoA01PmC+T+9Rr4YAWc/hYsK7hgzBfbGv5mg7F3ra+6XbAuHA13bIBfHYTZRb6/xy1U\neLcdSk098zPfsWNHwLZfffWVf1XohISEsFaFBigqKvJvd+rUqd72lSv9Vs7RiIhIANvm1x+YrQjL\nNrbEVBgbQiA3f41vrtVeVa/A286073f/H0ePHuXaa69l+PDhfPbZZ/zlL3/hk08+4fTp0xw/fpx/\n/vOfpKenc/z4cR577DGuueaaKsskBKuwsDDgn+3btzfCuxMRERERERERkcaS0qMjmVdUXXWpZ+dY\nVd4VERERkTan3OOlzO0Nqm2Z20u5J7i2FfKLSpixIpcBD2zgFys/oKF52zK3l1kv1b5iRmvlsWxm\nrthNflEJpmkQF+XENA36dj2LYN7mAONzslwL2RM9mb0xd5Af/SMec83HZdTxs7I8sGoq/LEHPNwT\nlv9341fXDZa7FK6YDIaj/ramA0bc959tE6LO8v0t7dL111/v316/fn3AttnZ2f7t9PT0sPuMj4/3\nb1cEggP5/PPP/duVV6YWEZE6WBbkrw2ubVOFZS/6YfBt3aWhrSrQ1lS/EU0VeJtPhw4d/Nvl5eX1\ntq9cCbfyhCcUpaWlfO9732PTpk2cffbZvPfee/z85z+nb9++uFwuOnXqxIgRI/jHP/7B9OnTAdi+\nfTv33HNPyH0lJSUF/NO9e/ew3oOIiIg0jRMnTvDyyy9z9913M2TIELp27YrL5aJjx45cdNFF3Hbb\nbWzYsAHbjvwJ4XXr1nHTTTfRu3dvYmJiSEhIYMiQITz66KOUlJREvD8RERERCV7PzrFVHhd+U9pM\nIxERERERaTwxTgexriDCkkCsy0GMM7i2AGtzz1TKPeWJzAV7h2FEPLzr+E+Z2xhn811m91g2i3MK\nqjwXzM+mtkq7sYYb0wjyM3KXwrHPwhly43DFgSMael0ZuJ3hgHF/VaVd8Rs2bBiJiYkAbN68mV27\ndtXazuv18vjjj/sf33LLLWH3Wbnq7wsvvBCw7ccff8x7770HgGmaXH755WH3KyLSbnjKfHOVYDRV\nWNYZC6YzuLauOF/79qp6Bd5GyFu0ZC0qwFt5GYCjR4/W275yFdzK+4ZiwYIF7Nu3D4BZs2bRv3//\nOtvOmTPH38/y5cspLg5uiRgRERFp/ebOnUtCQgITJ05k/vz5bNu2jaNHj+LxeDhx4gT79+9n6dKl\njB49mmHDhvHFF19EpN+TJ0+SkZFBRkYGK1eu5PPPP+fUqVMcOXKEbdu28ctf/pKLL76Yd999NyL9\niYiIiEjo3N6qAYPCY2XMWJ5LfpFutBIRERGRtsM0DUanJgbVNj21O6ZZvZRW7fKLSpi5ohEq5QbX\nfdCcpsHa6VeT/7tRfPjbUUGHmStUhH9jXQ4mDE4iPtr8zzAtYinHIPjgcnbeIaxKn1d9P5uKyrt1\nVtptjboPgkUj4Itttb9umHDhaJj2FqRObNqxSYvmcDh44IEH/I9vu+02Dh8+XKPdvffeS25uLgBX\nX301o0aNqvV4S5YswTAMDMPgmmuuqbXNrbfe6t9+9tlnWbx4ca3tiouLyczMxOPxVbq+4YYbOOec\nc4J6XyIi7Zoz1heCDUZThWVNEzr1qr8dQMrYdr46QLWJezurwBtkzLtpJCcnU1Dgu1uwoKCA3r17\nB2xf0bZi33C8+uqr/u2RI0cGbHvWWWcxZMgQsrOzsSyLHTt2cOONN4bVr4iIiLQuBw4c8K8Q0LNn\nT37wgx9w2WWXkZCQQHl5Oe+++y7PP/88J0+eZMuWLVxzzTW8++67JCQkhN2n1+vlpptuYsOGDQB0\n69aNqVOnkpKSwjfffMOyZcvYunUrhYWFpKens3XrVgYMGBCR9ysiIiIiwVmbe5BfrPygxvOr3j/I\nut1FZGWmkTGoZzOMTEREREQk8qYM7cu63KKAYVunaTB5aJ+gj7ko59PIh3cBb4SPmXVTGhf37OR/\nPDo1kVW7Dga9v8s02P3AdcRFOXnlgyLy39/KFFc2o83txBmnKLWjWW9dySJPOnvt8wFfuDeG05QT\nhV2pNleZ20u5x0tc1JnL/dV/NhX79jEOsdD1f20rvGs44Mv3wAr0ngwYcZ8q70qtpk6dyurVq3nj\njTfYs2cPaWlpNa6/5OTkAL5ick899VSD+hs5ciQTJ05k5cqV2LbNlClTWLp0KRkZGSQlJVFWVsbO\nnTtZunQpx48fB+Dcc88lKyurwe9VRKRdME1IyYDdy+pv25Rh2bgucKwgcBvTCVfd1TTjaamqV+Cl\nfVXgbVEB3tTUVH9AZceOHQwfPrzOtl999RWFhYUAJCQk0LVr17D6LCoq8m936tQpQEufypV+T548\nGVafIiIi0voYhsHIkSOZNWsW1157LWa1Sf3tt9/Ovffey6hRo9i/fz8FBQXce++9PPPMM2H3uWjR\nIv/cKCUlhY0bN9KtWzf/69OnT2fWrFlkZWVx7Ngxpk2bxttvvx12fyIiIiISmopKYXUFAzyWzcwV\nu+mfEE9Kj45NPDoRERERkchL6dGRrMw0ZgSYB196XvArp1qWzfq8lr/qaedYJxmXVr0xb8rQvqx9\n/yDeAPmCygHcco+vUu6+4hNsWrmAdVFVK+LGGaeY4NjCGHMrcz030c8sqjPcG+tyEOOsWgG44mfz\n9Evr+JH5D/++tg1GhKsRNy8Den0HvngncDPbC9sWwLiFTTMsaVWcTicvv/wyt956K6+++irFxcU8\n9NBDNdolJSWxfPlyBg4c2OA+n3/+eTp27Oi/bvTWW2/x1ltv1do2OTmZv//97/Tr16/B/YqItBtX\nTYe8l8Dy1N2mMcOylgWeMl91X9OE4jw4uj/wPqYTxj2lG46qT1bbWQXeFlV7+frrr/dvr1+/PmDb\n7Oxs/3Z6enrYfcbHx/u3KwLBgXz++ef+7XPPPTfsfkVERKR1+cMf/sBrr73GddddVyO8W+H8889n\n+fLl/sfLly+ntLQ0rP68Xi8PPvig//HSpUurhHcrzJkzh0GDBgGwZcsWXn/99bD6ExEREZHQBVMp\nzGPZLM6pp8qCiIiIiEgrkjGoJ78fW3eYbcdnxxgzL4e1ufVXpy33eClzt/zKsOd0iK7xXEqPjvw5\nM63G8wYWlxr7ecz1BHuiJ7M35g72RE/msagniTmaT/abr/OoY2GdFXFdhsUvncuZ4NhCnHEKOBPu\nXRd1P2PMd0hP7Y5p1kzlZji28UrU/VX2bVvh3f8o2hVcu/w1vjCNSC3i4+N55ZVXWLNmDePHj6dX\nr15ER0fTpUsXvvOd7zBnzhw+/PBDhgwZEpH+oqOjWbx4Me+//z4/+9nPuPzyyznnnHNwOp3ExcXR\nu3dvJkyYwNKlS/nggw/8135ERCRIiam+MGxdagvLWhac/rZh84XiPFj9Y3i4J/yxh+/vZ66Hvw6D\nUyW17+OIgrRb4c7NkDox/L7biuoVeG1V4G02w4YNIzExkeLiYjZv3syuXbsYPHhwjXZer5fHH3/c\n//iWW24Ju8/U1FR27fJN8F944QVGjBhRZ9uPP/6Y9957DwDTNLn88svD7ldERERal3POOSeodmlp\naSQnJ7N//35KS0v5+OOPueSSS0Lu7+233+bQoUOAb45U25wIwOFw8NOf/pQ77rgDgGXLljFy5MiQ\n+xMRERGR0IRSKSw77xCPTryk1gvsIiIiIiKt0benAodug12NIsbpINblaPEh3k6xrlqfH3dpEq/u\nPsQ/9x1mgPE5M50rGG7m4jCqhg7ijFOMNd7GXjScYd5+dYZ3K9QVunUZXrJcC/liwI01XyzOg9XT\nMOwAVefaBBs85cE1dZf6KuFFndW4Q5JWLSMjg4yMjLD3nzRpEpMmTQq6/aBBg3jsscfC7k9ERAJI\nnQgvT675fNqtvsq7FeHd4jzYNh/y1/rmC644SMnwVfGtqxpuRYVdRzR4T/kq7e5ZBaunVa366y6F\nL7YFHqflrTqeBrIsm3KP179CQ7nHS5Rpctqy/M+VnvaNMS7K2QLPU7fvCrwtKsDrcDh44IEHuOsu\nX6nq2267jY0bN5KQkFCl3b333ktubi4AV199NaNGjar1eEuWLOFHP/oR4Au+bN68uUabW2+9leee\new6AZ599liFDhjB5cs3/kYuLi8nMzMTj8f3HfMMNNwQd5BEREZH2pWPHMyeky8rKwjpG5dUI6ltt\nYPTo0bXuJyIiIiKNJ5RKYWVuL+UeL3FRLepUnIiIiIhIWCzL5h8fHKq3XcVqFFm1VKmtsK/4BF3j\no/jim+DPozoM8DZxUa6OMXXP5WeOTCb+4zX82TEfpxF4YIbl4XL2NWgsLsPLBR8/B6nfrfrCtvmB\nl4xuj1xxvnCNiIiItG/jFp7ZzltZe+h29zLIe8lXpbeiKq5lwcGdsGOxr7J/5ZuIHFHgdQNhTExt\nL2xbUHVcYcgvKmFRzqeszyumzO3FYRjY2FReNK4iGlvxlMM0uObCrswcmRzwRru6WJYd+TBw9Qq8\n4XymrViLu2owdepUVq9ezRtvvMGePXtIS0tj6tSppKSk8M0337Bs2TJycnIA6Ny5M089FaD0dRBG\njhzJxIkTWblyJbZtM2XKFJYuXUpGRgZJSUmUlZWxc+dOli5dyvHjxwE499xzycrKavB7FRERkbbn\n9OnTHDhwwP/4/PPPD+s4eXl5/u0rrrgiYNvExER69epFYWEhX331FUeOHKFr165h9SsiIiIiwQml\nUlisy+GvdCAiIiIi0lpVBASyPzhEuSe4qliBVqNYm3uQmSt247GCv0A/7tKeTB7ah5ue3NakVXs/\nOXyS/KKSWkMOKebnzHUuxAwyaFBXdd2Q7FkNox/xVZY1TV+4JH9tBA7cxqSM9X0+IiIi0r5ZXl/4\n9ujHNcO7Vdp5fK8bJnz0Onz4MnhP1962rueDlb8GMuaHPVepbS7ttWvOR6s/47Vs/rnvMJv2H+Yv\nNw8iY1DP4IZbVMKfX9/PW/uP+PsxDfh+/67MGpVMSveO/irAIYd6q0+QVYG3eTmdTl5++WVuvfVW\nXn31VYqLi3nooYdqtEtKSmL58uUMHDiwwX0+//zzdOzYkWeeeQaAt956i7feeqvWtsnJyfz973+n\nX79+De5XRERE2p4XX3yRf//73wAMHjyYxMTEsI6zf/9+/3afPn3qbd+nTx8KCwv9+yrAKyIiItK4\nTNNgdGoiq3YdrLdtemr3FrgsmYiIiIhI8MIJ20Ldq1HkF5WEfLxz4lz85eZBAEHPxSPly+PljJmX\nQ1ZmWs2Qw7b5mDRdmBjwLd/8p6Qzyz33GearHCdVfefHzT0CERERaQke7gnuMjAcvuq3gVgeWHkH\njV4F1l3qm9NFnRXyruHMpauzbPj533PpdXYcg3p1xjQNLMuuNYS7Nvcg/7M8l+rdWTZsPnCEzQeO\nYBq+xzFOk+sv7sZ/f7c3FyXGE+N0UO7xfebVt09bFjFOBwYGVc6e1xJEbstaXIAXID4+nldeeYW1\na9fyt7/9jR07dnD48GHi4+O54IILGD9+PNOmTaNTp04R6S86OprFixdzzz33sGTJErZu3cqnn35K\nSUkJUVFRJCQkcNlllzF27FgyMzOJioqKSL8iIiLSthw5coT//d//9T++//77wz5WReV/gC5dutTb\n/txzz61132B8+eWXAV8/dKj+5fBERERE2qMpQ/uyLrco4IlSp2kweWj9N2SJiIiIiLQklS/e7ys+\nEXZAoK7VKBblfBry8RI6xvi3g5mLB8vAIobTlBOFTd0V0DyWzcwVu+mfEH+mEq9lwZ41DR5D2CqW\ne969rPnG0JJ1UVEuERERwRfehfrDu35NECB1xYEzNqxdw5lL18YGxi98B6cJ3TvHcrjkFKc8FrEu\nB6NTE5kytC8AM2oJ71ZX8Xq5x2JN7iHW5AaXMTCA+5yfMaVSijXno8OcU8fqF21RiwzwVsjIyCAj\nIyPs/SdNmsSkSZOCbj9o0CAee+yxsPsTERGR9uv06dNMmDCBw4cPAzB27FjGjRsX9vFOnjzp346J\niQnQ0ic29szk/sSJEyH11atXr5Dai4iIiIhPSo+OZGWm1RlmcJoGWZlp7eZEo4iIiIg0n7qqZYUq\nv6iERTmfsj6vmDK3l2inidM0wg4I1LYahWXZvLo79KIBXeOj/dv1zcWDMcD4nCnObEab24kzTlFq\nR7PeupJFnnT22ufXuo/Hsnlmyyf8edyFvsCFp8z3J0Q2oDU6GlkDQjEiIiLSQlmWb+7ljAWz7huv\nWoWUsWG9B8uyWZ9XHNGheCwo/ObMnLbM7WXVroOsyy3i0vM6423EPLMNWNVuojt0vIzbntjCX24e\nVHP1izaoRQd4RURERFoDy7K444472LJlCwAXXHABzzzzTDOPSkRERESaQsagnvRPiGfRlk9Z9X7V\nJXznZqYxph2cYBQRERGR5lM9cFu5WlZdN5IFWhq3eiD2lMfiVJhjq2s1itzC45z2WiEfr2uH6CqP\nK+biT2/5hNXvF4V0rDHmO2S5FuIyzlRhizNOMcGxhTHmO8x0/4R11pAq+/gDv/nbYe8pX0B0wBhw\nRIM3tE9J4V2DRq9sF2YoRkRERFqg4jzYNh/y1/pWIHDFQUoGXDUdElPPtLOCrbDbzEwnXHVXWLuW\ne7yUuZvmfXosmx2fHWv0fqrPCk3DxrJhRvXVL9ooBXhFREREGsC2bX784x/zwgsvAHDeeefx5ptv\ncvbZZzfouB06dODYMd9kuLy8nA4dOgRsX1Z25o64+Pj4kPoqLCwM+PqhQ4e48sorQzqmiIiISHuS\n0qMjc28exLuffk3Rv8v9z7sculgsIiIiIo2ntsBt5WpZWZlpVSpWBQr7Ag2qZludAcy47sIaF9vz\ni0r42d93hXXMyhV4K6T06Mhfbr6UnI+OcuTk6aCOM8D4vEZ4tzKX4SXLtZCPTvf0V+KtLfCLuxQ+\n+DuK44bIdMLw+2DTH8Dy1PH6/XBkP3ywLPw+wgzFiIiISAuTtxJWT6s6b3CXwu5lkPcSjHsKUiee\neb6lM52+MVcOHocgxukg1uVoshBvU7Cpfh7d953Ea9kszikgKzOt6QfVhBTgFREREQmTbdvcdddd\nPP300wAkJSWxceNGevfu3eBjd+7c2R/gPXr0aL0B3q+//rrKvqFISkoKfYAiIiIiUkPSOXFVArxf\nHmsFJ4xFREREpFXKLyoJGLj1WDYzK1Wsqi/se+l5nSMW3gXfJfe5bxyg59mx/hDx2tyDzFieG/YS\nvNl5h8gY1LPWClznnBUddIB3ijO7zvBuBZfhZbJzPbPcP6438As2NorxBqUisJI6EfpfB9sWQP6a\nSpX0xvqCt/5Ai/2fkHSIxi4MOxQjIiIiLUhxXs3wbmWWx/d612Tf7/7TLfx87PlDYPQjYc1TKq+i\nMTo1kVW7Dta/UytRowJvpWey8w7x6MRLqqwc0tYowCsiIiISBtu2mT59Ok8++SQAPXv2ZNOmTVxw\nwQUROX5ycjIFBQUAFBQU1BsKrmhbsa+D89DrAAAgAElEQVSIiIiINL0OUVVPtc3ZsJ+9xScCLl8s\nIiIiIhKORTmf1hu49fynYtXkoX3qDfs2xtK4lUPE4KvwG254F6DwWBk3zsthbrXKwmtzD3LgqxMA\nGFjEcJpyomqp5AUOw2K0uT2o/tLN9/gFdwYV+DUA2wajTeQKDHC4wBtcIDoozhgYOL5qODcxFcYt\nhIz54CkDZyyY1X5mQ+4OPcB74fVwSWZkxi0iIiLNa9v8usO7FSyP76agcQvh9MmmGVe4Ct8LeZfa\nVtHo2zWuEQbXfKxqt8JVDvCWub2Ue7zERbXdmGvbfWciIiIijaQivLtw4UIAevTowaZNm+jXr1/E\n+khNTWXDhg0A7Nixg+HDh9fZ9quvvqKwsBCAhIQEunbtGrFxiIiIiEhw1uYeZPOBw1We81h2ncsX\ni4iIiIiEy7Js1ucVB9U2O+8Qtm1HtLpuKCpCxDaRGYNlebl/xXv07zqClJ6d/ZWILzI+Z4ozm9Hm\nduKMU5Ta0ay3rmSRJ5299vkAvDd7BF2jvJh/OhVUX3HGKWIpDzrw2yqr8HY+H749UrMCrmXBohH1\nB2bqYjhgzBNwyc3gPVV7OLeCaULUWbW/dmQ//4lHB9sxjLg/jAGLiIhIi2NZkL82uLb5a3w3BbX0\nAK/lPRM2DtTsP9V2X9/zFbNeqrmKxp6iE4090iZlV5tFG5XmfrEuBzFOR1MPqUkpwCsiIiISgurh\n3e7du7Np0yb69+8f0X6uv/56Hn30UQDWr1/PL3/5yzrbZmdn+7fT09MjOg4RERERqV9FaKCuPEL1\n5YtFRERERBqi3OOlzB24ImyFMreX7A8PNfKIAvvHB0UYDSxNO6BaQPfUohi4ZBzZJ35AOu+TFbWw\nSpXcOOMUExxbGGO+w0z3T1hnDeHoidN8jU1vO5o4o/4Qb6kd7T9WMFrlqr4XjoLr59SsgLv6xw0L\n707dBD3SfI8dYUYSKpbMDjq8C1z7QFhLUouIiEgL5Cnz3WQUDHcprL4T9q5r3DFFQkXYuJabm/KL\nSli05VPWf1gc9Hy/LQhUgTc9tTtmq5xoB08BXhEREZEQ3H333f7wbmJiIps2beLCCy+MeD/Dhg0j\nMTGR4uJiNm/ezK5duxg8eHCNdl6vl8cff9z/+JZbbon4WEREREQksFCWL87KTGuiUYmIiIhIWxXj\ndBDrcgR9Ub/cbTXyiOrp39Ow/seY75DlqhrQjbbLYfcyfmYvx3SBw6i9D5fhJcu1kI9O9+SZrT3p\nXv4xN9mdON84XGv7yrZaA3nItQTbhgbmj1uumM41K+CGUu2uNpfcfCa82xDBLJntZ8C1v4Hv/U/D\n+xUREZHmZ1lgW74VAoIN8ea91LhjihR3qS+cXG0FggWbPubR1/aHcutSm1G9Am/FDVwO02Dy0D5N\nP6AmVsc6FdJmWBac/tb3t4iIiDTIPffcw4IFCwBfeHfz5s0kJyeHfJwlS5ZgGAaGYXDNNdfU2sbh\ncPDAAw/4H992220cPlzzpPK9995Lbm4uAFdffTWjRo0KeTwiIiIiEr5Qly+2mmnpYhERERFpO0zT\nYHRqYnMPI2gxTpNYV3jL3g4wPq8R3q3MZVh1hnfPtPEy2bke8lbys0/u5Hyz/vCuxzYY4chlgiOn\n7YZ3AWLPrvlcKNXuqjOdcNVdDRsThBgiNuHOtxTeFRERibTmyJwV5/lWAni4JzycBJ7gVkJoVVxx\nvpUPKlmw6WMeaafhXagZ4DWxMQ2Ym5nWLla0UwXetqo4z3dXYv5a3xcsVxykZMBV07VsiIiISBju\nv/9+5s2bB4BhGPzsZz9j79697N27N+B+gwcP5rzzzgurz6lTp7J69WreeOMN9uzZQ1paGlOnTiUl\nJYVvvvmGZcuWkZOTA0Dnzp156qmnwupHRERERMIX6vLF5R4vcVE6JSciIiIiDTNlaF/W5RbVuxJE\nKK7sfTbbPzsWseNV+OElPbBsi9XvF4W87xRndp3h3ZDGYG4jg61BHcttg4mBg1DCKiZUat9qqvbG\ndq75nDM2tGp3FUwnjHsqMteiQwoRW9ClX8P7FBEREZ9IZc4sy/c73Rnrq/hfn7yVsHpa1Qr8dsPn\ngS1Oytgqn0d+UQmPvra/GQcUGeZ/5r7hfD2x7aoT504xDl790ffaRXgXFOBtm2r7B81dCruX+cqF\nj3sKUic23/hERERaoYqgLIBt2/zqV78Kar9nn32WSZMmhdWn0+nk5Zdf5tZbb+XVV1+luLiYhx56\nqEa7pKQkli9fzsCBA8PqR0RERETCF8ryxbEuBzHO8CqPiYiIiIhUltKjIzOuu5BHInSx32HAz39w\nIbcuei8ix6tgAMOTu9Kjc2zIAV4Di9Hm9oiMI9ZwB93WAZj1VPWtqWpSoYQ4OtqlLSfE64qDmE5w\n4lDV52urwGuavpDO7mXBHztlrK/ybqQKSYUSIq6lip2IiIiEKRKZs3ACwMV5Nfttg2zDgVFptYL8\nohKmLd3Rqivvjr+0J78fd7H/vHe5x0uUaVLu8Z0vj3E6amzvKz7Bi+99wfoPiylze2tU4D3/nFiS\n2kl4F3y3AkpbUt8/aJbH93pxXtOOS0RERMISHx/PK6+8wpo1axg/fjy9evUiOjqaLl268J3vfIc5\nc+bw4YcfMmTIkOYeqoiIiEi7FMryxemp3THNlnIFX0RERERas7W5B5n7xoGIHc9rw23PRCYsW5kN\n/Hx5Lp9/8y1RjtAuTcdwmjgjMssm2yGkIsKbslftoGNiH7z9R4VzoMDOGwJGCDcFxnWF2UXwq4O1\nB2a2L6r9uvFV030VdetjmHDj/8G4hZFdBbYiRByMalXsREREJEyRyJzlrYS/XuML/FbciFMRAP7r\nNb7X/cez4PS3vr+3zW8V4d1Q5pTVeW2TWd7pzHjbS35RCWtzD3LjE1soPFYeuQHW4cre5+BshPPS\nDtNgyvf6EhflxDQNTNMgLsqJ02nSIcZFhxhXrduX9z6HuTcPYs+Do8j/3Si6dqp+M1ZrjjSHThV4\n25pg/kGzPLBtge+LlIiIiARl8+bNETvWpEmTQq7Km5GRQUZGkCcsRURERKRJBbN8sdM0mDy0TxOO\nSkRERETaqvyiEmau2B1w/hmOSB+v8nF/8dIHDLuwK//cd7jOdgYWMZymnChsTMqJotSOjkiIt6kr\n4RqOaJw/+DV8+s/IhVFMJ6Q/4tvO/iV88U79+3hPwTefwpH98PEbNV//5E0o2Fyzml5iqu+5VXcG\nXrratmDNTyBhQGQDvOALEee9FPjzM52+yr8iIiLScA3NnAUbADZM+Oj1MxV6nbHgPd3w8TeBcOaU\ntg3vWgP4nec29trnw66DrH3/IDbQSNPvKpymwW/H+FbyXZxTQHbeIcrcXmJdDlJ7duJfXxzDG8ZA\nTAPmZqaR0oBKuRWBX8OodjNWQ5LSrZACvG2JZfn+cQtG/hrImK+7EUVEREREREREGiilR0eyMtPq\nDFE4TYOsBp7MFBERERGpsCjn00YL2zaWQOMdYHzOFGc2o83txBmnKLWjeb/D93mt4wReP/gdxhpv\nN6hvt21gGgYOrAYdJySlR8+EYINdDtowfakQq5bArOn0HasiJHvHeijaDdvmwb5Xz1S4q+5UCTw1\nzLddVxCiIkzTNblqCDd1oi9Ae2BD4HE3VvGo+j6/6p+JiIiIhC8SmbNgA8Ar76BKhVVPWUhDbW0M\nAw7S1Rfe/Q9vE03lq5+XzspM49GJl1Du8RLjdGCaBvlFJVWCvVEOg7Pjojhy8lStAWOHaTA8uSsz\nrkuO2Plum6rJaEMBXmm1PGV1fzmrzl3qax91VuOOSURERERERERq8Hq97N27l507d/Kvf/2LnTt3\nsnv3bsrKfCcrb7/9dpYsWRKRvn7729/y4IMPhrzfsGHDal2FYMmSJfzoRz8K+ji/+c1v+O1vfxty\n/61NxqCe9E+I586/7eTL42dOOl+UGM/czEEK74qIiIhIRFiWzfq84uYeRli2fnyUjjEOSsrPBFTH\nmO+Q5VqIyzjzXJxxiqu/fYOrSzdi9xiIXQzhFtD12gYmTRzeBThe6AvYpk70BWO3LYAPV9ZdXa4i\njFrRNn+N73quKw5SxvqqzFYPqvZIgwlP+/pZNKLuwEygCroVagvhWhYUBBmebqziUZU/v2A+ExER\nEQlPQzNnoQSAaV/hTIB08z1+wZ3YNE2hzViXg/TU7kwe2qfGeemKqrcVKopTVA/2WpZN6Wnf/DLG\n6aDc45tTxkU5Mc3ILm9h1Cht3MRz92amAG9b4oz1fWEJ5h9UV5yvvYiIiIiIiIg0uczMTFatWtXc\nwwiob9++zT2EVielR0euuagrz7/7hf+5y84/W+FdEREREYmYco+XMncQgcwWqNxj4bHOXJxPN9/l\nMdc86rz+b3sxij9oUJ8GNqbRHCER2xeqHfeUL4Q6bqEv4HpwJ+x85syS0bWFUSvaesp813PrC8W+\ntzC4Cr/1qR7CbSnFoxJTQ/9MREREJDRffwymo/aVAKpzRFXNnBXnQc7/BT9vaOVs21dVNxRxxili\nOE0ZMY0zqEpinCZ5vxmJ0xnafKl6sNc0DTrEuPyPO4R4vFDYRrVjqwKvtFqmCSkZsHtZ/W1TxuqL\njYiIiIiIiEgz8Xqrngg955xzOPfcc/noo48i3tctt9zCoEGD6m3ndrv57//+b06f9lWEuuOOO+rd\n55577mHEiBEB21x00UXBDbSNODsuqsrjY6V1VNgSEREREQlDjNNBrMvRqkK8BhYxnKacKLwWxHKa\n68ydPOZaUHd4N0Ia+/gBWR5YPc1XQTYx1XdttteVvj8ZCwKHUU0zuDBsSNXu6lE9hNvSikcF+5mI\niIhIaPJW+uYswYR3AbxuOLzHN7/x7xuBm4laie32RQzmoyorSNSn1I6mnKj6G0bADy/pEXJ4t/lV\nm7TbqsArrdlV0yHvpcD/MJpO312cIiIiIiIiItIsrrzySgYMGMBll13GZZddRp8+fViyZAk/+tGP\nIt7XRRddFFSIdvXq1f7wbnJyMkOHDq13n8GDBzN27NgGj7EtqRHg/dbdTCMRERERkbbAsuwqS9ma\npsHo1ERW7TrY3EOr1wDjc6Y4sxltbifOOIXH9gUJnIYVVuWyVsnywLYFvgqylUUqjBpKldz6VA/h\nqniUiIhI21ecF0YA1/bNb666q92Fd922g9+6bwdgWdRDdDaCm4dlW9/BpvHnSg7TYPLQPo3eT6TZ\n1QO8qAKvtGaJqb6lWOr6B9J0+l6vWIJFRERERERERJrc7Nmzm3sINTzzzDP+7WCq70rtzj7LVeWx\nKvCKiIiISDjyi0pYlPMp6/OKKXN7iXU5GJ2ayIjkBI6XtvybxMaY75DlWlilMpnTOFNJq12Edyvk\nr4GM+Y0TcA2lSm59agvhqniUiIhI27ZtfngB3Pw1viqp7Si867FNZrp/wl77fAD22efzXWNvvfu5\nbQeLPaMbe3iYBszNTCOlR8dG7yviqn05MFSBV1q91Im+pVje+C188uaZ5w0nTN0E3S9ptqGJiIiI\niIiISMtz6NAh1q9fD4DT6eS2225r5hG1XjUq8CrAKyIiIiIhWpt7kJkrduOxzlSeKnN7WbXrYKup\nvFs9vNuuuUt9lXIjUXG3ulCq5AY8Th0hXBWPEhERabssC/LXhrevuxT2hrqvQXNWVg13BQjbhu3W\nRfzWc7s/vAtQYtc/t3Pbjiqh38ZgGjDiogRmXJfcOsO7AEb7XslBAd62KjEVbsiC/0s785ztgc69\nmm9MIiIiIiIiItIiPffcc3i9vovrP/zhD0lMTGzmEbVeNQK837qxbRujXZUYExEREZFw5ReV1Ajv\ntha/uj6ZhzfsZ4ozW+Hdylxxvkq5jSWYKrmG6UusWLX8XOoL4VYUj9q2wFdtz13qe08pY32hX4V3\nRUREWidPWfhV/J2x4C4Lvn3cuZD+Z1g1tdmq9hpGgBCv6YTh98PRA/75jseM4VX3ZfzVk06+3adK\nc6dpcE6XBDhWe1+ldjTZ1ndY7BkdkfDuyh9fxbLthWTnHaLM7SXGaTIypRu3DenN4PPOxjRb+7nn\n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\nhNtrjG2pTu/qyvzNiYfn7/766B5TNDB27Nhi7li+fHk++9nPNtl3/fr1qaurS5IMGTIkgwcP7jJz\ntre/+puv5/8cdWLe+eX/n0+8+6v0rdh+ADdBV//lJujJJb9197NjBuc7nx/TY/Y3AF2bnFIau3PK\ne//rf2Tstv/Y57do7G97R6Eyi3eelFt3TC1pRknSI3M4AF2PAl4AAACAMmpoaMj1119ffH3//ffv\nVUi720033ZRf/epXWbFiRZYuXZonn3wyZ511VqeY8/vf/37ee++9JLsKf/cs3t3t1FNPzQ033JAr\nr7wyO3bsyPXXX58HH3ywTesHoGWVlRXpd9Cub/lXZ1eRb2tu//1ou61j7C4o3rmzUCwo7ohC4s4y\nxoc7d6ZPdVUqKyvSk5xzzjm5+eabkyQLFy7M1Vdf3WTfJ554otiePHlyl5qzHEaPPTWjx87PzoaG\nbN22JQcd1Df127YkSfr07b9/7fqtSa++Ob9Xr5xzAF8HjbX7HVTd4/Y3AF2bnFI6o8eemoxdlJ0N\nDdmy5c9JWpFPdrf7DchnGgr5eUqXT3pyDgeg6/H7rwEAAADK6JlnnsnatWuTJBMnTsz48eMb7VdV\nVZUrrrii+HrevHmdZs758+cX29/+9rebnHfGjBk5+OBdv8VhwYIF2bZtW6vXDkDXtLuguLq6Mv37\n9Er/Pr3a1O7qY/TU4saJEydm2LBhSZIlS5bkxRdfbLRfQ0NDbrvttuLradOmdak5y6myqir9+h+S\n6oMOSv9DDk3/Qw7d//aAgenft/cBfx001u6J+xuArk1OKb3KqqrW55Pd7V7VJc8nPTmHA9D1dOoC\n3gULFmTq1KkZNWpU+vTpkyFDhmTChAm5+eabi7e8lMLmzZvz8MMP5/LLL8+ECRMyePDg9OrVKwMG\nDMhxxx2XSy65JIsWLUqhUCjZnAAAAEDPtHDhwmK7pZtUzj333Eaf68g5f/e73+WNN95Ikhx//PE5\n+uijmxyrpqYmp59+epLk/fffz69//etWrRsA6JqqqqoyZ86c4utLLrkkGzZs2Kff7Nmzs2LFiiTJ\naaedlrPPPrvR8e69995UVFSkoqIikyZNKsucAED3JKcAAJ1JdUcvoDFbtmzJxRdfnAULFuz15xs3\nbszGjRvz3HPP5fbbb89DDz2UU0899YDmuvXWW/O9730v9fX1+7y3efPmrF69OqtXr87999+f008/\nPQ888ECOPPLIA5oTAAAA6LleeumlYvvkk09utu+wYcMycuTI1NXVZf369dm4cWMGDx7coXO2Zqzd\nfRYtWlR89pxzzmnt8gGALmjGjBl55JFH8tRTT2XlypUZN25cZsyYkdra2rzzzjuZN29enn322STJ\nwIEDM3fu3C45JwDQ9cgpAEBn0ekKeBsaGjJ16tTiP+wMHTp0n9CybNmy1NXVZfLkyVm2bFmOP/74\nNs/36quvFot3jzjiiJx55pn51Kc+lSFDhqS+vj7PP/98HnjggWzZsiVLly7NpEmT8vzzz2fIkCEl\n+XwBAACAnmX16tXFdnO31+7Zp66urvhsWwp4SzlnW8Zq7Nn98eabbzb7/tq1a1s1HgBQPtXV1Xn4\n4Ydz0UUX5fHHH8+6detyww037NNvxIgRmT9/fk444YQuOScA0PXIKQBAZ9HpCnjvuuuuYvFubW1t\nnn766QwdOrT4/qxZs3LVVVfllltuyaZNmzJz5sw888wzbZ6voqIiZ511Vq666qqcccYZqays3Ov9\nSy+9NLNnz87ZZ5+d1atXZ82aNZk9e3Z+8pOftHlOAAAAoOd69913i+1Bgwa12P+www5r9NmOmrOc\n6x85cmSr+gMAnUtNTU0ee+yxPProo/npT3+a5cuXZ8OGDampqcno0aNz4YUXZubMmTnkkEO69JwA\nQNcjpwAAnUGnKuBtaGjI9ddfX3x9//3371W8u9tNN92UX/3qV1mxYkWWLl2aJ598MmeddVab5rzx\nxhtz6KGHNtvnqKOOyvz583PSSSclSebPn58f/OAH6devX5vmBAAAAHquLVu2FNt9+vRpsX/fvn2L\n7c2bN3f4nB2xfgCga5syZUqmTJnS5uenT5+e6dOnl3VOAKBnkFMAgI5U2XKX8nnmmWeKv/pw4sSJ\nGT9+fKP9qqqqcsUVVxRfz5s3r81ztlS8u9u4ceMyZsyYJMnWrVvz2muvtXlOAAAAAFpWV1fX7McL\nL7zQ0UsEAAAAAABok051A+/ChQuL7cmTJzfb99xzz230ufY0YMCAYnvbtm1lmRMAAADoXvr3759N\nmzYlSerr69O/f/9m++/5PYiampoOn3PPZ+vr61uc+0DWP2LEiFb1BwAAAAAA6Co61Q28L730UrF9\n8sknN9t32LBhGTlyZJJk/fr12bhxY7uu7cMPP8yrr75afH3UUUe163wAAABA9zRw4MBi+6233mqx\n/9tvv93osx01Z0esHwAAAAAAoLvpVAW8q1evLraPPvroFvvv2WfPZ9vDgw8+mD//+c9JkvHjx2fY\nsGGtHuPNN99s9mPt2rWlXjYA0E4WLFiQqVOnZtSoUenTp0+GDBmSCRMm5Oabb857773XbeYEAEpv\nzJgxxfaaNWta7L9nnz2f7ag5O2L9AAAAAAAA3U11Ry9gT++++26xPWjQoBb7H3bYYY0+W2obN27M\nNddcU3x97bXXtmmc3TcGAwBd15YtW3LxxRdnwYIFe/35xo0bs3Hjxjz33HO5/fbb89BDD+XUU0/t\nsnMCAO1n7NixWbRoUZJk+fLl+exnP9tk3/Xr16euri5JMmTIkAwePLjD5xw7dmyxvXz58hbn3rPP\nJz7xiVatGwAAAAAAoLvqVDfwbtmypdju06dPi/379u1bbG/evLld1vThhx/mi1/8YjZs2JAkOf/8\n83PBBRe0y1wAQOfW0NCQqVOnFgtphw4dmmuvvTYPPvhgfvCDH+S0005LktTV1WXy5MlZtWpVl5wT\nAGhf55xzTrG9cOHCZvs+8cQTxfbkyZM7xZy1tbU58sgjkySrVq3KH/7whybH2rJlS5YuXZok6dev\nXyZOnNiaZQMAAAAAAHRbnaqAt7PZuXNnvva1rxX/oWn06NH5yU9+0ubx6urqmv144YUXSrV0AKAd\n3HXXXcWb62pra/Nf//VfueGGG/KVr3wls2bNyrPPPpsrr7wySbJp06bMnDmzS84JALSviRMnZtiw\nYUmSJUuW5MUXX2y0X0NDQ2677bbi62nTpnWaOb/85S8X27feemuT8/7oRz/K+++/nyQ577zz0q9f\nv1avHQAAAAAAoDvqVAW8/fv3L7br6+tb7L9t27Ziu6ampqRrKRQKueyyy/Kzn/0sSXLkkUfml7/8\nZT72sY+1ecwRI0Y0+zF8+PBSLR8AKLGGhoZcf/31xdf3339/hg4duk+/m266KSeddFKSZOnSpXny\nySe71JwAQPurqqrKnDlziq8vueSS4m/+2dPs2bOzYsWKJMlpp52Ws88+u9Hx7r333lRUVKSioiKT\nJk0qy5xXXXVV8Xsx//qv/1r8bQF7+o//+I/88z//c5Kkuro61113XaNjAQAAAAAA9ESdqoB34MCB\nxfZbb73VYv+333670WcPVKFQyDe/+c38+Mc/TrKr8Pbpp5/OqFGjSjYHANC1PPPMM1m7dm2SXTfY\njR8/vtF+VVVVueKKK4qv582b16XmBADKY8aMGfn85z+fJFm5cmXGjRuXOXPm5N/+7d9yxx135PTT\nT8/3v//9JLu+5zF37txONeeQIUNy++23J9n1G4wuuOCCXHzxxbn33ntz//3357LLLsukSZOydevW\nJMn111+f44477oA/BwAAAAAAgO6iuqMXsKcxY8ZkzZo1SZI1a9a0WDC7u+/uZ0uhUChk1qxZufPO\nO5MkRxxxRBYvXpzRo0eXZHwAoGtauHBhsT158uRm+5577rmNPtcV5gQAyqO6ujoPP/xwLrroojz+\n+ONZt25dbrjhhn36jRgxIvPnz88JJ5zQ6ea89NJLs3Xr1nznO99JfX19HnzwwTz44IN79amqqsr3\nvve9fPe73z3g9QMAAAAAAHQnneoG3rFjxxbby5cvb7bv+vXrU1dXl2TXrS+DBw8+4Pl3F+/+8Ic/\nTJIcfvjhWbx4cY455pgDHhsA6NpeeumlYvvkk09utu+wYcMycuTIJLsyy8aNG7vMnABA+dTU1OSx\nxx7LL37xi1x44YUZOXJkevfunUGDBuWUU07JTTfdlJdffjkTJkzotHN+4xvfyG9/+9t85zvfSW1t\nbWpqanLwwQfn2GOPzWWXXZbly5fn+uuvL9n6AQAAAAAAuotOdQPvOeeck5tvvjnJrpvjrr766ib7\nPvHEE8V2SzfS7Y+PFu8OHz48ixcvzrHHHnvAY++vHTt2FNu7f102AHRHe55ze55/ndnq1auL7aOP\nPrrF/kcffXTxh41Wr17dph82Ktecb775ZrPv7x4zkVEA6P46IqdMmTIlU6ZMafPz06dPz/Tp08s6\n556OPfbY3HLLLbnllltKMl5r+F4KAD1FV/xeSk8mowDQk8gpXYucAkBP0VUySqcq4J04cWKGDRuW\ndevWZcmSJXnxxRczfvz4ffo1NDTktttuK76eNm3aAc99+eWXF4t3hw0blsWLF+fjH//4AY/bGnve\nlPfpT3+6rHMDQEfZuHFjRo0a1dHLaNG7775bbA8aNKjF/ocddlijz3bGOXff3Ls/ZBQAepKuklN6\nMt9LAaAnklE6PxkFgJ5KTun85BQAeqLOnFEqO3oBe6qqqsqcOXOKry+55JJs2LBhn36zZ8/OihUr\nkiSnnXZazj777EbHu/fee1NRUZGKiopMmjSpyXm/9a1v5Y477kiyq3h3yZIlGTNmzAF8JgBAd7Nl\ny5Ziu0+fPi3279u3b7G9efPmLjMnAAAAAAAAAADtr1PdwJskM2bMyCOPPJKnnnoqK1euzLhx4zJj\nxozU1tbmnXfeybx58/Lss88mSQYOHJi5c+ce0HzXXnttfvCDHyRJKioq8vd///dZtWpVVq1a1exz\n48ePz5FHHnlAc3/U2LFj88ILLyRJBg8enOrq6qxdu7b4U08vvPBChg8fXtI5IYl9RtnYa+y2Y8eO\n4k/4jh07toNXQ11dXbPv19fX55VXXsnQoUNlFMrOXqMc7DP2JKd0Lb6XQkexzygXe43dZJSupbGM\nciD8t4BSs6coNXuqZ5NTuhY5hc7OnqLU7Kmeq6tklE5XwFtdXZ2HH344F110UR5//PGsW7cuN9xw\nwz79RowYkfnz5+eEE044oPl2FwMnSaFQyD/90z/t13P33HNPpk+ffkBzf1SfPn1y8sknN/n+8OHD\nM2LEiJLOCR9ln1Eu9hqd9dcTNKV///7ZtGlTkl0Frf3792+2/7Zt24rtmpqaTj3n/nwtHnPMMU2+\n5+uZcrHXKAf7jKTr5ZSezPdS6AzsM8rFXkNG6TpayigHwn8LKDV7ilKzp3omOaXrkFPoSuwpSs2e\n6nm6Qkap7OgFNKampiaPPfZYfvGLX+TCCy/MyJEj07t37wwaNCinnHJKbrrpprz88suZMGFCRy8V\nAOghBg4cWGy/9dZbLfZ/++23G322s88JAAAAAAAAAED763Q38O5pypQpmTJlSpufnz59eou35C5Z\nsqTN4wMAPceYMWOyZs2aJMmaNWta/Emt3X13P9tV5gQAAAAAAAAAoP11yht4AQA6m7Fjxxbby5cv\nb7bv+vXrU1dXlyQZMmRIBg8e3GXmBAAAAAAAAACg/SngBQDYD+ecc06xvXDhwmb7PvHEE8X25MmT\nu9ScAAAAAAAAAAC0PwW8AAD7YeLEiRk2bFiSZMmSJXnxxRcb7dfQ0JDbbrut+HratGldak4AAAAA\nAAAAANqfAl4AgP1QVVWVOXPmFF9fcskl2bBhwz79Zs+enRUrViRJTjvttJx99tmNjnfvvfemoqIi\nFRUVmTRpUlnmBAAAAAAAAACgc6ju6AUAAHQVM2bMyCOPPJKnnnoqK1euzLhx4zJjxozU1tbmnXfe\nybx58/Lss88mSQYOMpNx2QAAESRJREFUHJi5c+d2yTkBAAAAAAAAAGhfFYVCodDRiwAA6Co2b96c\niy66KI8//niTfUaMGJH58+dnwoQJTfa5995789WvfjVJMnHixCxZsqTd5wQAAAAAAAAAoHOo7OgF\nAAB0JTU1NXnsscfyi1/8IhdeeGFGjhyZ3r17Z9CgQTnllFNy00035eWXXy5pIW1HzAkAAAAAAAAA\nQPtxAy8AAAAAAAAAAAAAlJEbeAEAAAAAAAAAAACgjBTwAgAAAAAAAAAAAEAZKeAFAAAAAAAAAAAA\ngDJSwAsAAAAAAAAAAAAAZaSAFwAAAAAAAAAAAADKSAEvAAAAAAAAAAAAAJSRAl4AAAAAAAAAAAAA\nKCMFvJ3UggULMnXq1IwaNSp9+vTJkCFDMmHChNx888157733Onp5dICGhoa8/PLLuffee/Otb30r\nn/nMZ9KvX79UVFSkoqIi06dPb/WYr732Wv7xH/8xn/jEJ3LIIYekf//+GTNmTGbNmpUVK1a0aqwP\nPvggP/zhD/O5z30uw4cPT+/evTNixIh84QtfyAMPPJCdO3e2en2U3+bNm/Pwww/n8ssvz4QJEzJ4\n8OD06tUrAwYMyHHHHZdLLrkkixYtSqFQ2O8x7TPoXmQUPkpGoRxkFGB/yCnsSUahXOQUoL3JOD2X\nPEMpySxAqckoPZeMQqnJKfR4BTqVzZs3F84777xCkiY/Ro4cWXjuuec6eqmU2YUXXtjsvrj00ktb\nNd7cuXMLffv2bXK8qqqqwvXXX79fY61atapQW1vb7Pr++q//urBu3bo2fOaUyy233FLo06dPs3+P\nuz9OP/30whtvvNHimPYZdB8yCk2RUWhvMgrQEjmFxsgolIOcArQnGQd5hlKRWYBSklGQUSglOQUK\nherQaTQ0NGTq1KlZtGhRkmTo0KGZMWNGamtr884772TevHlZtmxZ6urqMnny5CxbtizHH398B6+a\ncmloaNjr9aGHHprDDjssv//971s91gMPPJCZM2cmSSorKzNt2rScccYZqa6uzrJly3Lfffflgw8+\nyHXXXZfevXvnmmuuaXKstWvX5uyzz84f//jHJMmJJ56YSy+9NIcffnhef/313H333Xn99dfz7LPP\n5gtf+EJ+/etf5+CDD271mml/r776aurr65MkRxxxRM4888x86lOfypAhQ1JfX5/nn38+DzzwQLZs\n2ZKlS5dm0qRJef755zNkyJBGx7PPoPuQUWiOjEJ7k1GA5sgpNEVGoRzkFKC9yDgk8gylI7MApSKj\nkMgolJacAokbeDuRO++8s1idX1tb22h1/pVXXrnXTxbQc9x4442F2bNnF37+858XXn/99UKhUCjc\nc889rf4ppg0bNhQGDBhQSFKorKwsPProo/v0ee655wr9+vUrJClUV1cXXnnllSbHmzZtWnEN06ZN\nK2zfvn2v9zdv3lyYOHFisc+11167/580ZXXZZZcVzjrrrMKTTz5ZaGhoaLTPH/7wh8KYMWOKf59f\n/epXG+1nn0H3IqPQHBmF9iajAM2RU2iKjEI5yClAe5FxKBTkGUpHZgFKRUahUJBRKC05BQoFBbyd\nxI4dOwrDhw8vflH/53/+Z5P9TjrppGK/f//3fy/zSulM2hKCrr766uIz3/rWt5rsd8sttxT7feUr\nX2m0z8qVKwsVFRWFJIXhw4cXNm/e3Gi/N998s3jlfb9+/QqbNm3ar7VSXm+//fZ+9VuxYkVxb/Tr\n16/w/vvv79PHPoPuQ0ahLWQUSklGAZoip9BaMgqlJqcA7UHGoTnyDG0hswClIKPQHBmFtpJToFCo\nDJ3CM888k7Vr1yZJJk6cmPHjxzfar6qqKldccUXx9bx588qyPrqP+fPnF9vf/va3m+w3Y8aM4tXu\nCxYsyLZt2xodq1AoJEm+/vWvp3///o2OdcQRR+RLX/pSkmTr1q159NFH27x+2s+hhx66X/3GjRuX\nMWPGJNn19/naa6/t08c+g+5DRqFcnB00RUYBmiKnUA7ODpojpwDtQcah1JwxyCxAKcgolJozhURO\ngSRRwNtJLFy4sNiePHlys33PPffcRp+Dlvzud7/LG2+8kSQ5/vjjc/TRRzfZt6amJqeffnqS5P33\n38+vf/3rffq0Zt/u+b592/UNGDCg2P5omLHPoHuRUSgHZwelIqNAzyKn0N6cHZSSnALsLxmHUnLG\n0FoyC9AUGYVScqbQFnIK3ZUC3k7ipZdeKrZPPvnkZvsOGzYsI0eOTJKsX78+GzdubNe10X20Zp99\ntM+ezyZJoVDIypUrk+z6KbpPfvKTbR6LruXDDz/Mq6++Wnx91FFH7fW+fQbdi4xCOTg7KAUZBXoe\nOYX25uygVOQUoDVkHErJGUNryCxAc2QUSsmZQmvJKXRnCng7idWrVxfbzf0UQGN99nwWmlPKfVZX\nV5etW7cmSUaMGJFevXo1O9bIkSNTVVWVJPn9739fvGqerufBBx/Mn//85yTJ+PHjM2zYsL3et8+g\ne5FRKAdnB6Ugo0DPI6fQ3pwdlIqcArSGjEMpOWNoDZkFaI6MQik5U2gtOYXuTAFvJ/Huu+8W24MG\nDWqx/2GHHdbos9CcUu6z1o7Vq1ev4nX227dvz/vvv9/iM3Q+GzduzDXXXFN8fe211+7Txz6D7kVG\noRycHRwoGQV6JjmF9ubsoBTkFKC1ZBxKyRnD/pJZgJbIKJSSM4XWkFPo7hTwdhJbtmwptvv06dNi\n/759+xbbmzdvbpc10f2Ucp+1dqyWxqPz+/DDD/PFL34xGzZsSJKcf/75ueCCC/bpZ59B9yKjUA7O\nDg6EjAI9l5xCe3N2cKDkFKAtZBxKyRnD/pBZgP0ho1BKzhT2l5xCT6CAF4AW7dy5M1/72teydOnS\nJMno0aPzk5/8pINXBQD0dDIKANBZySkAQFcgswAAnZWcQk+hgLeT6N+/f7FdX1/fYv9t27YV2zU1\nNe2yJrqfUu6z1o7V0nh0XoVCIZdddll+9rOfJUmOPPLI/PKXv8zHPvaxRvvbZ9C9yCiUg7ODtpBR\nADmF9ubsoK3kFOBAyDiUkjOG5sgsQGvIKJSSM4WWyCn0JAp4O4mBAwcW22+99VaL/d9+++1Gn4Xm\nlHKftXasHTt25L333kuS9OrVKwcffHCLz9DxCoVCvvnNb+bHP/5xkmTEiBF5+umnM2rUqCafsc+g\ne5FRKAdnB60lowCJnEL7c3bQFnIKcKBkHErJGUNTZBagtWQUSsmZQnPkFHoaBbydxJgxY4rtNWvW\ntNh/zz57PgvNKeU+GzlyZPr165ckefPNN7N9+/Zmx/rjH/+YhoaGJMmxxx6bioqK/V43HaNQKGTW\nrFm58847kyRHHHFEFi9enNGjRzf7nH0G3YuMQjk4O2gNGQXYTU6hvTk7aC05BSgFGYdScsbQGJkF\naAsZhVJyptAUOYWeSAFvJzF27Nhie/ny5c32Xb9+ferq6pIkQ4YMyeDBg9t1bXQfrdlnH+3ziU98\nYq/3KioqcsIJJyRJGhoa8pvf/KbNY9H57A5FP/zhD5Mkhx9+eBYvXpxjjjmmxWftM+heZBTKwdnB\n/pJRgD3JKbQ3ZwetIacApSLjUErOGD5KZgHaSkahlJwpNEZOoadSwNtJnHPOOcX2woULm+37xBNP\nFNuTJ09utzXR/dTW1ubII49MkqxatSp/+MMfmuy7ZcuWLF26NEnSr1+/TJw4cZ8+9m339NFQNHz4\n8CxevDjHHnvsfj1vn0H34muQcnB2sD9kFOCjfB3S3pwd7C85BSglX8OUkjOGPckswIHwNUspOVP4\nKDmFnkwBbycxceLEDBs2LEmyZMmSvPjii432a2hoyG233VZ8PW3atLKsj+7jy1/+crF96623Ntnv\nRz/6Ud5///0kyXnnnVe8Hr6psebOnVvs/1F/+tOf8tBDDyVJ+vbtmylTprRp7ZTH5ZdfXgxFw4YN\ny+LFi/Pxj3+8VWPYZ9B9yCiUi7ODlsgowEfJKZSDs4P9IacApSTjUGrOGHaTWYADIaNQas4U9iSn\n0KMV6DTuuOOOQpJCksIJJ5xQWL9+/T59rrrqqmKf0047rQNWSWdyzz33FPfDpZdeul/PrF+/vlBT\nU1NIUqisrCw8+uij+/R5/vnnC/369SskKVRXVxdWrVrV5Hhf+tKXimv4yle+Uti+ffte72/evLkw\nceLEYp/vfe97rfocKa/LL7+8+Hc1bNiwwiuvvNKmcewz6F5kFFpLRqHUZBSgKXIKrSGj0B7kFKA9\nyDg0RZ6hrWQWoBRkFJoio3Ag5BR6uopCoVBovsSXctmxY0cmT56cp556KsmunyiYMWNGamtr8847\n72TevHl59tlnkyQDBw7Ms88+mxNOOKEjl0wZrVmzJnffffdef/bb3/42jz32WJLkxBNPzN/+7d/u\n9f7nPve5fO5zn9tnrPvuuy/Tp09PklRWVmbatGn5/Oc/n6qqqixbtiz33Xdf6uvrkyQ33nhjvvvd\n7za5rj/96U859dRT8+abbxbXMX369Bx++OF5/fXXc9ddd+X1119Pkpx00klZunRp+vfv37b/EWhX\n1157bW688cYkSUVFRf7lX/4lxx13XIvPjR8/vvirCPZkn0H3IaPQHBmF9iajAM2RU2iKjEI5yClA\ne5FxSOQZSkdmAUpFRiGRUSgtOQXiBt7O5r333iv8zd/8TbE6v7GPESNGFJYtW9bRS6XMFi9e3Oy+\naOzjuuuua3K8O+64o9CnT58mn62qqirMmTNnv9a2cuXKwnHHHdfsWiZMmFBYu3Ztif7XoD3s+ZNB\nrfm45557mhzTPoPuQ0ahKTIK7U1GAVoip9AYGYVykFOA9iTjIM9QKjILUEoyCjIKpSSnQKFQHTqV\nmpqaPPbYY3n00Ufz05/+NMuXL8+GDRtSU1OT0aNH58ILL8zMmTNzyCGHdPRS6eK+8Y1v5Mwzz8yd\nd96ZRYsWpa6uLjt37szhhx+eM844I1//+tfzyU9+cr/Gqq2tzW9+85vcfffd+fnPf55XXnklmzZt\nyqBBg3LiiSfmoosuysUXX5zKysp2/qzobOwz6D5kFMrF2UE52GfQvcgplIOzg3Kx14DdZBxKzRlD\nKdlP0HPJKJSaM4VSs6foaioKhUKhoxcBAAAAAAAAAAAAAD2F8m8AAAAAAAAAAAAAKCMFvAAAAAAA\nAAAAAABQRgp4AQAAAAAAAAAAAKCMFPACAAAAAAAAAAAAQBkp4AUAAAAAAAAAAACAMlLACwAAAAAA\nAAAAAABlpIAXAAAAAAAAAAAAAMpIAS8AAAAAAAAAAAAAlJECXgAAAAAAAAAAAAAoIwW8AAAAAAAA\nAAAAAFBGCngBAAAAAAAAAAAAoIwU8AIAAAAAAAAAAABAGSngBQAAAAAAAAAAAIAyUsALAAAAAAAA\nAAAAAGWkgBcAAAAAAAAAAAAAykgBLwAAAAAAAAAAAACUkQJeAAAAAAAAAAAAACgjBbwAAAAAAAAA\nAAAAUEYKeAEAAAAAAAAAAACgjBTwAgAAAAAAAAAAAEAZKeAFAAAAAAAAAAAAgDJSwAsAAAAAAAAA\nAAAAZaSAFwAAAAAAAAAAAADKSAEvAAAAAAAAAAAAAJSRAl4AAAAAAAAAAAAAKCMFvAAAAAAAAAAA\nAABQRgp4AQAAAAAAAAAAAKCMFPACAAAAAAAAAAAAQBkp4AUAAAAAAAAAAACAMlLACwAAAAAAAAAA\nAABlpIAXAAAAAAAAAAAAAMpIAS8AAAAAAAAAAAAAlJECXgAAAAAAAAAAAAAoIwW8AAAAAAAAAAAA\nAFBGCngBAAAAAAAAAAAAoIwU8AIAAAAAAAAAAABAGSngBQAAAAAAAAAAAIAyUsALAAAAAAAAAAAA\nAGWkgBcAAAAAAAAAAAAAyuj/Ak+HcVyOTkwvAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": { - "tags": [], - "image/png": { - "width": 800 - } - }, - "execution_count": 8 - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "14mT7T7Q6erR", - "colab_type": "text" - }, - "source": [ - "Extras below\n", - "\n", - "---\n", - "\n", - "\n" - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "42_zEpW6W_N1", - "colab_type": "code", - "colab": {} - }, - "source": [ - "!git pull" - ], - "execution_count": 0, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "id": "9bVTcveIOzDd", - "colab_type": "code", - "colab": {} - }, - "source": [ - "%cd yolov3" - ], - "execution_count": 0, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "odMr0JFnCEyb", - "colab": {} - }, - "source": [ - "%ls" - ], - "execution_count": 0, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "uB3v5hj_CEyI", - "colab": {} - }, - "source": [ - "# Unit Tests\n", - "!python3 detect.py # detect 2 persons, 1 tie\n", - "!python3 test.py --data data/coco_32img.data # test mAP = 0.8\n", - "!python3 train.py --data data/coco_32img.data --epochs 3 --nosave # train 3 epochs" - ], - "execution_count": 0, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "colab_type": "code", - "id": "6D0si0TNCEx5", - "colab": {} - }, - "source": [ - "# Evolve Hyperparameters\n", - "!python3 train.py --data data/coco.data --img-size 320 --epochs 1 --evolve" - ], - "execution_count": 0, - "outputs": [] - } - ] -} diff --git a/export.py b/export.py new file mode 100644 index 0000000000..7a447d8389 --- /dev/null +++ b/export.py @@ -0,0 +1,1555 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Export a YOLOv3 PyTorch model to other formats. TensorFlow exports authored by https://github.com/zldrobit. + +Format | `export.py --include` | Model +--- | --- | --- +PyTorch | - | yolov5s.pt +TorchScript | `torchscript` | yolov5s.torchscript +ONNX | `onnx` | yolov5s.onnx +OpenVINO | `openvino` | yolov5s_openvino_model/ +TensorRT | `engine` | yolov5s.engine +CoreML | `coreml` | yolov5s.mlmodel +TensorFlow SavedModel | `saved_model` | yolov5s_saved_model/ +TensorFlow GraphDef | `pb` | yolov5s.pb +TensorFlow Lite | `tflite` | yolov5s.tflite +TensorFlow Edge TPU | `edgetpu` | yolov5s_edgetpu.tflite +TensorFlow.js | `tfjs` | yolov5s_web_model/ +PaddlePaddle | `paddle` | yolov5s_paddle_model/ + +Requirements: + $ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime openvino-dev tensorflow-cpu # CPU + $ pip install -r requirements.txt coremltools onnx onnx-simplifier onnxruntime-gpu openvino-dev tensorflow # GPU + +Usage: + $ python export.py --weights yolov5s.pt --include torchscript onnx openvino engine coreml tflite ... + +Inference: + $ python detect.py --weights yolov5s.pt # PyTorch + yolov5s.torchscript # TorchScript + yolov5s.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s_openvino_model # OpenVINO + yolov5s.engine # TensorRT + yolov5s.mlmodel # CoreML (macOS-only) + yolov5s_saved_model # TensorFlow SavedModel + yolov5s.pb # TensorFlow GraphDef + yolov5s.tflite # TensorFlow Lite + yolov5s_edgetpu.tflite # TensorFlow Edge TPU + yolov5s_paddle_model # PaddlePaddle + +TensorFlow.js: + $ cd .. && git clone https://github.com/zldrobit/tfjs-yolov5-example.git && cd tfjs-yolov5-example + $ npm install + $ ln -s ../../yolov5/yolov5s_web_model public/yolov5s_web_model + $ npm start +""" + +import argparse +import contextlib +import json +import os +import platform +import re +import subprocess +import sys +import time +import warnings +from pathlib import Path + +import pandas as pd +import torch +from torch.utils.mobile_optimizer import optimize_for_mobile + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[0] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +if platform.system() != "Windows": + ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from models.experimental import attempt_load +from models.yolo import ClassificationModel, Detect, DetectionModel, SegmentationModel +from utils.dataloaders import LoadImages +from utils.general import ( + LOGGER, + Profile, + check_dataset, + check_img_size, + check_requirements, + check_version, + check_yaml, + colorstr, + file_size, + get_default_args, + print_args, + url2file, + yaml_save, +) +from utils.torch_utils import select_device, smart_inference_mode + +MACOS = platform.system() == "Darwin" # macOS environment + + +class iOSModel(torch.nn.Module): + """Exports a PyTorch model to an iOS-compatible format with normalized input dimensions and class configurations.""" + + def __init__(self, model, im): + """Initializes an iOSModel with normalized input dimensions and number of classes from a PyTorch model. + + Args: + model (torch.nn.Module): The PyTorch model from which to initialize the iOS model. This should include + attributes like `nc` (number of classes) which will be used to configure the iOS model. + im (torch.Tensor): A Tensor representing a sample input image. The shape of this tensor should be + (batch_size, channels, height, width). This is used to extract dimensions for input normalization. + + Returns: + None + + Notes: + - This class is specifically designed for use in exporting a PyTorch model for deployment on iOS platforms, optimizing + input dimensions and class configurations to suit mobile requirements. + - Normalization factor is derived from the input image dimensions, which impacts the model's performance during + inference on iOS devices. + - Ensure the sample input image `im` provided has correct dimensions and shape for accurate model configuration. + """ + super().__init__() + _b, _c, h, w = im.shape # batch, channel, height, width + self.model = model + self.nc = model.nc # number of classes + if w == h: + self.normalize = 1.0 / w + else: + self.normalize = torch.tensor([1.0 / w, 1.0 / h, 1.0 / w, 1.0 / h]) # broadcast (slower, smaller) + # np = model(im)[0].shape[1] # number of points + # self.normalize = torch.tensor([1. / w, 1. / h, 1. / w, 1. / h]).expand(np, 4) # explicit (faster, larger) + + def forward(self, x): + """Performs a forward pass, returning scaled confidences and normalized coordinates given an input tensor. + + Args: + x (torch.Tensor): Input tensor representing a batch of images, with dimensions [batch_size, channels, + height, width]. + + Returns: + tuple[torch.Tensor, torch.Tensor, torch.Tensor]: A tuple containing three elements: + - xywh (torch.Tensor): Tensor of shape [batch_size, num_detections, 4] containing normalized x, y, width, + and height coordinates. + - conf (torch.Tensor): Tensor of shape [batch_size, num_detections, 1] containing confidence scores for + each detection. + - cls (torch.Tensor): Tensor of shape [batch_size, num_detections, num_classes] containing class + probabilities. + + Examples: + ```python + model = iOSModel(trained_model, input_image_tensor) + detection_results = model.forward(input_tensor) + xywh, conf, cls = detection_results + ``` + + Further reading on exporting models to different formats: + https://github.com/ultralytics/ultralytics + + See Also: + `export.py` for exporting a YOLOv3 PyTorch model to various formats. + https://github.com/zldrobit for TensorFlow export scripts. + + Notes: + The dimensions of `x` should match the input dimensions used during the model's initialization to ensure + proper scaling and normalization. + """ + xywh, conf, cls = self.model(x)[0].squeeze().split((4, 1, self.nc), 1) + return cls * conf, xywh * self.normalize # confidence (3780, 80), coordinates (3780, 4) + + +def export_formats(): + """Lists supported YOLOv3 model export formats including file suffixes and CPU/GPU compatibility. + + Returns: + list: A list of lists where each sublist contains information about a specific export format. Each sublist + includes + the following elements: + - str: The name of the format. + - str: The command-line argument for including this format. + - str: The file suffix used for this format. + - bool: Indicates if the format is compatible with CPU. + - bool: Indicates if the format is compatible with GPU. + + Examples: + ```python + formats = export_formats() + for format in formats: + print(f"Format: {format[0]}, Suffix: {format[2]}, CPU Compatible: {format[3]}, GPU Compatible: {format[4]}") + ``` + """ + x = [ + ["PyTorch", "-", ".pt", True, True], + ["TorchScript", "torchscript", ".torchscript", True, True], + ["ONNX", "onnx", ".onnx", True, True], + ["OpenVINO", "openvino", "_openvino_model", True, False], + ["TensorRT", "engine", ".engine", False, True], + ["CoreML", "coreml", ".mlmodel", True, False], + ["TensorFlow SavedModel", "saved_model", "_saved_model", True, True], + ["TensorFlow GraphDef", "pb", ".pb", True, True], + ["TensorFlow Lite", "tflite", ".tflite", True, False], + ["TensorFlow Edge TPU", "edgetpu", "_edgetpu.tflite", False, False], + ["TensorFlow.js", "tfjs", "_web_model", False, False], + ["PaddlePaddle", "paddle", "_paddle_model", True, True], + ] + return pd.DataFrame(x, columns=["Format", "Argument", "Suffix", "CPU", "GPU"]) + + +def try_export(inner_func): + """Profiles and logs the export process of YOLOv3 models, capturing success or failure details. + + Args: + inner_func (Callable): The function that performs the actual export process and returns the model file path and + the exported model. + + Returns: + Callable: A wrapped function that profiles and logs the export process, handling successes and failures. + + Examples: + ```python + @try_export + def export_onnx(py_model_path: str, output_path: str): + # Export logic here + return output_path, model + ``` + + Notes: + Applying this decorator to an export function will log the export results, including export success or failure, + along with associated time and file size details. + """ + inner_args = get_default_args(inner_func) + + def outer_func(*args, **kwargs): + """Profiles and logs the export process of YOLOv3 models, capturing success or failure details.""" + prefix = inner_args["prefix"] + try: + with Profile() as dt: + f, model = inner_func(*args, **kwargs) + LOGGER.info(f"{prefix} export success ✅ {dt.t:.1f}s, saved as {f} ({file_size(f):.1f} MB)") + return f, model + except Exception as e: + LOGGER.info(f"{prefix} export failure ❌ {dt.t:.1f}s: {e}") + return None, None + + return outer_func + + +@try_export +def export_torchscript(model, im, file, optimize, prefix=colorstr("TorchScript:")): + """Export a YOLOv3 model to TorchScript format, with optional optimization for mobile deployment. + + Args: + model (torch.nn.Module): The YOLOv3 model to be exported. + im (torch.Tensor): A tensor representing the input image for the model, typically with shape (N, 3, H, W). + file (pathlib.Path): The file path where the TorchScript model will be saved. + optimize (bool): A boolean flag indicating whether to optimize the model for mobile devices. + prefix (str): A prefix for logging messages. Defaults to `colorstr("TorchScript:")`. + + Returns: + (pathlib.Path | None, torch.nn.Module | None): Tuple containing the path to the saved TorchScript model and the + model itself. Returns `(None, None)` if the export fails. + + Raises: + Exception: If there is an error during export, it logs the error and returns `(None, None)`. + + Examples: + ```python + from pathlib import Path + import torch + + model = ... # Assume model is loaded or created + im = torch.randn(1, 3, 640, 640) # A sample input tensor + file = Path("model.torchscript") + optimize = True + + export_torchscript(model, im, file, optimize) + ``` + + For more information, visit: https://ultralytics.com/. + + Notes: + The function uses `torch.jit.trace` to trace the model with the input image tensor (`im`). Required metadata such as + input shape, stride, and class names are stored in an extra file included in the TorchScript model. + """ + LOGGER.info(f"\n{prefix} starting export with torch {torch.__version__}...") + f = file.with_suffix(".torchscript") + + ts = torch.jit.trace(model, im, strict=False) + d = {"shape": im.shape, "stride": int(max(model.stride)), "names": model.names} + extra_files = {"config.txt": json.dumps(d)} # torch._C.ExtraFilesMap() + if optimize: # https://pytorch.org/tutorials/recipes/mobile_interpreter.html + optimize_for_mobile(ts)._save_for_lite_interpreter(str(f), _extra_files=extra_files) + else: + ts.save(str(f), _extra_files=extra_files) + return f, None + + +@try_export +def export_onnx(model, im, file, opset, dynamic, simplify, prefix=colorstr("ONNX:")): + """Export a YOLOv3 model to ONNX format with dynamic shape and simplification options. + + Args: + model (torch.nn.Module): The YOLOv3 model to be exported. + im (torch.Tensor): A sample input tensor for tracing the model. + file (pathlib.Path): The file path where the ONNX model will be saved. + opset (int): The ONNX opset version to use for the export. + dynamic (bool): If `True`, enables dynamic shape support. + simplify (bool): If `True`, simplifies the ONNX model using onnx-simplifier. + prefix (str): A prefix for logging messages. + + Returns: + tuple[pathlib.Path, None]: The path to the saved ONNX model, None as the second tuple element (kept for consistency). + + Examples: + ```python + from pathlib import Path + import torch + + model = ... # Assume model is loaded or created + im = torch.randn(1, 3, 640, 640) # A sample input tensor + file = Path("model.onnx") + opset = 12 + dynamic = True + simplify = True + + export_onnx(model, im, file, opset, dynamic, simplify) + ``` + + Notes: + Ensure `onnx`, `onnx-simplifier`, and suitable runtime packages are installed. + This function uses `torch.onnx.export` to create the ONNX model, followed by optional simplification using + `onnx-simplifier`. If `dynamic` is enabled, dynamic axes mappings are added to support variable input shapes. + Relevant YOLO model metadata like `stride` and `names` are included as part of the ONNX model's metadata. + + For more details on exporting and running inferences, visit: + - https://github.com/ultralytics/ultralytics + - https://github.com/zldrobit for TensorFlow export scripts. + """ + check_requirements("onnx>=1.12.0") + import onnx + + LOGGER.info(f"\n{prefix} starting export with onnx {onnx.__version__}...") + f = file.with_suffix(".onnx") + + output_names = ["output0", "output1"] if isinstance(model, SegmentationModel) else ["output0"] + if dynamic: + dynamic = {"images": {0: "batch", 2: "height", 3: "width"}} # shape(1,3,640,640) + if isinstance(model, SegmentationModel): + dynamic["output0"] = {0: "batch", 1: "anchors"} # shape(1,25200,85) + dynamic["output1"] = {0: "batch", 2: "mask_height", 3: "mask_width"} # shape(1,32,160,160) + elif isinstance(model, DetectionModel): + dynamic["output0"] = {0: "batch", 1: "anchors"} # shape(1,25200,85) + + torch.onnx.export( + model.cpu() if dynamic else model, # --dynamic only compatible with cpu + im.cpu() if dynamic else im, + f, + verbose=False, + opset_version=opset, + do_constant_folding=True, # WARNING: DNN inference with torch>=1.12 may require do_constant_folding=False + input_names=["images"], + output_names=output_names, + dynamic_axes=dynamic or None, + ) + + # Checks + model_onnx = onnx.load(f) # load onnx model + onnx.checker.check_model(model_onnx) # check onnx model + + # Metadata + d = {"stride": int(max(model.stride)), "names": model.names} + for k, v in d.items(): + meta = model_onnx.metadata_props.add() + meta.key, meta.value = k, str(v) + onnx.save(model_onnx, f) + + # Simplify + if simplify: + try: + cuda = torch.cuda.is_available() + check_requirements(("onnxruntime-gpu" if cuda else "onnxruntime", "onnx-simplifier>=0.4.1")) + import onnxsim + + LOGGER.info(f"{prefix} simplifying with onnx-simplifier {onnxsim.__version__}...") + model_onnx, check = onnxsim.simplify(model_onnx) + assert check, "assert check failed" + onnx.save(model_onnx, f) + except Exception as e: + LOGGER.info(f"{prefix} simplifier failure: {e}") + return f, model_onnx + + +@try_export +def export_openvino(file, metadata, half, int8, data, prefix=colorstr("OpenVINO:")): + """Export a YOLOv3 model to OpenVINO format with optional INT8 quantization and inference metadata. + + Args: + file (Path): Path to the output file. + metadata (dict): Inference metadata to include in the exported model. + half (bool): Indicates if FP16 precision should be used. + int8 (bool): Indicates if INT8 quantization should be applied. + data (str): Path to the dataset file (.yaml) for post-training quantization. + + Returns: + tuple[Path | None, openvino.runtime.Model | None]: Tuple containing the path to the exported model and the OpenVINO + model object, or None if the export failed. + + Examples: + ```python + model_file = Path('/path/to/model.onnx') + metadata = {'names': ['class1', 'class2'], 'stride': 32} + export_openvino(model_file, metadata, half=True, int8=False, data='/path/to/dataset.yaml') + ``` + + Notes: + - Requires the `openvino-dev>=2023.0` and optional `nncf>=2.4.0` package for INT8 quantization. + - Refer to OpenVINO documentation for further details: https://docs.openvino.ai/latest/index.html. + """ + check_requirements("openvino-dev>=2023.0") # requires openvino-dev: https://pypi.org/project/openvino-dev/ + import openvino.runtime as ov + from openvino.tools import mo + + LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...") + f = str(file).replace(file.suffix, f"_openvino_model{os.sep}") + f_onnx = file.with_suffix(".onnx") + f_ov = str(Path(f) / file.with_suffix(".xml").name) + if int8: + check_requirements("nncf>=2.4.0") # requires at least version 2.4.0 to use the post-training quantization + import nncf + import numpy as np + from openvino.runtime import Core + + from utils.dataloaders import create_dataloader + + core = Core() + onnx_model = core.read_model(f_onnx) # export + + def prepare_input_tensor(image: np.ndarray): + """Prepares the input tensor by normalizing pixel values and converting the datatype to float32.""" + input_tensor = image.astype(np.float32) # uint8 to fp16/32 + input_tensor /= 255.0 # 0 - 255 to 0.0 - 1.0 + + if input_tensor.ndim == 3: + input_tensor = np.expand_dims(input_tensor, 0) + return input_tensor + + def gen_dataloader(yaml_path, task="train", imgsz=640, workers=4): + """Generates a PyTorch dataloader for the specified task using dataset configurations from a YAML file.""" + data_yaml = check_yaml(yaml_path) + data = check_dataset(data_yaml) + dataloader = create_dataloader( + data[task], imgsz=imgsz, batch_size=1, stride=32, pad=0.5, single_cls=False, rect=False, workers=workers + )[0] + return dataloader + + def transform_fn(data_item): + """Quantization transform function. + + Extracts and preprocess input data from dataloader item for quantization. + + Parameters: + data_item: Tuple with data item produced by DataLoader during iteration + + Returns: + input_tensor: Input data for quantization + """ + img = data_item[0].numpy() + input_tensor = prepare_input_tensor(img) + return input_tensor + + ds = gen_dataloader(data) + quantization_dataset = nncf.Dataset(ds, transform_fn) + ov_model = nncf.quantize(onnx_model, quantization_dataset, preset=nncf.QuantizationPreset.MIXED) + else: + ov_model = mo.convert_model(f_onnx, model_name=file.stem, framework="onnx", compress_to_fp16=half) # export + + ov.serialize(ov_model, f_ov) # save + yaml_save(Path(f) / file.with_suffix(".yaml").name, metadata) # add metadata.yaml + return f, None + + +@try_export +def export_paddle(model, im, file, metadata, prefix=colorstr("PaddlePaddle:")): + """Export a YOLOv3 model to PaddlePaddle format using X2Paddle, saving to a specified directory and including model + metadata. + + Args: + model (torch.nn.Module): The YOLOv3 model to be exported. + im (torch.Tensor): A sample input tensor used for tracing the model. + file (pathlib.Path): Destination file path for the exported model, with `.pt` suffix. + metadata (dict): Additional metadata to be saved in YAML format alongside the exported model. + prefix (str, optional): Log message prefix. Defaults to a colored "PaddlePaddle:" string. + + Returns: + tuple: A tuple containing the directory path (str) where the PaddlePaddle model is saved, and `None`. + Requirements: + - paddlepaddle: Install via `pip install paddlepaddle`. + - x2paddle: Install via `pip install x2paddle`. + + Examples: + ```python + from pathlib import Path + import torch + from models.yolo import DetectionModel + + model = DetectionModel() # Example model initialization + im = torch.rand(1, 3, 640, 640) # Example input tensor + file = Path("path/to/save/model.pt") + metadata = {"nc": 80, "names": ["class1", "class2", ...]} # Example metadata + + export_paddle(model, im, file, metadata) + ``` + + Notes: + The function first checks for required packages `paddlepaddle` and `x2paddle`. It then uses X2Paddle to trace + the model and export it to a PaddlePaddle format, saving the resulting files in the specified directory with + included metadata in a YAML file. + """ + check_requirements(("paddlepaddle", "x2paddle")) + import x2paddle + from x2paddle.convert import pytorch2paddle + + LOGGER.info(f"\n{prefix} starting export with X2Paddle {x2paddle.__version__}...") + f = str(file).replace(".pt", f"_paddle_model{os.sep}") + + pytorch2paddle(module=model, save_dir=f, jit_type="trace", input_examples=[im]) # export + yaml_save(Path(f) / file.with_suffix(".yaml").name, metadata) # add metadata.yaml + return f, None + + +@try_export +def export_coreml(model, im, file, int8, half, nms, prefix=colorstr("CoreML:")): + """Export a YOLOv3 model to CoreML format with optional quantization and Non-Maximum Suppression (NMS). + + Args: + model (torch.nn.Module): The YOLOv3 model to be exported. + im (torch.Tensor): Input tensor used for tracing the model. Shape should be (batch_size, channels, height, + width). + file (pathlib.Path): Destination file path where the CoreML model will be saved. + int8 (bool): Whether to use INT8 quantization. If True, quantizes the model to 8-bit integers. + half (bool): Whether to use FP16 quantization. If True, converts the model to 16-bit floating point numbers. + nms (bool): Whether to include Non-Maximum Suppression in the CoreML model. + prefix (str): Prefix string for logging purposes. Default is colorstr("CoreML:"). + + Returns: + str: Path to the saved CoreML model (.mlmodel). + + Raises: + Exception: If there is an error during export, logs the error and stops the process. + + Examples: + ```python + from ultralytics.utils import export_coreml + from pathlib import Path + import torch + + model = ... # Assume model is loaded or created + im = torch.randn(1, 3, 640, 640) # A sample input tensor + file = Path("model.mlmodel") + export_coreml(model, im, file, int8=False, half=True, nms=True) + ``` + + Notes: + - This function requires `coremltools` to be installed. + - If `nms` is enabled, the model is wrapped with `iOSModel` to include NMS. + - Quantization only works on macOS. + """ + check_requirements("coremltools") + import coremltools as ct + + LOGGER.info(f"\n{prefix} starting export with coremltools {ct.__version__}...") + f = file.with_suffix(".mlmodel") + + if nms: + model = iOSModel(model, im) + ts = torch.jit.trace(model, im, strict=False) # TorchScript model + ct_model = ct.convert(ts, inputs=[ct.ImageType("image", shape=im.shape, scale=1 / 255, bias=[0, 0, 0])]) + bits, mode = (8, "kmeans_lut") if int8 else (16, "linear") if half else (32, None) + if bits < 32: + if MACOS: # quantization only supported on macOS + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=DeprecationWarning) # suppress numpy==1.20 float warning + ct_model = ct.models.neural_network.quantization_utils.quantize_weights(ct_model, bits, mode) + else: + print(f"{prefix} quantization only supported on macOS, skipping...") + ct_model.save(f) + return f, ct_model + + +@try_export +def export_engine(model, im, file, half, dynamic, simplify, workspace=4, verbose=False, prefix=colorstr("TensorRT:")): + """Export a YOLOv3 model to TensorRT engine format, optimizing it for GPU inference. + + Args: + model (torch.nn.Module): The YOLOv3 model to be exported. + im (torch.Tensor): Sample input tensor used for tracing the model. + file (Path): File path where the exported TensorRT engine will be saved. + half (bool): Whether to use FP16 precision. Requires a supported GPU. + dynamic (bool): Whether to use dynamic input shapes. + simplify (bool): Whether to simplify the model during the ONNX export. + workspace (int): The maximum workspace size in GB. Default is 4. + verbose (bool): Whether to print detailed export logs. + prefix (str): Prefix string for log messages. Default is "TensorRT:". + + Returns: + tuple[Path, None]: The output file path (Path) and None. + + Raises: + AssertionError: If the model is running on CPU instead of GPU. + RuntimeError: If the ONNX file failed to load. + + Examples: + ```python + from pathlib import Path + import torch + + # Initialize model and dummy input + model = YOLOv3(...) # or another correct initialization + im = torch.randn(1, 3, 640, 640) + + # Export the model + export_engine(model, im, Path("yolov3.engine"), half=True, dynamic=True, simplify=True) + ``` + + Notes: + Requires TensorRT installation to execute. Nvidia TensorRT: https://developer.nvidia.com/tensorrt + """ + assert im.device.type != "cpu", "export running on CPU but must be on GPU, i.e. `python export.py --device 0`" + try: + import tensorrt as trt + except Exception: + if platform.system() == "Linux": + check_requirements("nvidia-tensorrt", cmds="-U --index-url https://pypi.ngc.nvidia.com") + import tensorrt as trt + + if trt.__version__[0] == "7": # TensorRT 7 handling https://github.com/ultralytics/yolov5/issues/6012 + grid = model.model[-1].anchor_grid + model.model[-1].anchor_grid = [a[..., :1, :1, :] for a in grid] + export_onnx(model, im, file, 12, dynamic, simplify) # opset 12 + model.model[-1].anchor_grid = grid + else: # TensorRT >= 8 + check_version(trt.__version__, "8.0.0", hard=True) # require tensorrt>=8.0.0 + export_onnx(model, im, file, 12, dynamic, simplify) # opset 12 + onnx = file.with_suffix(".onnx") + + LOGGER.info(f"\n{prefix} starting export with TensorRT {trt.__version__}...") + assert onnx.exists(), f"failed to export ONNX file: {onnx}" + f = file.with_suffix(".engine") # TensorRT engine file + logger = trt.Logger(trt.Logger.INFO) + if verbose: + logger.min_severity = trt.Logger.Severity.VERBOSE + + builder = trt.Builder(logger) + config = builder.create_builder_config() + config.max_workspace_size = workspace * 1 << 30 + # config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace << 30) # fix TRT 8.4 deprecation notice + + flag = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) + network = builder.create_network(flag) + parser = trt.OnnxParser(network, logger) + if not parser.parse_from_file(str(onnx)): + raise RuntimeError(f"failed to load ONNX file: {onnx}") + + inputs = [network.get_input(i) for i in range(network.num_inputs)] + outputs = [network.get_output(i) for i in range(network.num_outputs)] + for inp in inputs: + LOGGER.info(f'{prefix} input "{inp.name}" with shape{inp.shape} {inp.dtype}') + for out in outputs: + LOGGER.info(f'{prefix} output "{out.name}" with shape{out.shape} {out.dtype}') + + if dynamic: + if im.shape[0] <= 1: + LOGGER.warning(f"{prefix} WARNING ⚠️ --dynamic model requires maximum --batch-size argument") + profile = builder.create_optimization_profile() + for inp in inputs: + profile.set_shape(inp.name, (1, *im.shape[1:]), (max(1, im.shape[0] // 2), *im.shape[1:]), im.shape) + config.add_optimization_profile(profile) + + LOGGER.info(f"{prefix} building FP{16 if builder.platform_has_fast_fp16 and half else 32} engine as {f}") + if builder.platform_has_fast_fp16 and half: + config.set_flag(trt.BuilderFlag.FP16) + with builder.build_engine(network, config) as engine, open(f, "wb") as t: + t.write(engine.serialize()) + return f, None + + +@try_export +def export_saved_model( + model, + im, + file, + dynamic, + tf_nms=False, + agnostic_nms=False, + topk_per_class=100, + topk_all=100, + iou_thres=0.45, + conf_thres=0.25, + keras=False, + prefix=colorstr("TensorFlow SavedModel:"), +): + """Exports a YOLOv3 model to TensorFlow SavedModel format, including optional settings for Non-Max Suppression + (NMS). + + Args: + model (torch.nn.Module): The YOLOv3 PyTorch model to be exported. + im (torch.Tensor): Tensor of sample input data used for tracing the model. + file (pathlib.Path): File path where the exported TensorFlow SavedModel will be saved. + dynamic (bool): If `True`, supports dynamic input shapes. + tf_nms (bool, optional): If `True`, includes TensorFlow NMS in the exported model. Defaults to `False`. + agnostic_nms (bool, optional): If `True`, uses class-agnostic NMS. Defaults to `False`. + topk_per_class (int, optional): Number of top-K predictions to keep per class after NMS. Defaults to `100`. + topk_all (int, optional): Number of top-K predictions to keep overall after NMS. Defaults to `100`. + iou_thres (float, optional): Intersection over Union (IoU) threshold for NMS. Defaults to `0.45`. + conf_thres (float, optional): Confidence threshold for NMS. Defaults to `0.25`. + keras (bool, optional): If `True`, saves the model in Keras format. Defaults to `False`. + prefix (str, optional): Prefix for logging messages. Defaults to `colorstr("TensorFlow SavedModel:")`. + + Returns: + (str, None): Path to the saved TensorFlow model as a string and `None` (kept for interface consistency). + + Raises: + ImportError: If the required TensorFlow libraries are not installed. + + Examples: + ```python + from pathlib import Path + from models.common import DetectMultiBackend + import torch + + model = DetectMultiBackend(weights='yolov5s.pt') + im = torch.zeros(1, 3, 640, 640) # Sample input tensor + file = Path("output/saved_model") + + export_saved_model(model, im, file, dynamic=True) + ``` + + Notes: + - Ensure that required TensorFlow libraries are installed (e.g., `pip install tensorflow`). + - For more information, visit https://github.com/ultralytics/yolov5. + """ + # YOLOv3 TensorFlow SavedModel export + try: + import tensorflow as tf + except Exception: + check_requirements(f"tensorflow{'' if torch.cuda.is_available() else '-macos' if MACOS else '-cpu'}") + import tensorflow as tf + from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2 + + from models.tf import TFModel + + LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...") + f = str(file).replace(".pt", "_saved_model") + batch_size, ch, *imgsz = list(im.shape) # BCHW + + tf_model = TFModel(cfg=model.yaml, model=model, nc=model.nc, imgsz=imgsz) + im = tf.zeros((batch_size, *imgsz, ch)) # BHWC order for TensorFlow + _ = tf_model.predict(im, tf_nms, agnostic_nms, topk_per_class, topk_all, iou_thres, conf_thres) + inputs = tf.keras.Input(shape=(*imgsz, ch), batch_size=None if dynamic else batch_size) + outputs = tf_model.predict(inputs, tf_nms, agnostic_nms, topk_per_class, topk_all, iou_thres, conf_thres) + keras_model = tf.keras.Model(inputs=inputs, outputs=outputs) + keras_model.trainable = False + keras_model.summary() + if keras: + keras_model.save(f, save_format="tf") + else: + spec = tf.TensorSpec(keras_model.inputs[0].shape, keras_model.inputs[0].dtype) + m = tf.function(lambda x: keras_model(x)) # full model + m = m.get_concrete_function(spec) + frozen_func = convert_variables_to_constants_v2(m) + tfm = tf.Module() + tfm.__call__ = tf.function(lambda x: frozen_func(x)[:4] if tf_nms else frozen_func(x), [spec]) + tfm.__call__(im) + tf.saved_model.save( + tfm, + f, + options=tf.saved_model.SaveOptions(experimental_custom_gradients=False) + if check_version(tf.__version__, "2.6") + else tf.saved_model.SaveOptions(), + ) + return f, keras_model + + +@try_export +def export_pb(keras_model, file, prefix=colorstr("TensorFlow GraphDef:")): + """Export a Keras model to TensorFlow GraphDef (*.pb) format, which is compatible with YOLOv3. + + Args: + keras_model (tf.keras.Model): The trained Keras model to be exported. + file (pathlib.Path): The target file path for saving the exported model. + prefix (str, optional): Prefix string for logging. Defaults to colorstr("TensorFlow GraphDef:"). + + Returns: + tuple[pathlib.Path, None]: The file path where the model is saved and None. + + Examples: + ```python + from tensorflow.keras.models import load_model + from pathlib import Path + export_pb(load_model('model.h5'), Path('model.pb')) + ``` + + See Also: + For more details on TensorFlow GraphDef, visit + https://github.com/leimao/Frozen_Graph_TensorFlow. + + Notes: + Ensure TensorFlow is properly installed in your environment as it is required for this function to execute. + TensorFlow's version should be compatible with the version used to train your model to avoid any compatibility + issues. + """ + import tensorflow as tf + from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2 + + LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...") + f = file.with_suffix(".pb") + + m = tf.function(lambda x: keras_model(x)) # full model + m = m.get_concrete_function(tf.TensorSpec(keras_model.inputs[0].shape, keras_model.inputs[0].dtype)) + frozen_func = convert_variables_to_constants_v2(m) + frozen_func.graph.as_graph_def() + tf.io.write_graph(graph_or_graph_def=frozen_func.graph, logdir=str(f.parent), name=f.name, as_text=False) + return f, None + + +@try_export +def export_tflite(keras_model, im, file, int8, data, nms, agnostic_nms, prefix=colorstr("TensorFlow Lite:")): + """Export a YOLOv3 PyTorch model to TensorFlow Lite (TFLite) format. + + Args: + keras_model (tf.keras.Model): The Keras model obtained after converting the PyTorch model. + im (torch.Tensor): Sample input tensor to determine model input size. + file (pathlib.Path): Desired file path for saving the exported TFLite model. + int8 (bool): Flag to enable INT8 quantization for the TFLite model. + data (str): Path to dataset YAML file for representative data generation used in quantization. + nms (bool): Flag to include Non-Maximum Suppression (NMS) in the exported TFLite model. + agnostic_nms (bool): Flag to apply class-agnostic NMS during inference. + prefix (str, optional): Prefix for logging messages. Defaults to colorstr("TensorFlow Lite:"). + + Returns: + (str | None): File path of the saved TensorFlow Lite model file or None if export fails. + + Examples: + ```python + import torch + from pathlib import Path + from models.experimental import attempt_load + + # Load and prepare model + model = attempt_load('yolov5s.pt', map_location='cpu') + im = torch.zeros(1, 3, 640, 640) # Dummy input tensor + + # Export model + export_tflite(model, im, Path('yolov5s'), int8=False, data=None, nms=True, agnostic_nms=False) + ``` + + For more details, refer to: + TensorFlow Lite Developer Guide: https://www.tensorflow.org/lite/guide + Model Conversion Reference: https://github.com/leimao/Frozen_Graph_TensorFlow + + Notes: + - Ensure TensorFlow is installed to perform the export. + - INT8 quantization requires a representative dataset to provide accurate calibration for the model. + - Including Non-Max Suppression (NMS) modifies the exported model to handle post-processing. + """ + import tensorflow as tf + + LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...") + _batch_size, _ch, *imgsz = list(im.shape) # BCHW + f = str(file).replace(".pt", "-fp16.tflite") + + converter = tf.lite.TFLiteConverter.from_keras_model(keras_model) + converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS] + converter.target_spec.supported_types = [tf.float16] + converter.optimizations = [tf.lite.Optimize.DEFAULT] + if int8: + from models.tf import representative_dataset_gen + + dataset = LoadImages(check_dataset(check_yaml(data))["train"], img_size=imgsz, auto=False) + converter.representative_dataset = lambda: representative_dataset_gen(dataset, ncalib=100) + converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8] + converter.target_spec.supported_types = [] + converter.inference_input_type = tf.uint8 # or tf.int8 + converter.inference_output_type = tf.uint8 # or tf.int8 + converter.experimental_new_quantizer = True + f = str(file).replace(".pt", "-int8.tflite") + if nms or agnostic_nms: + converter.target_spec.supported_ops.append(tf.lite.OpsSet.SELECT_TF_OPS) + + tflite_model = converter.convert() + open(f, "wb").write(tflite_model) + return f, None + + +@try_export +def export_edgetpu(file, prefix=colorstr("Edge TPU:")): + """Export a YOLOv5 model to TensorFlow Edge TPU format with INT8 quantization. + + Args: + file (Path): The file path for the PyTorch model to be exported, with a `.pt` suffix. + prefix (str): A prefix to be used for logging output. Defaults to "Edge TPU:" + + Returns: + Tuple[Path | None, None]: A tuple containing the file path of the exported model with the `-int8_edgetpu.tflite` + suffix and `None`, if successful. If unsuccessful, returns `(None, None)`. + + Raises: + AssertionError: If the export is not executed on a Linux system. + subprocess.CalledProcessError: If there are issues with subprocess execution, particularly around Edge TPU + compiler installation or model conversion. + + Examples: + ```python + from pathlib import Path + from ultralytics import export_edgetpu + + model_file = Path('yolov5s.pt') + exported_model, _ = export_edgetpu(model_file) + print(f"Model exported to {exported_model}") + ``` + + For additional details, visit the Edge TPU compiler documentation: + https://coral.ai/docs/edgetpu/compiler/ + + Notes: + This function is designed to work exclusively on Linux systems and requires the Edge TPU compiler to be installed. + If the compiler is not found, the function attempts to install it. + """ + cmd = "edgetpu_compiler --version" + help_url = "https://coral.ai/docs/edgetpu/compiler/" + assert platform.system() == "Linux", f"export only supported on Linux. See {help_url}" + if subprocess.run(f"{cmd} > /dev/null 2>&1", shell=True).returncode != 0: + LOGGER.info(f"\n{prefix} export requires Edge TPU compiler. Attempting install from {help_url}") + sudo = subprocess.run("sudo --version >/dev/null", shell=True).returncode == 0 # sudo installed on system + for c in ( + "curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -", + 'echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list', + "sudo apt-get update", + "sudo apt-get install edgetpu-compiler", + ): + subprocess.run(c if sudo else c.replace("sudo ", ""), shell=True, check=True) + ver = subprocess.run(cmd, shell=True, capture_output=True, check=True).stdout.decode().split()[-1] + + LOGGER.info(f"\n{prefix} starting export with Edge TPU compiler {ver}...") + f = str(file).replace(".pt", "-int8_edgetpu.tflite") # Edge TPU model + f_tfl = str(file).replace(".pt", "-int8.tflite") # TFLite model + + subprocess.run( + [ + "edgetpu_compiler", + "-s", + "-d", + "-k", + "10", + "--out_dir", + str(file.parent), + f_tfl, + ], + check=True, + ) + return f, None + + +@try_export +def export_tfjs(file, int8, prefix=colorstr("TensorFlow.js:")): + """Export a YOLOv3 model to TensorFlow.js format, with an optional quantization to uint8. + + Args: + file (Path): The path to the model file to be exported. + int8 (bool): Boolean flag to determine if the model should be quantized to uint8. + prefix (str): String prefix for logging, by default "TensorFlow.js". + + Returns: + (tuple[str, None]): The directory path where the TensorFlow.js model files are saved and `None` placeholder to + match the expected return type from 'try_export' decorator. + + Raises: + ImportError: If the required 'tensorflowjs' package is not installed. + + Examples: + ```python + from pathlib import Path + export_tfjs(file=Path("yolov5s.pt"), int8=False) + ``` + + The converted model can be used directly in JavaScript environments using the TensorFlow.js library. + + For usage in web applications: + - Clone the example repository: + ```bash + cd .. && git clone https://github.com/zldrobit/tfjs-yolov5-example.git && cd tfjs-yolov5-example + ``` + - Install dependencies: + ```bash + npm install + ``` + - Create a symbolic link to the exported web model: + ```bash + ln -s ../../yolov5/yolov5s_web_model public/yolov5s_web_model + ``` + - Start the example application: + ```bash + npm start + ``` + + Notes: + Ensure that you have TensorFlow.js installed in your environment. Install the package via: + ```bash + pip install tensorflowjs + ``` + + For more details on using the converted model: + Refer to the official TensorFlow.js documentation: https://www.tensorflow.org/js. + """ + check_requirements("tensorflowjs") + import tensorflowjs as tfjs + + LOGGER.info(f"\n{prefix} starting export with tensorflowjs {tfjs.__version__}...") + f = str(file).replace(".pt", "_web_model") # js dir + f_pb = file.with_suffix(".pb") # *.pb path + f_json = f"{f}/model.json" # *.json path + + args = [ + "tensorflowjs_converter", + "--input_format=tf_frozen_model", + "--quantize_uint8" if int8 else "", + "--output_node_names=Identity,Identity_1,Identity_2,Identity_3", + str(f_pb), + f, + ] + subprocess.run([arg for arg in args if arg], check=True) + + json = Path(f_json).read_text() + with open(f_json, "w") as j: # sort JSON Identity_* in ascending order + subst = re.sub( + r'{"outputs": {"Identity.?.?": {"name": "Identity.?.?"}, ' + r'"Identity.?.?": {"name": "Identity.?.?"}, ' + r'"Identity.?.?": {"name": "Identity.?.?"}, ' + r'"Identity.?.?": {"name": "Identity.?.?"}}}', + r'{"outputs": {"Identity": {"name": "Identity"}, ' + r'"Identity_1": {"name": "Identity_1"}, ' + r'"Identity_2": {"name": "Identity_2"}, ' + r'"Identity_3": {"name": "Identity_3"}}}', + json, + ) + j.write(subst) + return f, None + + +def add_tflite_metadata(file, metadata, num_outputs): + """Adds metadata to a TensorFlow Lite model to enhance its usability with `tflite_support`. + + Args: + file (str): Path to the TensorFlow Lite model file. + metadata (dict): Dictionary of metadata to add, including descriptions of inputs, outputs, and other relevant + info. + num_outputs (int): Number of output tensors in the model. + + Returns: + None + + Examples: + ```python + metadata = { + "input": {"description": "Input image tensor"}, + "output": [{"name": "scores", "description": "Detection scores"}], + } + add_tflite_metadata("/path/to/model.tflite", metadata, num_outputs=1) + ``` + + Notes: + Requires the `tflite_support` library for adding metadata to the TensorFlow Lite model. + Installation: `pip install tflite-support` + + ```python + from tflite_support import flatbuffers + from tflite_support import metadata as _metadata + from tflite_support import metadata_schema_py_generated as _metadata_fb + + tmp_file = Path("/tmp/meta.txt") + with open(tmp_file, "w") as meta_f: + meta_f.write(str(metadata)) + + model_meta = _metadata_fb.ModelMetadataT() + label_file = _metadata_fb.AssociatedFileT() + label_file.name = tmp_file.name + model_meta.associatedFiles = [label_file] + + subgraph = _metadata_fb.SubGraphMetadataT() + subgraph.inputTensorMetadata = [_metadata_fb.TensorMetadataT()] + subgraph.outputTensorMetadata = [_metadata_fb.TensorMetadataT()] * num_outputs + model_meta.subgraphMetadata = [subgraph] + + b = flatbuffers.Builder(0) + b.Finish(model_meta.Pack(b), _metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER) + metadata_buf = b.Output() + + populator = _metadata.MetadataPopulator.with_model_file(file) + populator.load_metadata_buffer(metadata_buf) + populator.load_associated_files([str(tmp_file)]) + populator.populate() + ``` + + This function is a helper to add metadata to a TFLite model, making it easier to interpret and process for tasks like + object detection or classification. It leverages `tflite_support` to load and attach the metadata directly to the + model file. + """ + with contextlib.suppress(ImportError): + # check_requirements('tflite_support') + from tflite_support import flatbuffers + from tflite_support import metadata as _metadata + from tflite_support import metadata_schema_py_generated as _metadata_fb + + tmp_file = Path("/tmp/meta.txt") + with open(tmp_file, "w") as meta_f: + meta_f.write(str(metadata)) + + model_meta = _metadata_fb.ModelMetadataT() + label_file = _metadata_fb.AssociatedFileT() + label_file.name = tmp_file.name + model_meta.associatedFiles = [label_file] + + subgraph = _metadata_fb.SubGraphMetadataT() + subgraph.inputTensorMetadata = [_metadata_fb.TensorMetadataT()] + subgraph.outputTensorMetadata = [_metadata_fb.TensorMetadataT()] * num_outputs + model_meta.subgraphMetadata = [subgraph] + + b = flatbuffers.Builder(0) + b.Finish(model_meta.Pack(b), _metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER) + metadata_buf = b.Output() + + populator = _metadata.MetadataPopulator.with_model_file(file) + populator.load_metadata_buffer(metadata_buf) + populator.load_associated_files([str(tmp_file)]) + populator.populate() + tmp_file.unlink() + + +def pipeline_coreml(model, im, file, names, y, prefix=colorstr("CoreML Pipeline:")): + """Processes and exports a YOLOv3 model into the CoreML model format, applying metadata and non-maximum suppression + (NMS). + + Args: + model (coremltools.models.MLModel): The pre-trained YOLOv3 CoreML model to be used for the pipeline. + im (torch.Tensor): Input image tensor in BCHW (Batch, Channel, Height, Width) format with a shape (B, 3, H, W). + file (pathlib.Path): Destination file path where the CoreML model will be saved. + names (dict): A dictionary that maps class indices to class names. + y (torch.Tensor): Output detection tensor from the YOLO model, containing predictions. + prefix (str): Prefix for logging messages, default is "CoreML Pipeline:". + + Returns: + pathlib.Path | None: The path to the saved CoreML model if successful, otherwise None. + + Examples: + ```python + from pathlib import Path + import torch + from coremltools.models import MLModel + + # Load example CoreML model + model = MLModel('path/to/pretrained/model.mlmodel') + + # Create example input tensor: B, C, H, W format + im = torch.randn(1, 3, 640, 640) + + # Define where the CoreML model will be saved + file = Path('path/to/save/model.mlmodel') + + # Define example class names + names = {0: 'class0', 1: 'class1'} + + # Dummy YOLO model output prediction having similar dimensions to y + y = torch.randn(1, 25200, 85) + + # Execute CoreML pipeline + pipeline_coreml(model, im, file, names, y) + ``` + + Notes: + - The function adds NMS to the CoreML model, supporting dynamic thresholds for IoU and confidence. + - Metadata fields are updated to include class names, thresholds, and additional information. + - The pipeline exports the final enhanced model into the specified file path in CoreML (`.mlmodel`) format. + - Ensure that `coremltools` is installed and properly configured in your environment. + - This function is designed to work primarily on macOS systems as CoreML is macOS-specific. + + References: + - `coremltools`: https://github.com/apple/coremltools + - YOLOv3: https://github.com/ultralytics/yolov5 + """ + import coremltools as ct + from PIL import Image + + print(f"{prefix} starting pipeline with coremltools {ct.__version__}...") + _batch_size, _ch, h, w = list(im.shape) # BCHW + t = time.time() + + # YOLOv3 Output shapes + spec = model.get_spec() + out0, out1 = iter(spec.description.output) + if platform.system() == "Darwin": + img = Image.new("RGB", (w, h)) # img(192 width, 320 height) + # img = torch.zeros((*opt.img_size, 3)).numpy() # img size(320,192,3) iDetection + out = model.predict({"image": img}) + out0_shape, out1_shape = out[out0.name].shape, out[out1.name].shape + else: # linux and windows can not run model.predict(), get sizes from pytorch output y + s = tuple(y[0].shape) + out0_shape, out1_shape = (s[1], s[2] - 5), (s[1], 4) # (3780, 80), (3780, 4) + + # Checks + nx, ny = spec.description.input[0].type.imageType.width, spec.description.input[0].type.imageType.height + _na, nc = out0_shape + # na, nc = out0.type.multiArrayType.shape # number anchors, classes + assert len(names) == nc, f"{len(names)} names found for nc={nc}" # check + + # Define output shapes (missing) + out0.type.multiArrayType.shape[:] = out0_shape # (3780, 80) + out1.type.multiArrayType.shape[:] = out1_shape # (3780, 4) + # spec.neuralNetwork.preprocessing[0].featureName = '0' + + # Flexible input shapes + # from coremltools.models.neural_network import flexible_shape_utils + # s = [] # shapes + # s.append(flexible_shape_utils.NeuralNetworkImageSize(320, 192)) + # s.append(flexible_shape_utils.NeuralNetworkImageSize(640, 384)) # (height, width) + # flexible_shape_utils.add_enumerated_image_sizes(spec, feature_name='image', sizes=s) + # r = flexible_shape_utils.NeuralNetworkImageSizeRange() # shape ranges + # r.add_height_range((192, 640)) + # r.add_width_range((192, 640)) + # flexible_shape_utils.update_image_size_range(spec, feature_name='image', size_range=r) + + # Print + print(spec.description) + + # Model from spec + model = ct.models.MLModel(spec) + + # 3. Create NMS protobuf + nms_spec = ct.proto.Model_pb2.Model() + nms_spec.specificationVersion = 5 + for i in range(2): + decoder_output = model._spec.description.output[i].SerializeToString() + nms_spec.description.input.add() + nms_spec.description.input[i].ParseFromString(decoder_output) + nms_spec.description.output.add() + nms_spec.description.output[i].ParseFromString(decoder_output) + + nms_spec.description.output[0].name = "confidence" + nms_spec.description.output[1].name = "coordinates" + + output_sizes = [nc, 4] + for i in range(2): + ma_type = nms_spec.description.output[i].type.multiArrayType + ma_type.shapeRange.sizeRanges.add() + ma_type.shapeRange.sizeRanges[0].lowerBound = 0 + ma_type.shapeRange.sizeRanges[0].upperBound = -1 + ma_type.shapeRange.sizeRanges.add() + ma_type.shapeRange.sizeRanges[1].lowerBound = output_sizes[i] + ma_type.shapeRange.sizeRanges[1].upperBound = output_sizes[i] + del ma_type.shape[:] + + nms = nms_spec.nonMaximumSuppression + nms.confidenceInputFeatureName = out0.name # 1x507x80 + nms.coordinatesInputFeatureName = out1.name # 1x507x4 + nms.confidenceOutputFeatureName = "confidence" + nms.coordinatesOutputFeatureName = "coordinates" + nms.iouThresholdInputFeatureName = "iouThreshold" + nms.confidenceThresholdInputFeatureName = "confidenceThreshold" + nms.iouThreshold = 0.45 + nms.confidenceThreshold = 0.25 + nms.pickTop.perClass = True + nms.stringClassLabels.vector.extend(names.values()) + nms_model = ct.models.MLModel(nms_spec) + + # 4. Pipeline models together + pipeline = ct.models.pipeline.Pipeline( + input_features=[ + ("image", ct.models.datatypes.Array(3, ny, nx)), + ("iouThreshold", ct.models.datatypes.Double()), + ("confidenceThreshold", ct.models.datatypes.Double()), + ], + output_features=["confidence", "coordinates"], + ) + pipeline.add_model(model) + pipeline.add_model(nms_model) + + # Correct datatypes + pipeline.spec.description.input[0].ParseFromString(model._spec.description.input[0].SerializeToString()) + pipeline.spec.description.output[0].ParseFromString(nms_model._spec.description.output[0].SerializeToString()) + pipeline.spec.description.output[1].ParseFromString(nms_model._spec.description.output[1].SerializeToString()) + + # Update metadata + pipeline.spec.specificationVersion = 5 + pipeline.spec.description.metadata.versionString = "https://github.com/ultralytics/yolov5" + pipeline.spec.description.metadata.shortDescription = "https://github.com/ultralytics/yolov5" + pipeline.spec.description.metadata.author = "glenn.jocher@ultralytics.com" + pipeline.spec.description.metadata.license = "https://github.com/ultralytics/yolov5/blob/master/LICENSE" + pipeline.spec.description.metadata.userDefined.update( + { + "classes": ",".join(names.values()), + "iou_threshold": str(nms.iouThreshold), + "confidence_threshold": str(nms.confidenceThreshold), + } + ) + + # Save the model + f = file.with_suffix(".mlmodel") # filename + model = ct.models.MLModel(pipeline.spec) + model.input_description["image"] = "Input image" + model.input_description["iouThreshold"] = f"(optional) IOU Threshold override (default: {nms.iouThreshold})" + model.input_description["confidenceThreshold"] = ( + f"(optional) Confidence Threshold override (default: {nms.confidenceThreshold})" + ) + model.output_description["confidence"] = 'Boxes × Class confidence (see user-defined metadata "classes")' + model.output_description["coordinates"] = "Boxes × [x, y, width, height] (relative to image size)" + model.save(f) # pipelined + print(f"{prefix} pipeline success ({time.time() - t:.2f}s), saved as {f} ({file_size(f):.1f} MB)") + + +@smart_inference_mode() +def run( + data=ROOT / "data/coco128.yaml", # 'dataset.yaml path' + weights=ROOT / "yolov5s.pt", # weights path + imgsz=(640, 640), # image (height, width) + batch_size=1, # batch size + device="cpu", # cuda device, i.e. 0 or 0,1,2,3 or cpu + include=("torchscript", "onnx"), # include formats + half=False, # FP16 half-precision export + inplace=False, # set YOLOv3 Detect() inplace=True + keras=False, # use Keras + optimize=False, # TorchScript: optimize for mobile + int8=False, # CoreML/TF INT8 quantization + dynamic=False, # ONNX/TF/TensorRT: dynamic axes + simplify=False, # ONNX: simplify model + opset=12, # ONNX: opset version + verbose=False, # TensorRT: verbose log + workspace=4, # TensorRT: workspace size (GB) + nms=False, # TF: add NMS to model + agnostic_nms=False, # TF: add agnostic NMS to model + topk_per_class=100, # TF.js NMS: topk per class to keep + topk_all=100, # TF.js NMS: topk for all classes to keep + iou_thres=0.45, # TF.js NMS: IoU threshold + conf_thres=0.25, # TF.js NMS: confidence threshold +): + """Export a PyTorch model to various formats like ONNX, CoreML, and TensorRT. + + Args: + data (str | Path): Path to dataset configuration file. + weights (str | Path): Path to model weights file in PyTorch format. + imgsz (tuple[int, int]): Tuple specifying image height and width for input dimensions. + batch_size (int): Batch size for model inference. + device (str): Device to use for inference (e.g., '0', '0,1,2,3', 'cpu'). + include (tuple[str]): Formats to include for model export (e.g., 'torchscript', 'onnx', etc.). + half (bool): Whether to export model with FP16 precision. + inplace (bool): Set YOLOv3 Detect module inplace option to True. + keras (bool): Save Keras model when exporting TensorFlow SavedModel format. + optimize (bool): Optimize the TorchScript model for mobile inference. + int8 (bool): Apply INT8 quantization for CoreML/TF models. + dynamic (bool): Enable dynamic axes for ONNX/TF/TensorRT models. + simplify (bool): Simplify the ONNX model after export. + opset (int): ONNX opset version. + verbose (bool): Enable verbose logging for TensorRT engine export. + workspace (int): Workspace size in GB for TensorRT engine. + nms (bool): Enable Non-Maximum Suppression (NMS) in TensorFlow models. + agnostic_nms (bool): Enable class-agnostic NMS in TensorFlow models. + topk_per_class (int): Top-K per class to keep in TensorFlow JSON model. + topk_all (int): Top-K for all classes to keep in TensorFlow JSON model. + iou_thres (float): IOU threshold for TensorFlow JSON model. + conf_thres (float): Confidence threshold for TensorFlow JSON model. + + Returns: + None + + Examples: + ```python + run( + data='data/coco128.yaml', + weights='yolov5s.pt', + imgsz=(640, 640), + batch_size=1, + device='cpu', + include=('torchscript', 'onnx'), + half=False, + dynamic=True, + opset=12 + ) + ``` + + Notes: + - Requires various packages installed for different export formats, e.g., `onnx`, `coremltools`, etc. + - Some formats have additional dependencies (e.g., TensorFlow, TensorRT, etc.) + """ + t = time.time() + include = [x.lower() for x in include] # to lowercase + fmts = tuple(export_formats()["Argument"][1:]) # --include arguments + flags = [x in include for x in fmts] + assert sum(flags) == len(include), f"ERROR: Invalid --include {include}, valid --include arguments are {fmts}" + jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle = flags # export booleans + file = Path(url2file(weights) if str(weights).startswith(("http:/", "https:/")) else weights) # PyTorch weights + + # Load PyTorch model + device = select_device(device) + if half: + assert device.type != "cpu" or coreml, "--half only compatible with GPU export, i.e. use --device 0" + assert not dynamic, "--half not compatible with --dynamic, i.e. use either --half or --dynamic but not both" + model = attempt_load(weights, device=device, inplace=True, fuse=True) # load FP32 model + + # Checks + imgsz *= 2 if len(imgsz) == 1 else 1 # expand + if optimize: + assert device.type == "cpu", "--optimize not compatible with cuda devices, i.e. use --device cpu" + + # Input + gs = int(max(model.stride)) # grid size (max stride) + imgsz = [check_img_size(x, gs) for x in imgsz] # verify img_size are gs-multiples + im = torch.zeros(batch_size, 3, *imgsz).to(device) # image size(1,3,320,192) BCHW iDetection + + # Update model + model.eval() + for k, m in model.named_modules(): + if isinstance(m, Detect): + m.inplace = inplace + m.dynamic = dynamic + m.export = True + + for _ in range(2): + y = model(im) # dry runs + if half and not coreml: + im, model = im.half(), model.half() # to FP16 + shape = tuple((y[0] if isinstance(y, tuple) else y).shape) # model output shape + metadata = {"stride": int(max(model.stride)), "names": model.names} # model metadata + LOGGER.info(f"\n{colorstr('PyTorch:')} starting from {file} with output shape {shape} ({file_size(file):.1f} MB)") + + # Exports + f = [""] * len(fmts) # exported filenames + warnings.filterwarnings(action="ignore", category=torch.jit.TracerWarning) # suppress TracerWarning + if jit: # TorchScript + f[0], _ = export_torchscript(model, im, file, optimize) + if engine: # TensorRT required before ONNX + f[1], _ = export_engine(model, im, file, half, dynamic, simplify, workspace, verbose) + if onnx or xml: # OpenVINO requires ONNX + f[2], _ = export_onnx(model, im, file, opset, dynamic, simplify) + if xml: # OpenVINO + f[3], _ = export_openvino(file, metadata, half, int8, data) + if coreml: # CoreML + f[4], ct_model = export_coreml(model, im, file, int8, half, nms) + if nms: + pipeline_coreml(ct_model, im, file, model.names, y) + if any((saved_model, pb, tflite, edgetpu, tfjs)): # TensorFlow formats + assert not tflite or not tfjs, "TFLite and TF.js models must be exported separately, please pass only one type." + assert not isinstance(model, ClassificationModel), "ClassificationModel export to TF formats not yet supported." + f[5], s_model = export_saved_model( + model.cpu(), + im, + file, + dynamic, + tf_nms=nms or agnostic_nms or tfjs, + agnostic_nms=agnostic_nms or tfjs, + topk_per_class=topk_per_class, + topk_all=topk_all, + iou_thres=iou_thres, + conf_thres=conf_thres, + keras=keras, + ) + if pb or tfjs: # pb prerequisite to tfjs + f[6], _ = export_pb(s_model, file) + if tflite or edgetpu: + f[7], _ = export_tflite(s_model, im, file, int8 or edgetpu, data=data, nms=nms, agnostic_nms=agnostic_nms) + if edgetpu: + f[8], _ = export_edgetpu(file) + add_tflite_metadata(f[8] or f[7], metadata, num_outputs=len(s_model.outputs)) + if tfjs: + f[9], _ = export_tfjs(file, int8) + if paddle: # PaddlePaddle + f[10], _ = export_paddle(model, im, file, metadata) + + # Finish + f = [str(x) for x in f if x] # filter out '' and None + if any(f): + cls, det, seg = (isinstance(model, x) for x in (ClassificationModel, DetectionModel, SegmentationModel)) # type + det &= not seg # segmentation models inherit from SegmentationModel(DetectionModel) + dir = Path("segment" if seg else "classify" if cls else "") + h = "--half" if half else "" # --half FP16 inference arg + s = ( + "# WARNING ⚠️ ClassificationModel not yet supported for PyTorch Hub AutoShape inference" + if cls + else "# WARNING ⚠️ SegmentationModel not yet supported for PyTorch Hub AutoShape inference" + if seg + else "" + ) + LOGGER.info( + f"\nExport complete ({time.time() - t:.1f}s)" + f"\nResults saved to {colorstr('bold', file.parent.resolve())}" + f"\nDetect: python {dir / ('detect.py' if det else 'predict.py')} --weights {f[-1]} {h}" + f"\nValidate: python {dir / 'val.py'} --weights {f[-1]} {h}" + f"\nPyTorch Hub: model = torch.hub.load('ultralytics/yolov5', 'custom', '{f[-1]}') {s}" + f"\nVisualize: https://netron.app" + ) + return f # return list of exported files/dirs + + +def parse_opt(known=False): + """Parse command-line arguments for model export configuration. + + Args: + known (bool): If True, parse only known arguments and ignore others. Default is False. + + Returns: + argparse.Namespace: Namespace object containing export configuration parameters. + + Examples: + ```python + from ultralytics.export import parse_opt + + options = parse_opt(known=True) + print(options) + ``` + + Notes: + This function leverages `argparse` to handle command-line arguments for various model export configurations, allowing + users to specify export formats, model parameters, and optimization settings. + """ + parser = argparse.ArgumentParser() + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path") + parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov3-tiny.pt", help="model.pt path(s)") + parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[640, 640], help="image (h, w)") + parser.add_argument("--batch-size", type=int, default=1, help="batch size") + parser.add_argument("--device", default="cpu", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--half", action="store_true", help="FP16 half-precision export") + parser.add_argument("--inplace", action="store_true", help="set YOLOv3 Detect() inplace=True") + parser.add_argument("--keras", action="store_true", help="TF: use Keras") + parser.add_argument("--optimize", action="store_true", help="TorchScript: optimize for mobile") + parser.add_argument("--int8", action="store_true", help="CoreML/TF/OpenVINO INT8 quantization") + parser.add_argument("--dynamic", action="store_true", help="ONNX/TF/TensorRT: dynamic axes") + parser.add_argument("--simplify", action="store_true", help="ONNX: simplify model") + parser.add_argument("--opset", type=int, default=17, help="ONNX: opset version") + parser.add_argument("--verbose", action="store_true", help="TensorRT: verbose log") + parser.add_argument("--workspace", type=int, default=4, help="TensorRT: workspace size (GB)") + parser.add_argument("--nms", action="store_true", help="TF: add NMS to model") + parser.add_argument("--agnostic-nms", action="store_true", help="TF: add agnostic NMS to model") + parser.add_argument("--topk-per-class", type=int, default=100, help="TF.js NMS: topk per class to keep") + parser.add_argument("--topk-all", type=int, default=100, help="TF.js NMS: topk for all classes to keep") + parser.add_argument("--iou-thres", type=float, default=0.45, help="TF.js NMS: IoU threshold") + parser.add_argument("--conf-thres", type=float, default=0.25, help="TF.js NMS: confidence threshold") + parser.add_argument( + "--include", + nargs="+", + default=["torchscript"], + help="torchscript, onnx, openvino, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle", + ) + opt = parser.parse_known_args()[0] if known else parser.parse_args() + print_args(vars(opt)) + return opt + + +def main(opt): + """Run(**vars(opt)).""" + for opt.weights in opt.weights if isinstance(opt.weights, list) else [opt.weights]: + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/hubconf.py b/hubconf.py new file mode 100644 index 0000000000..f2d02faaa5 --- /dev/null +++ b/hubconf.py @@ -0,0 +1,458 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +PyTorch Hub models https://pytorch.org/hub/ultralytics_yolov5. + +Usage: + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # official model + model = torch.hub.load('ultralytics/yolov5:master', 'yolov5s') # from branch + model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5s.pt') # custom/local model + model = torch.hub.load('.', 'custom', 'yolov5s.pt', source='local') # local repo +""" + +from ultralytics.utils.patches import torch_load + + +def _create(name, pretrained=True, channels=3, classes=80, autoshape=True, verbose=True, device=None): + """Creates or loads a YOLOv3 model with specified configurations and optional pretrained weights. + + Args: + name (str): Model name such as 'yolov5s' or a path to a model checkpoint file, e.g., 'path/to/best.pt'. + pretrained (bool): Whether to load pretrained weights into the model. Default is True. + channels (int): Number of input channels. Default is 3. + classes (int): Number of model classes. Default is 80. + autoshape (bool): Whether to apply the YOLOv3 .autoshape() wrapper to the model for handling multiple input + types. Default is True. + verbose (bool): If True, print all information to the screen. Default is True. + device (str | torch.device | None): Device to use for model parameters ('cpu', 'cuda', etc.). If None, defaults + to the best available device. + + Returns: + torch.nn.Module: YOLOv3 model loaded with or without pretrained weights. + + Raises: + Exception: If an error occurs while loading the model, returns an error message with a helpful URL: + "https: //docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading". + + Examples: + ```python + import torch + model = _create('yolov5s') + ``` + """ + from pathlib import Path + + from models.common import AutoShape, DetectMultiBackend + from models.experimental import attempt_load + from models.yolo import ClassificationModel, DetectionModel, SegmentationModel + from utils.downloads import attempt_download + from utils.general import LOGGER, ROOT, check_requirements, intersect_dicts, logging + from utils.torch_utils import select_device + + if not verbose: + LOGGER.setLevel(logging.WARNING) + check_requirements(ROOT / "requirements.txt", exclude=("opencv-python", "tensorboard", "thop")) + name = Path(name) + path = name.with_suffix(".pt") if name.suffix == "" and not name.is_dir() else name # checkpoint path + try: + device = select_device(device) + if pretrained and channels == 3 and classes == 80: + try: + model = DetectMultiBackend(path, device=device, fuse=autoshape) # detection model + if autoshape: + if model.pt and isinstance(model.model, ClassificationModel): + LOGGER.warning( + "WARNING ⚠️ YOLOv3 ClassificationModel is not yet AutoShape compatible. " + "You must pass torch tensors in BCHW to this model, i.e. shape(1,3,224,224)." + ) + elif model.pt and isinstance(model.model, SegmentationModel): + LOGGER.warning( + "WARNING ⚠️ YOLOv3 SegmentationModel is not yet AutoShape compatible. " + "You will not be able to run inference with this model." + ) + else: + model = AutoShape(model) # for file/URI/PIL/cv2/np inputs and NMS + except Exception: + model = attempt_load(path, device=device, fuse=False) # arbitrary model + else: + cfg = next(iter((Path(__file__).parent / "models").rglob(f"{path.stem}.yaml"))) # model.yaml path + model = DetectionModel(cfg, channels, classes) # create model + if pretrained: + ckpt = torch_load(attempt_download(path), map_location=device) # load + csd = ckpt["model"].float().state_dict() # checkpoint state_dict as FP32 + csd = intersect_dicts(csd, model.state_dict(), exclude=["anchors"]) # intersect + model.load_state_dict(csd, strict=False) # load + if len(ckpt["model"].names) == classes: + model.names = ckpt["model"].names # set class names attribute + if not verbose: + LOGGER.setLevel(logging.INFO) # reset to default + return model.to(device) + + except Exception as e: + help_url = "https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading" + s = f"{e}. Cache may be out of date, try `force_reload=True` or see {help_url} for help." + raise Exception(s) from e + + +def custom(path="path/to/model.pt", autoshape=True, _verbose=True, device=None): + """Loads a custom or local YOLOv3 model from a specified path, with options for autoshaping and device assignment. + + Args: + path (str): Path to the model file. Supports both local and URL paths. + autoshape (bool): If True, applies the YOLOv3 `.autoshape()` wrapper to allow for various input formats. Default + is True. + _verbose (bool): If True, outputs detailed information. Otherwise, limits verbosity. Default is True. + device (str | torch.device | None): Device to load the model on. Default is None, which uses the available GPU + if possible. + + Returns: + (torch.nn.Module): The loaded YOLOv3 model, either with or without autoshaping applied. + + Raises: + Exception: If the model loading fails due to invalid path or incompatible model state, with helpful suggestions + including a reference to the troubleshooting page: + https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'custom', 'path/to/best.pt') + model = torch.hub.load('ultralytics/yolov5', 'custom', 'path/to/best.pt', autoshape=False, device='cpu') + ``` + """ + return _create(path, autoshape=autoshape, verbose=_verbose, device=device) + + +def yolov5n(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Instantiates a YOLOv5n model with optional pretrained weights, configurable input channels, number of classes, + autoshaping, and device selection. + + Args: + pretrained (bool): If True, loads pretrained weights into the model. Defaults to True. + channels (int): Number of input channels. Defaults to 3. + classes (int): Number of detection classes. Defaults to 80. + autoshape (bool): If True, applies YOLOv5 .autoshape() wrapper to the model for various input formats like + file/URI/PIL/cv2/np and adds non-maximum suppression (NMS). Defaults to True. + _verbose (bool): If True, prints detailed information to the screen. Defaults to True. + device (str | torch.device | None): Device to use for model computations (e.g., 'cpu', 'cuda'). If None, the + best available device is automatically selected. Defaults to None. + + Returns: + torch.nn.Module: The instantiated YOLOv5n model. + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5n') # using official model + model = torch.hub.load('ultralytics/yolov5:master', 'yolov5n') # from specific branch + model = torch.hub.load('ultralytics/yolov5', 'custom', 'yolov5n.pt') # using custom/local model + model = torch.hub.load('.', 'custom', 'yolov5n.pt', source='local') # from local repository + ``` + + Notes: + PyTorch Hub models can be explored at https://pytorch.org/hub/ultralytics_yolov5. This allows easy model loading and usage. + """ + return _create("yolov5n", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5s(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Load the YOLOv5s model with customizable options for pretrained weights, input channels, number of classes, + autoshape functionality, and device selection. + + Args: + pretrained (bool, optional): If True, loads model with pretrained weights. Default is True. + channels (int, optional): Specifies the number of input channels. Default is 3. + classes (int, optional): Defines the number of model classes. Default is 80. + autoshape (bool, optional): Applies YOLOv5 .autoshape() wrapper to the model for enhanced usability. Default is + True. + _verbose (bool, optional): If True, prints detailed information during model loading. Default is True. + device (str | torch.device | None, optional): Specifies the device to load the model on. Accepts 'cpu', 'cuda', + or torch.device. Default is None, which automatically selects the best available option. + + Returns: + torch.nn.Module: The initialized YOLOv5s model loaded with the specified options. + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True) + ``` + + For more information, refer to [PyTorch Hub models](https://pytorch.org/hub/ultralytics_yolov5/). + """ + return _create("yolov5s", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5m(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Loads the YOLOv5m model with options for pretrained weights, input channels, number of classes, autoshape + functionality, and device selection. + + Args: + pretrained (bool, optional): If True, loads pretrained weights into the model. Default is True. + channels (int, optional): Number of input channels for the model. Default is 3. + classes (int, optional): Number of model classes. Default is 80. + autoshape (bool, optional): If True, applies the YOLOv5 .autoshape() wrapper for handling multiple input types + and NMS. Default is True. + _verbose (bool, optional): If True, prints detailed information during model loading. Default is True. + device (str | torch.device | None, optional): Device for model computations (e.g., 'cpu', 'cuda'). Automatically + selects the best available device if None. Default is None. + + Returns: + torch.nn.Module: The instantiated YOLOv5m model. + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5m', pretrained=True) + ``` + """ + return _create("yolov5m", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5l(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Load the YOLOv5l model with customizable options for pretrained weights, input channels, number of classes, + autoshape functionality, and device selection. + + Args: + pretrained (bool, optional): If True, load model with pretrained weights. Default is True. + channels (int, optional): Specifies the number of input channels. Default is 3. + classes (int, optional): Defines the number of model classes. Default is 80. + autoshape (bool, optional): Applies the YOLOv5 .autoshape() wrapper to the model for enhanced usability. Default + is True. + _verbose (bool, optional): If True, prints detailed information during model loading. Default is True. + device (str | torch.device | None, optional): Specifies the device to load the model on. Accepts 'cpu', 'cuda', + or torch.device. Default is None, which automatically selects the best available option. + + Returns: + torch.nn.Module: The initialized YOLOv5l model loaded with the specified options. + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5l', pretrained=True) + ``` + + For more information, refer to [PyTorch Hub models](https://pytorch.org/hub/ultralytics_yolov5/). + """ + return _create("yolov5l", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5x(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Load the YOLOv5x model with options for pretrained weights, number of input channels, classes, autoshaping, and + device selection. + + Args: + pretrained (bool, optional): If True, loads the model with pretrained weights. Defaults to True. + channels (int, optional): Number of input channels. Defaults to 3. + classes (int, optional): Number of detection classes. Defaults to 80. + autoshape (bool, optional): If True, applies the YOLOv5 .autoshape() wrapper, enabling various input formats and + non-maximum suppression (NMS). Defaults to True. + _verbose (bool, optional): If True, prints detailed information during model loading. Defaults to True. + device (str | torch.device | None, optional): Device to use for model parameters (e.g., 'cpu', 'cuda'). Defaults + to None, selecting the best available device automatically. + + Returns: + torch.nn.Module: The YOLOv5x model loaded with the specified configuration. + + Examples: + ```python + import torch + + # Load YOLOv5x model with default settings + model = torch.hub.load('ultralytics/yolov5', 'yolov5x') + + # Load YOLOv5x model with custom device + model = torch.hub.load('ultralytics/yolov5', 'yolov5x', device='cuda:0') + ``` + + For more details, refer to [PyTorch Hub models](https://pytorch.org/hub/ultralytics_yolov5/). + """ + return _create("yolov5x", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5n6(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Loads the YOLOv5n6 model with options for pretrained weights, input channels, classes, autoshaping, verbosity, + and device assignment. + + Args: + pretrained (bool, optional): If True, loads pretrained weights into the model. Default is True. + channels (int, optional): Number of input channels. Default is 3. + classes (int, optional): Number of model classes. Default is 80. + autoshape (bool, optional): If True, applies the YOLOv3 .autoshape() wrapper to the model. Default is True. + _verbose (bool, optional): If True, prints all information to the screen. Default is True. + device (str | torch.device | None, optional): Device to use for model parameters, e.g., 'cpu', '0', or + torch.device. Default is None. + + Returns: + torch.nn.Module: YOLOv5n6 model loaded on the specified device and configured as per the provided options. + + Examples: + ```python + model = yolov5n6(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device='cuda') + ``` + + Notes: + For more information on PyTorch Hub models, refer to: https://pytorch.org/hub/ultralytics_yolov5 + """ + return _create("yolov5n6", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5s6(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Loads the YOLOv5s6 model with options for weights, channels, classes, autoshaping, and device selection. + + Args: + pretrained (bool, optional): If True, loads pretrained weights into the model. Defaults to True. + channels (int, optional): Number of input channels. Defaults to 3. + classes (int, optional): Number of model classes. Defaults to 80. + autoshape (bool, optional): Apply YOLOv5 .autoshape() wrapper to the model. Defaults to True. + _verbose (bool, optional): If True, prints detailed information to the screen. Defaults to True. + device (str | torch.device | None, optional): Device to use for model parameters, e.g., 'cpu', 'cuda:0'. If + None, it will select the appropriate device automatically. Defaults to None. + + Returns: + torch.nn.Module: The YOLOv5s6 model, ready for inference or further training. + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5s6', pretrained=True, channels=3, classes=80) + model.eval() # Set the model to evaluation mode + ``` + + For more details, see the official documentation at: + https://github.com/ultralytics/yolov5 + """ + return _create("yolov5s6", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5m6(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Loads YOLOv5m6 model with options for pretrained weights, input channels, number of classes, autoshaping, and + device selection. + + Args: + pretrained (bool): Whether to load pretrained weights into the model. Default is True. + channels (int): Number of input channels. Default is 3. + classes (int): Number of model classes. Default is 80. + autoshape (bool): Whether to apply YOLOv5 .autoshape() wrapper to the model. Default is True. + _verbose (bool): Whether to print all information to the screen. Default is True. + device (str | torch.device | None): Device to use for model parameters, e.g., 'cpu', 'cuda', 'mps', or torch + device. Default is None. + + Returns: + YOLOv5m6 model (torch.nn.Module): The instantiated YOLOv5m6 model with specified options. + + Examples: + ```python + import torch + + # Load YOLOv5m6 model with default settings + model = torch.hub.load('ultralytics/yolov5', 'yolov5m6') + + # Load custom YOLOv5m6 model from a local path with specific options + model = torch.hub.load('.', 'yolov5m6', pretrained=False, channels=1, classes=10, device='cuda') + ``` + + Notes: + For more detailed documentation, visit https://github.com/ultralytics/yolov5 + """ + return _create("yolov5m6", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5l6(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Loads the YOLOv5l6 model with options for pretrained weights, input channels, the number of classes, autoshaping, + and device selection. + + Args: + pretrained (bool, optional): If True, loads pretrained weights into the model. Default is True. + channels (int, optional): Number of input channels. Default is 3. + classes (int, optional): Number of model classes. Default is 80. + autoshape (bool, optional): If True, applies the YOLOv5 .autoshape() wrapper to the model for automatic shape + inference. Default is True. + _verbose (bool, optional): If True, prints all information to the screen. Default is True. + device (str | torch.device | None, optional): Device to use for the model parameters, e.g., 'cpu', 'cuda', or + a specific GPU like 'cuda:0'. Default is None, which means the best available device will be selected + automatically. + + Returns: + yolov5.models.yolo.DetectionModel: YOLOv5l6 model initialized with defined custom configurations. + + Examples: + ```python + import torch + model = torch.hub.load('ultralytics/yolov5', 'yolov5l6') # Load YOLOv5l6 model + ``` + + Notes: + For more details, visit the [Ultralytics YOLOv5 GitHub repository](https://github.com/ultralytics/yolov5). + """ + return _create("yolov5l6", pretrained, channels, classes, autoshape, _verbose, device) + + +def yolov5x6(pretrained=True, channels=3, classes=80, autoshape=True, _verbose=True, device=None): + """Loads the YOLOv5x6 model, allowing customization for pretrained weights, input channels, and model classes. + + Args: + pretrained (bool): If True, loads the model with pretrained weights. Default is True. + channels (int): Number of input channels. Default is 3. + classes (int): Number of output classes for the model. Default is 80. + autoshape (bool): If True, applies the .autoshape() wrapper for inference on diverse input formats. Default is + True. + _verbose (bool): If True, prints detailed information during model loading. Default is True. + device (str | torch.device | None): Specifies the device to load the model on ('cpu', 'cuda', etc.). Default is + None, which uses the best available device. + + Returns: + torch.nn.Module: The YOLOv5x6 model with the specified configurations. + + Examples: + ```python + from ultralytics import yolov5x6 + + # Load the model with default settings + model = yolov5x6() + + # Load the model with custom configurations + model = yolov5x6(pretrained=False, channels=1, classes=10, autoshape=False, device='cuda') + ``` + + Notes: + For more information, refer to the YOLOv5 repository: https://github.com/ultralytics/yolov5 + """ + return _create("yolov5x6", pretrained, channels, classes, autoshape, _verbose, device) + + +if __name__ == "__main__": + import argparse + from pathlib import Path + + import numpy as np + from PIL import Image + + from utils.general import cv2, print_args + + # Argparser + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=str, default="yolov5s", help="model name") + opt = parser.parse_args() + print_args(vars(opt)) + + # Model + model = _create(name=opt.model, pretrained=True, channels=3, classes=80, autoshape=True, verbose=True) + # model = custom(path='path/to/model.pt') # custom + + # Images + imgs = [ + "data/images/zidane.jpg", # filename + Path("data/images/zidane.jpg"), # Path + "https://ultralytics.com/images/zidane.jpg", # URI + cv2.imread("data/images/bus.jpg")[:, :, ::-1], # OpenCV + Image.open("data/images/bus.jpg"), # PIL + np.zeros((320, 640, 3)), + ] # numpy + + # Inference + results = model(imgs, size=320) # batched inference + + # Results + results.print() + results.save() diff --git a/models.py b/models.py deleted file mode 100755 index 6401ab6cc7..0000000000 --- a/models.py +++ /dev/null @@ -1,463 +0,0 @@ -import torch.nn.functional as F - -from utils.google_utils import * -from utils.parse_config import * -from utils.utils import * - -ONNX_EXPORT = False - - -def create_modules(module_defs, img_size, arc): - # Constructs module list of layer blocks from module configuration in module_defs - - hyperparams = module_defs.pop(0) - output_filters = [int(hyperparams['channels'])] - module_list = nn.ModuleList() - routs = [] # list of layers which rout to deeper layes - yolo_index = -1 - - for i, mdef in enumerate(module_defs): - modules = nn.Sequential() - - if mdef['type'] == 'convolutional': - bn = int(mdef['batch_normalize']) - filters = int(mdef['filters']) - kernel_size = int(mdef['size']) - stride = int(mdef['stride']) if 'stride' in mdef else (int(mdef['stride_y']), int(mdef['stride_x'])) - pad = (kernel_size - 1) // 2 if int(mdef['pad']) else 0 - modules.add_module('Conv2d', nn.Conv2d(in_channels=output_filters[-1], - out_channels=filters, - kernel_size=kernel_size, - stride=stride, - padding=pad, - bias=not bn)) - if bn: - modules.add_module('BatchNorm2d', nn.BatchNorm2d(filters, momentum=0.1)) - if mdef['activation'] == 'leaky': # TODO: activation study https://github.com/ultralytics/yolov3/issues/441 - modules.add_module('activation', nn.LeakyReLU(0.1, inplace=True)) - # modules.add_module('activation', nn.PReLU(num_parameters=1, init=0.10)) - elif mdef['activation'] == 'swish': - modules.add_module('activation', Swish()) - - elif mdef['type'] == 'maxpool': - kernel_size = int(mdef['size']) - stride = int(mdef['stride']) - maxpool = nn.MaxPool2d(kernel_size=kernel_size, stride=stride, padding=int((kernel_size - 1) // 2)) - if kernel_size == 2 and stride == 1: # yolov3-tiny - modules.add_module('ZeroPad2d', nn.ZeroPad2d((0, 1, 0, 1))) - modules.add_module('MaxPool2d', maxpool) - else: - modules = maxpool - - elif mdef['type'] == 'upsample': - modules = nn.Upsample(scale_factor=int(mdef['stride']), mode='nearest') - - elif mdef['type'] == 'route': # nn.Sequential() placeholder for 'route' layer - layers = [int(x) for x in mdef['layers'].split(',')] - filters = sum([output_filters[i + 1 if i > 0 else i] for i in layers]) - routs.extend([l if l > 0 else l + i for l in layers]) - # if mdef[i+1]['type'] == 'reorg3d': - # modules = nn.Upsample(scale_factor=1/float(mdef[i+1]['stride']), mode='nearest') # reorg3d - - elif mdef['type'] == 'shortcut': # nn.Sequential() placeholder for 'shortcut' layer - filters = output_filters[int(mdef['from'])] - layer = int(mdef['from']) - routs.extend([i + layer if layer < 0 else layer]) - - elif mdef['type'] == 'reorg3d': # yolov3-spp-pan-scale - # torch.Size([16, 128, 104, 104]) - # torch.Size([16, 64, 208, 208]) <-- # stride 2 interpolate dimensions 2 and 3 to cat with prior layer - pass - - elif mdef['type'] == 'yolo': - yolo_index += 1 - mask = [int(x) for x in mdef['mask'].split(',')] # anchor mask - modules = YOLOLayer(anchors=mdef['anchors'][mask], # anchor list - nc=int(mdef['classes']), # number of classes - img_size=img_size, # (416, 416) - yolo_index=yolo_index, # 0, 1 or 2 - arc=arc) # yolo architecture - - # Initialize preceding Conv2d() bias (https://arxiv.org/pdf/1708.02002.pdf section 3.3) - try: - if arc == 'defaultpw' or arc == 'Fdefaultpw': # default with positive weights - b = [-4, -3.6] # obj, cls - elif arc == 'default': # default no pw (40 cls, 80 obj) - b = [-5.5, -4.0] - elif arc == 'uBCE': # unified BCE (80 classes) - b = [0, -8.5] - elif arc == 'uCE': # unified CE (1 background + 80 classes) - b = [10, -0.1] - elif arc == 'Fdefault': # Focal default no pw (28 cls, 21 obj, no pw) - b = [-2.1, -1.8] - elif arc == 'uFBCE' or arc == 'uFBCEpw': # unified FocalBCE (5120 obj, 80 classes) - b = [0, -6.5] - elif arc == 'uFCE': # unified FocalCE (64 cls, 1 background + 80 classes) - b = [7.7, -1.1] - - bias = module_list[-1][0].bias.view(len(mask), -1) # 255 to 3x85 - bias[:, 4] += b[0] - bias[:, 4].mean() # obj - bias[:, 5:] += b[1] - bias[:, 5:].mean() # cls - # bias = torch.load('weights/yolov3-spp.bias.pt')[yolo_index] # list of tensors [3x85, 3x85, 3x85] - module_list[-1][0].bias = torch.nn.Parameter(bias.view(-1)) - # utils.print_model_biases(model) - except: - print('WARNING: smart bias initialization failure.') - - else: - print('Warning: Unrecognized Layer Type: ' + mdef['type']) - - # Register module list and number of output filters - module_list.append(modules) - output_filters.append(filters) - - return module_list, routs - - -class SwishImplementation(torch.autograd.Function): - @staticmethod - def forward(ctx, i): - ctx.save_for_backward(i) - return i * torch.sigmoid(i) - - @staticmethod - def backward(ctx, grad_output): - sigmoid_i = torch.sigmoid(ctx.saved_variables[0]) - return grad_output * (sigmoid_i * (1 + ctx.saved_variables[0] * (1 - sigmoid_i))) - - -class MemoryEfficientSwish(nn.Module): - def forward(self, x): - return SwishImplementation.apply(x) - - -class Swish(nn.Module): - def forward(self, x): - return x.mul_(torch.sigmoid(x)) - - -class Mish(nn.Module): # https://github.com/digantamisra98/Mish - def forward(self, x): - return x.mul_(F.softplus(x).tanh()) - - -class YOLOLayer(nn.Module): - def __init__(self, anchors, nc, img_size, yolo_index, arc): - super(YOLOLayer, self).__init__() - - self.anchors = torch.Tensor(anchors) - self.na = len(anchors) # number of anchors (3) - self.nc = nc # number of classes (80) - self.nx = 0 # initialize number of x gridpoints - self.ny = 0 # initialize number of y gridpoints - self.arc = arc - - if ONNX_EXPORT: # grids must be computed in __init__ - stride = [32, 16, 8][yolo_index] # stride of this layer - nx = int(img_size[1] / stride) # number x grid points - ny = int(img_size[0] / stride) # number y grid points - create_grids(self, img_size, (nx, ny)) - - def forward(self, p, img_size, var=None): - if ONNX_EXPORT: - bs = 1 # batch size - else: - bs, ny, nx = p.shape[0], p.shape[-2], p.shape[-1] - if (self.nx, self.ny) != (nx, ny): - create_grids(self, img_size, (nx, ny), p.device, p.dtype) - - # p.view(bs, 255, 13, 13) -- > (bs, 3, 13, 13, 85) # (bs, anchors, grid, grid, classes + xywh) - p = p.view(bs, self.na, self.nc + 5, self.ny, self.nx).permute(0, 1, 3, 4, 2).contiguous() # prediction - - if self.training: - return p - - elif ONNX_EXPORT: - # Constants CAN NOT BE BROADCAST, ensure correct shape! - ngu = self.ng.repeat((1, self.na * self.nx * self.ny, 1)) - grid_xy = self.grid_xy.repeat((1, self.na, 1, 1, 1)).view((1, -1, 2)) - anchor_wh = self.anchor_wh.repeat((1, 1, self.nx, self.ny, 1)).view((1, -1, 2)) / ngu - - p = p.view(-1, 5 + self.nc) - xy = torch.sigmoid(p[..., 0:2]) + grid_xy[0] # x, y - wh = torch.exp(p[..., 2:4]) * anchor_wh[0] # width, height - p_conf = torch.sigmoid(p[:, 4:5]) # Conf - p_cls = F.softmax(p[:, 5:85], 1) * p_conf # SSD-like conf - return torch.cat((xy / ngu[0], wh, p_conf, p_cls), 1).t() - - # p = p.view(1, -1, 5 + self.nc) - # xy = torch.sigmoid(p[..., 0:2]) + grid_xy # x, y - # wh = torch.exp(p[..., 2:4]) * anchor_wh # width, height - # p_conf = torch.sigmoid(p[..., 4:5]) # Conf - # p_cls = p[..., 5:5 + self.nc] - # # Broadcasting only supported on first dimension in CoreML. See onnx-coreml/_operators.py - # # p_cls = F.softmax(p_cls, 2) * p_conf # SSD-like conf - # p_cls = torch.exp(p_cls).permute((2, 1, 0)) - # p_cls = p_cls / p_cls.sum(0).unsqueeze(0) * p_conf.permute((2, 1, 0)) # F.softmax() equivalent - # p_cls = p_cls.permute(2, 1, 0) - # return torch.cat((xy / ngu, wh, p_conf, p_cls), 2).squeeze().t() - - else: # inference - # s = 1.5 # scale_xy (pxy = pxy * s - (s - 1) / 2) - io = p.clone() # inference output - io[..., 0:2] = torch.sigmoid(io[..., 0:2]) + self.grid_xy # xy - io[..., 2:4] = torch.exp(io[..., 2:4]) * self.anchor_wh # wh yolo method - # io[..., 2:4] = ((torch.sigmoid(io[..., 2:4]) * 2) ** 3) * self.anchor_wh # wh power method - io[..., :4] *= self.stride - - if 'default' in self.arc: # seperate obj and cls - torch.sigmoid_(io[..., 4:]) - elif 'BCE' in self.arc: # unified BCE (80 classes) - torch.sigmoid_(io[..., 5:]) - io[..., 4] = 1 - elif 'CE' in self.arc: # unified CE (1 background + 80 classes) - io[..., 4:] = F.softmax(io[..., 4:], dim=4) - io[..., 4] = 1 - - if self.nc == 1: - io[..., 5] = 1 # single-class model https://github.com/ultralytics/yolov3/issues/235 - - # reshape from [1, 3, 13, 13, 85] to [1, 507, 85] - return io.view(bs, -1, 5 + self.nc), p - - -class Darknet(nn.Module): - # YOLOv3 object detection model - - def __init__(self, cfg, img_size=(416, 416), arc='default'): - super(Darknet, self).__init__() - - self.module_defs = parse_model_cfg(cfg) - self.module_list, self.routs = create_modules(self.module_defs, img_size, arc) - self.yolo_layers = get_yolo_layers(self) - - # Darknet Header https://github.com/AlexeyAB/darknet/issues/2914#issuecomment-496675346 - self.version = np.array([0, 2, 5], dtype=np.int32) # (int32) version info: major, minor, revision - self.seen = np.array([0], dtype=np.int64) # (int64) number of images seen during training - - def forward(self, x, var=None): - img_size = x.shape[-2:] - layer_outputs = [] - output = [] - - for i, (mdef, module) in enumerate(zip(self.module_defs, self.module_list)): - mtype = mdef['type'] - if mtype in ['convolutional', 'upsample', 'maxpool']: - x = module(x) - elif mtype == 'route': - layers = [int(x) for x in mdef['layers'].split(',')] - if len(layers) == 1: - x = layer_outputs[layers[0]] - else: - try: - x = torch.cat([layer_outputs[i] for i in layers], 1) - except: # apply stride 2 for darknet reorg layer - layer_outputs[layers[1]] = F.interpolate(layer_outputs[layers[1]], scale_factor=[0.5, 0.5]) - x = torch.cat([layer_outputs[i] for i in layers], 1) - # print(''), [print(layer_outputs[i].shape) for i in layers], print(x.shape) - elif mtype == 'shortcut': - x = x + layer_outputs[int(mdef['from'])] - elif mtype == 'yolo': - x = module(x, img_size) - output.append(x) - layer_outputs.append(x if i in self.routs else []) - - if self.training: - return output - elif ONNX_EXPORT: - output = torch.cat(output, 1) # cat 3 layers 85 x (507, 2028, 8112) to 85 x 10647 - nc = self.module_list[self.yolo_layers[0]].nc # number of classes - return output[5:5 + nc].t(), output[:4].t() # ONNX scores, boxes - else: - io, p = list(zip(*output)) # inference output, training output - return torch.cat(io, 1), p - - def fuse(self): - # Fuse Conv2d + BatchNorm2d layers throughout model - fused_list = nn.ModuleList() - for a in list(self.children())[0]: - if isinstance(a, nn.Sequential): - for i, b in enumerate(a): - if isinstance(b, nn.modules.batchnorm.BatchNorm2d): - # fuse this bn layer with the previous conv2d layer - conv = a[i - 1] - fused = torch_utils.fuse_conv_and_bn(conv, b) - a = nn.Sequential(fused, *list(a.children())[i + 1:]) - break - fused_list.append(a) - self.module_list = fused_list - # model_info(self) # yolov3-spp reduced from 225 to 152 layers - - -def get_yolo_layers(model): - return [i for i, x in enumerate(model.module_defs) if x['type'] == 'yolo'] # [82, 94, 106] for yolov3 - - -def create_grids(self, img_size=416, ng=(13, 13), device='cpu', type=torch.float32): - nx, ny = ng # x and y grid size - self.img_size = max(img_size) - self.stride = self.img_size / max(ng) - - # build xy offsets - yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) - self.grid_xy = torch.stack((xv, yv), 2).to(device).type(type).view((1, 1, ny, nx, 2)) - - # build wh gains - self.anchor_vec = self.anchors.to(device) / self.stride - self.anchor_wh = self.anchor_vec.view(1, self.na, 1, 1, 2).to(device).type(type) - self.ng = torch.Tensor(ng).to(device) - self.nx = nx - self.ny = ny - - -def load_darknet_weights(self, weights, cutoff=-1): - # Parses and loads the weights stored in 'weights' - - # Establish cutoffs (load layers between 0 and cutoff. if cutoff = -1 all are loaded) - file = Path(weights).name - if file == 'darknet53.conv.74': - cutoff = 75 - elif file == 'yolov3-tiny.conv.15': - cutoff = 15 - - # Read weights file - with open(weights, 'rb') as f: - # Read Header https://github.com/AlexeyAB/darknet/issues/2914#issuecomment-496675346 - self.version = np.fromfile(f, dtype=np.int32, count=3) # (int32) version info: major, minor, revision - self.seen = np.fromfile(f, dtype=np.int64, count=1) # (int64) number of images seen during training - - weights = np.fromfile(f, dtype=np.float32) # the rest are weights - - ptr = 0 - for i, (mdef, module) in enumerate(zip(self.module_defs[:cutoff], self.module_list[:cutoff])): - if mdef['type'] == 'convolutional': - conv_layer = module[0] - if mdef['batch_normalize']: - # Load BN bias, weights, running mean and running variance - bn_layer = module[1] - num_b = bn_layer.bias.numel() # Number of biases - # Bias - bn_b = torch.from_numpy(weights[ptr:ptr + num_b]).view_as(bn_layer.bias) - bn_layer.bias.data.copy_(bn_b) - ptr += num_b - # Weight - bn_w = torch.from_numpy(weights[ptr:ptr + num_b]).view_as(bn_layer.weight) - bn_layer.weight.data.copy_(bn_w) - ptr += num_b - # Running Mean - bn_rm = torch.from_numpy(weights[ptr:ptr + num_b]).view_as(bn_layer.running_mean) - bn_layer.running_mean.data.copy_(bn_rm) - ptr += num_b - # Running Var - bn_rv = torch.from_numpy(weights[ptr:ptr + num_b]).view_as(bn_layer.running_var) - bn_layer.running_var.data.copy_(bn_rv) - ptr += num_b - else: - # Load conv. bias - num_b = conv_layer.bias.numel() - conv_b = torch.from_numpy(weights[ptr:ptr + num_b]).view_as(conv_layer.bias) - conv_layer.bias.data.copy_(conv_b) - ptr += num_b - # Load conv. weights - num_w = conv_layer.weight.numel() - conv_w = torch.from_numpy(weights[ptr:ptr + num_w]).view_as(conv_layer.weight) - conv_layer.weight.data.copy_(conv_w) - ptr += num_w - - return cutoff - - -def save_weights(self, path='model.weights', cutoff=-1): - # Converts a PyTorch model to Darket format (*.pt to *.weights) - # Note: Does not work if model.fuse() is applied - with open(path, 'wb') as f: - # Write Header https://github.com/AlexeyAB/darknet/issues/2914#issuecomment-496675346 - self.version.tofile(f) # (int32) version info: major, minor, revision - self.seen.tofile(f) # (int64) number of images seen during training - - # Iterate through layers - for i, (mdef, module) in enumerate(zip(self.module_defs[:cutoff], self.module_list[:cutoff])): - if mdef['type'] == 'convolutional': - conv_layer = module[0] - # If batch norm, load bn first - if mdef['batch_normalize']: - bn_layer = module[1] - bn_layer.bias.data.cpu().numpy().tofile(f) - bn_layer.weight.data.cpu().numpy().tofile(f) - bn_layer.running_mean.data.cpu().numpy().tofile(f) - bn_layer.running_var.data.cpu().numpy().tofile(f) - # Load conv bias - else: - conv_layer.bias.data.cpu().numpy().tofile(f) - # Load conv weights - conv_layer.weight.data.cpu().numpy().tofile(f) - - -def convert(cfg='cfg/yolov3-spp.cfg', weights='weights/yolov3-spp.weights'): - # Converts between PyTorch and Darknet format per extension (i.e. *.weights convert to *.pt and vice versa) - # from models import *; convert('cfg/yolov3-spp.cfg', 'weights/yolov3-spp.weights') - - # Initialize model - model = Darknet(cfg) - - # Load weights and save - if weights.endswith('.pt'): # if PyTorch format - model.load_state_dict(torch.load(weights, map_location='cpu')['model']) - save_weights(model, path='converted.weights', cutoff=-1) - print("Success: converted '%s' to 'converted.weights'" % weights) - - elif weights.endswith('.weights'): # darknet format - _ = load_darknet_weights(model, weights) - - chkpt = {'epoch': -1, - 'best_fitness': None, - 'training_results': None, - 'model': model.state_dict(), - 'optimizer': None} - - torch.save(chkpt, 'converted.pt') - print("Success: converted '%s' to 'converted.pt'" % weights) - - else: - print('Error: extension not supported.') - - -def attempt_download(weights): - # Attempt to download pretrained weights if not found locally - - msg = weights + ' missing, download from https://drive.google.com/open?id=1LezFG5g3BCW6iYaV89B2i64cqEUZD7e0' - if weights and not os.path.isfile(weights): - file = Path(weights).name - - if file == 'yolov3-spp.weights': - gdrive_download(id='16lYS4bcIdM2HdmyJBVDOvt3Trx6N3W2R', name=weights) - elif file == 'yolov3.weights': - gdrive_download(id='1uTlyDWlnaqXcsKOktP5aH_zRDbfcDp-y', name=weights) - elif file == 'yolov3-tiny.weights': - gdrive_download(id='1CCF-iNIIkYesIDzaPvdwlcf7H9zSsKZQ', name=weights) - elif file == 'yolov3-spp.pt': - gdrive_download(id='1f6Ovy3BSq2wYq4UfvFUpxJFNDFfrIDcR', name=weights) - elif file == 'yolov3.pt': - gdrive_download(id='1SHNFyoe5Ni8DajDNEqgB2oVKBb_NoEad', name=weights) - elif file == 'yolov3-tiny.pt': - gdrive_download(id='10m_3MlpQwRtZetQxtksm9jqHrPTHZ6vo', name=weights) - elif file == 'darknet53.conv.74': - gdrive_download(id='1WUVBid-XuoUBmvzBVUCBl_ELrzqwA8dJ', name=weights) - elif file == 'yolov3-tiny.conv.15': - gdrive_download(id='1Bw0kCpplxUqyRYAJr9RY9SGnOJbo9nEj', name=weights) - elif file == 'ultralytics49.pt': - gdrive_download(id='158g62Vs14E3aj7oPVPuEnNZMKFNgGyNq', name=weights) - elif file == 'ultralytics68.pt': - gdrive_download(id='1Jm8kqnMdMGUUxGo8zMFZMJ0eaPwLkxSG', name=weights) - else: - try: # download from pjreddie.com - url = 'https://pjreddie.com/media/files/' + file - print('Downloading ' + url) - os.system('curl -f ' + url + ' -o ' + weights) - except IOError: - print(msg) - os.system('rm ' + weights) # remove partial downloads - - if os.path.getsize(weights) < 5E6: # weights < 5MB (too small), download failed - os.remove(weights) # delete corrupted weightsfile - assert os.path.exists(weights), msg # download missing weights from Google Drive diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000000..77a19dcf0f --- /dev/null +++ b/models/__init__.py @@ -0,0 +1 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license diff --git a/models/common.py b/models/common.py new file mode 100644 index 0000000000..3c46b0324e --- /dev/null +++ b/models/common.py @@ -0,0 +1,1066 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Common modules.""" + +import ast +import contextlib +import json +import math +import platform +import warnings +import zipfile +from collections import OrderedDict, namedtuple +from copy import copy +from pathlib import Path +from urllib.parse import urlparse + +import cv2 +import numpy as np +import pandas as pd +import requests +import torch +import torch.nn as nn +from PIL import Image +from torch.cuda import amp +from ultralytics.utils.plotting import Annotator, colors, save_one_box + +from utils import TryExcept +from utils.dataloaders import exif_transpose, letterbox +from utils.general import ( + LOGGER, + ROOT, + Profile, + check_requirements, + check_suffix, + check_version, + colorstr, + increment_path, + is_jupyter, + make_divisible, + non_max_suppression, + scale_boxes, + xywh2xyxy, + xyxy2xywh, + yaml_load, +) +from utils.torch_utils import copy_attr, smart_inference_mode + + +def autopad(k, p=None, d=1): # kernel, padding, dilation + """Automatically calculates same shape padding for convolutional layers, optionally adjusts for dilation.""" + if d > 1: + k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k] # actual kernel-size + if p is None: + p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad + return p + + +class Conv(nn.Module): + """A standard Conv2D layer with batch normalization and optional activation for neural networks.""" + + default_act = nn.SiLU() # default activation + + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True): + """Initializes a standard Conv2D layer with batch normalization and optional activation; args are channel_in, + channel_out, kernel_size, stride, padding, groups, dilation, and activation. + """ + super().__init__() + self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False) + self.bn = nn.BatchNorm2d(c2) + self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity() + + def forward(self, x): + """Applies convolution, batch normalization, and activation to input `x`; `x` shape: [N, C_in, H, W] -> [N, + C_out, H_out, W_out]. + """ + return self.act(self.bn(self.conv(x))) + + def forward_fuse(self, x): + """Applies fused convolution and activation to input `x`; input shape: [N, C_in, H, W] -> [N, C_out, H_out, + W_out]. + """ + return self.act(self.conv(x)) + + +class DWConv(Conv): + """Implements depth-wise convolution for efficient spatial feature extraction in neural networks.""" + + def __init__(self, c1, c2, k=1, s=1, d=1, act=True): # ch_in, ch_out, kernel, stride, dilation, activation + """Initializes depth-wise convolution with optional activation; parameters are channel in/out, kernel, stride, + dilation. + """ + super().__init__(c1, c2, k, s, g=math.gcd(c1, c2), d=d, act=act) + + +class DWConvTranspose2d(nn.ConvTranspose2d): + """Implements a depth-wise transpose convolution layer with specified channels, kernel size, stride, and padding.""" + + def __init__(self, c1, c2, k=1, s=1, p1=0, p2=0): # ch_in, ch_out, kernel, stride, padding, padding_out + """Initializes a depth-wise or transpose convolution layer with specified in/out channels, kernel size, stride, + and padding. + """ + super().__init__(c1, c2, k, s, p1, p2, groups=math.gcd(c1, c2)) + + +class TransformerLayer(nn.Module): + """Transformer layer with multi-head attention and feed-forward network, optimized by removing LayerNorm.""" + + def __init__(self, c, num_heads): + """Initializes a Transformer layer as per https://arxiv.org/abs/2010.11929, sans LayerNorm, with specified + embedding dimension and number of heads. + """ + super().__init__() + self.q = nn.Linear(c, c, bias=False) + self.k = nn.Linear(c, c, bias=False) + self.v = nn.Linear(c, c, bias=False) + self.ma = nn.MultiheadAttention(embed_dim=c, num_heads=num_heads) + self.fc1 = nn.Linear(c, c, bias=False) + self.fc2 = nn.Linear(c, c, bias=False) + + def forward(self, x): + """Performs forward pass with multi-head attention and residual connections on input tensor 'x' [batch, seq_len, + features]. + """ + x = self.ma(self.q(x), self.k(x), self.v(x))[0] + x + x = self.fc2(self.fc1(x)) + x + return x + + +class TransformerBlock(nn.Module): + """Implements a Vision Transformer block with transformer layers; https://arxiv.org/abs/2010.11929.""" + + def __init__(self, c1, c2, num_heads, num_layers): + """Initializes a Transformer block with optional convolution, linear, and transformer layers.""" + super().__init__() + self.conv = None + if c1 != c2: + self.conv = Conv(c1, c2) + self.linear = nn.Linear(c2, c2) # learnable position embedding + self.tr = nn.Sequential(*(TransformerLayer(c2, num_heads) for _ in range(num_layers))) + self.c2 = c2 + + def forward(self, x): + """Applies an optional convolution, transforms features, and reshapes output matching input dimensions.""" + if self.conv is not None: + x = self.conv(x) + b, _, w, h = x.shape + p = x.flatten(2).permute(2, 0, 1) + return self.tr(p + self.linear(p)).permute(1, 2, 0).reshape(b, self.c2, w, h) + + +class Bottleneck(nn.Module): + """Implements a bottleneck layer with optional shortcut for efficient feature extraction in neural networks.""" + + def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion + """Initializes a standard bottleneck layer with optional shortcut; args: input channels (c1), output channels + (c2), shortcut (bool), groups (g), expansion factor (e). + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c_, c2, 3, 1, g=g) + self.add = shortcut and c1 == c2 + + def forward(self, x): + """Executes forward pass, performing convolutional ops and optional shortcut addition; expects input tensor x. + """ + return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) + + +class BottleneckCSP(nn.Module): + """Implements a CSP Bottleneck layer for feature extraction.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion + """Initializes CSP Bottleneck with channel in/out, optional shortcut, groups, expansion; see + https://github.com/WongKinYiu/CrossStagePartialNetworks. + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False) + self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False) + self.cv4 = Conv(2 * c_, c2, 1, 1) + self.bn = nn.BatchNorm2d(2 * c_) # applied to cat(cv2, cv3) + self.act = nn.SiLU() + self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n))) + + def forward(self, x): + """Processes input through layers, combining outputs with activation and normalization for feature extraction. + """ + y1 = self.cv3(self.m(self.cv1(x))) + y2 = self.cv2(x) + return self.cv4(self.act(self.bn(torch.cat((y1, y2), 1)))) + + +class CrossConv(nn.Module): + """Implements Cross Convolution Downsample with 1D and 2D convolutions and optional shortcut.""" + + def __init__(self, c1, c2, k=3, s=1, g=1, e=1.0, shortcut=False): + """Initializes CrossConv with downsample options, combining 1D and 2D convolutions, optional shortcut if + input/output channels match. + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, (1, k), (1, s)) + self.cv2 = Conv(c_, c2, (k, 1), (s, 1), g=g) + self.add = shortcut and c1 == c2 + + def forward(self, x): + """Performs forward pass using sequential 1D and 2D convolutions with optional shortcut addition.""" + return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) + + +class C3(nn.Module): + """Implements a CSP Bottleneck with 3 convolutions, optional shortcuts, group convolutions, and expansion factor.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion + """Initializes CSP Bottleneck with 3 convolutions, optional shortcuts, group convolutions, and expansion factor. + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c1, c_, 1, 1) + self.cv3 = Conv(2 * c_, c2, 1) # optional act=FReLU(c2) + self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n))) + + def forward(self, x): + """Processes input tensor `x` through convolutions and bottlenecks, returning the concatenated output tensor.""" + return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1)) + + +class C3x(C3): + """Extends the C3 module with cross-convolutions for enhanced feature extraction and flexibility.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): + """Initializes a C3x module with cross-convolutions, extending the C3 module with customizable parameters.""" + super().__init__(c1, c2, n, shortcut, g, e) + c_ = int(c2 * e) + self.m = nn.Sequential(*(CrossConv(c_, c_, 3, 1, g, 1.0, shortcut) for _ in range(n))) + + +class C3TR(C3): + """C3 module with TransformerBlock for integrating attention mechanisms in CNNs.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): + """Initializes a C3 module with TransformerBlock, extending C3 for attention mechanisms.""" + super().__init__(c1, c2, n, shortcut, g, e) + c_ = int(c2 * e) + self.m = TransformerBlock(c_, c_, 4, n) + + +class C3SPP(C3): + """Extends C3 with Spatial Pyramid Pooling (SPP) for enhanced feature extraction in CNNs.""" + + def __init__(self, c1, c2, k=(5, 9, 13), n=1, shortcut=True, g=1, e=0.5): + """Initializes C3SPP module, extending C3 with Spatial Pyramid Pooling for enhanced feature extraction.""" + super().__init__(c1, c2, n, shortcut, g, e) + c_ = int(c2 * e) + self.m = SPP(c_, c_, k) + + +class C3Ghost(C3): + """Implements a C3 module with Ghost Bottlenecks for efficient feature extraction in neural networks.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): + """Initializes C3Ghost module with Ghost Bottlenecks for efficient feature extraction.""" + super().__init__(c1, c2, n, shortcut, g, e) + c_ = int(c2 * e) # hidden channels + self.m = nn.Sequential(*(GhostBottleneck(c_, c_) for _ in range(n))) + + +class SPP(nn.Module): + """Implements Spatial Pyramid Pooling (SPP) for enhanced feature extraction; see https://arxiv.org/abs/1406.4729.""" + + def __init__(self, c1, c2, k=(5, 9, 13)): + """Initializes SPP layer with specified channels and kernels. + + More at https://arxiv.org/abs/1406.4729 + """ + super().__init__() + c_ = c1 // 2 # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1) + self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k]) + + def forward(self, x): + """Applies convolution and max pooling layers to the input tensor `x`, concatenates results for feature + extraction. + + `x` is a tensor of shape [N, C, H, W]. See https://arxiv.org/abs/1406.4729 for more details. + """ + x = self.cv1(x) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") # suppress torch 1.9.0 max_pool2d() warning + return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1)) + + +class SPPF(nn.Module): + """Implements a fast Spatial Pyramid Pooling (SPPF) layer for efficient feature extraction in YOLOv3 models.""" + + def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13)) + """Initializes the SPPF layer with specified input/output channels and kernel size for YOLOv3.""" + super().__init__() + c_ = c1 // 2 # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c_ * 4, c2, 1, 1) + self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2) + + def forward(self, x): + """Performs forward pass combining convolutions and max pooling on input `x` of shape [N, C, H, W] to produce + feature map. + """ + x = self.cv1(x) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") # suppress torch 1.9.0 max_pool2d() warning + y1 = self.m(x) + y2 = self.m(y1) + return self.cv2(torch.cat((x, y1, y2, self.m(y2)), 1)) + + +class Focus(nn.Module): + """Focuses spatial information into channel space using configurable convolution.""" + + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups + """Initializes Focus module to focus width and height information into channel space with configurable + convolution parameters. + """ + super().__init__() + self.conv = Conv(c1 * 4, c2, k, s, p, g, act=act) + # self.contract = Contract(gain=2) + + def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2) + """Applies focused downsampling to input tensor, returning a convolved output with increased channel depth.""" + return self.conv(torch.cat((x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]), 1)) + # return self.conv(self.contract(x)) + + +class GhostConv(nn.Module): + """Implements Ghost Convolution for efficient feature extraction; see github.com/huawei-noah/ghostnet.""" + + def __init__(self, c1, c2, k=1, s=1, g=1, act=True): # ch_in, ch_out, kernel, stride, groups + """Initializes GhostConv with in/out channels, kernel size, stride, groups; see + https://github.com/huawei-noah/ghostnet. + """ + super().__init__() + c_ = c2 // 2 # hidden channels + self.cv1 = Conv(c1, c_, k, s, None, g, act=act) + self.cv2 = Conv(c_, c_, 5, 1, None, c_, act=act) + + def forward(self, x): + """Executes forward pass, applying convolutions and concatenating results; input `x` is a tensor.""" + y = self.cv1(x) + return torch.cat((y, self.cv2(y)), 1) + + +class GhostBottleneck(nn.Module): + """Implements a Ghost Bottleneck layer for efficient feature extraction from GhostNet.""" + + def __init__(self, c1, c2, k=3, s=1): # ch_in, ch_out, kernel, stride + """Initializes GhostBottleneck module with in/out channels, kernel size, and stride; see + https://github.com/huawei-noah/ghostnet. + """ + super().__init__() + c_ = c2 // 2 + self.conv = nn.Sequential( + GhostConv(c1, c_, 1, 1), # pw + DWConv(c_, c_, k, s, act=False) if s == 2 else nn.Identity(), # dw + GhostConv(c_, c2, 1, 1, act=False), + ) # pw-linear + self.shortcut = ( + nn.Sequential(DWConv(c1, c1, k, s, act=False), Conv(c1, c2, 1, 1, act=False)) if s == 2 else nn.Identity() + ) + + def forward(self, x): + """Performs a forward pass through the network, returning the sum of convolution and shortcut outputs.""" + return self.conv(x) + self.shortcut(x) + + +class Contract(nn.Module): + """Contracts spatial dimensions into channels, e.g., (1,64,80,80) to (1,256,40,40) with a specified gain.""" + + def __init__(self, gain=2): + """Initializes Contract module to refine input dimensions, e.g., from (1,64,80,80) to (1,256,40,40) with a + default gain of 2. + """ + super().__init__() + self.gain = gain + + def forward(self, x): + """Processes input tensor (b,c,h,w) to contracted shape (b,c*s^2,h/s,w/s) with default gain s=2, e.g., + (1,64,80,80) to (1,256,40,40). + """ + b, c, h, w = x.size() # assert (h / s == 0) and (W / s == 0), 'Indivisible gain' + s = self.gain + x = x.view(b, c, h // s, s, w // s, s) # x(1,64,40,2,40,2) + x = x.permute(0, 3, 5, 1, 2, 4).contiguous() # x(1,2,2,64,40,40) + return x.view(b, c * s * s, h // s, w // s) # x(1,256,40,40) + + +class Expand(nn.Module): + """Expands spatial dimensions of input tensor by a factor while reducing channels correspondingly.""" + + def __init__(self, gain=2): + """Initializes Expand module to increase spatial dimensions by factor `gain` while reducing channels + correspondingly. + """ + super().__init__() + self.gain = gain + + def forward(self, x): + """Expands spatial dimensions of input tensor `x` by factor `gain` while reducing channels, transforming shape + `(B,C,H,W)` to `(B,C/gain^2,H*gain,W*gain)`. + """ + b, c, h, w = x.size() # assert C / s ** 2 == 0, 'Indivisible gain' + s = self.gain + x = x.view(b, s, s, c // s**2, h, w) # x(1,2,2,16,80,80) + x = x.permute(0, 3, 4, 1, 5, 2).contiguous() # x(1,16,80,2,80,2) + return x.view(b, c // s**2, h * s, w * s) # x(1,16,160,160) + + +class Concat(nn.Module): + """Concatenates a list of tensors along a specified dimension for efficient feature aggregation.""" + + def __init__(self, dimension=1): + """Initializes a module to concatenate tensors along a specified dimension.""" + super().__init__() + self.d = dimension + + def forward(self, x): + """Concatenates a list of tensors along a specified dimension; x is a list of tensors to concatenate, dimension + defaults to 1. + """ + return torch.cat(x, self.d) + + +class DetectMultiBackend(nn.Module): + """YOLOv3 multi-backend class for inference on frameworks like PyTorch, ONNX, TensorRT, and more.""" + + def __init__(self, weights="yolov5s.pt", device=torch.device("cpu"), dnn=False, data=None, fp16=False, fuse=True): + """Initializes multi-backend detection with options for various frameworks and devices, also handles model + download. + """ + # PyTorch: weights = *.pt + # TorchScript: *.torchscript + # ONNX Runtime: *.onnx + # ONNX OpenCV DNN: *.onnx --dnn + # OpenVINO: *_openvino_model + # CoreML: *.mlmodel + # TensorRT: *.engine + # TensorFlow SavedModel: *_saved_model + # TensorFlow GraphDef: *.pb + # TensorFlow Lite: *.tflite + # TensorFlow Edge TPU: *_edgetpu.tflite + # PaddlePaddle: *_paddle_model + from models.experimental import attempt_download, attempt_load # scoped to avoid circular import + + super().__init__() + w = str(weights[0] if isinstance(weights, list) else weights) + pt, jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, triton = self._model_type(w) + fp16 &= pt or jit or onnx or engine or triton # FP16 + nhwc = coreml or saved_model or pb or tflite or edgetpu # BHWC formats (vs torch BCWH) + stride = 32 # default stride + cuda = torch.cuda.is_available() and device.type != "cpu" # use CUDA + if not (pt or triton): + w = attempt_download(w) # download if not local + + if pt: # PyTorch + model = attempt_load(weights if isinstance(weights, list) else w, device=device, inplace=True, fuse=fuse) + stride = max(int(model.stride.max()), 32) # model stride + names = model.module.names if hasattr(model, "module") else model.names # get class names + model.half() if fp16 else model.float() + self.model = model # explicitly assign for to(), cpu(), cuda(), half() + elif jit: # TorchScript + LOGGER.info(f"Loading {w} for TorchScript inference...") + extra_files = {"config.txt": ""} # model metadata + model = torch.jit.load(w, _extra_files=extra_files, map_location=device) + model.half() if fp16 else model.float() + if extra_files["config.txt"]: # load metadata dict + d = json.loads( + extra_files["config.txt"], + object_hook=lambda d: {int(k) if k.isdigit() else k: v for k, v in d.items()}, + ) + stride, names = int(d["stride"]), d["names"] + elif dnn: # ONNX OpenCV DNN + LOGGER.info(f"Loading {w} for ONNX OpenCV DNN inference...") + check_requirements("opencv-python>=4.5.4") + net = cv2.dnn.readNetFromONNX(w) + elif onnx: # ONNX Runtime + LOGGER.info(f"Loading {w} for ONNX Runtime inference...") + check_requirements(("onnx", "onnxruntime-gpu" if cuda else "onnxruntime")) + import onnxruntime + + providers = ["CUDAExecutionProvider", "CPUExecutionProvider"] if cuda else ["CPUExecutionProvider"] + session = onnxruntime.InferenceSession(w, providers=providers) + output_names = [x.name for x in session.get_outputs()] + meta = session.get_modelmeta().custom_metadata_map # metadata + if "stride" in meta: + stride, names = int(meta["stride"]), eval(meta["names"]) + elif xml: # OpenVINO + LOGGER.info(f"Loading {w} for OpenVINO inference...") + check_requirements("openvino>=2023.0") # requires openvino-dev: https://pypi.org/project/openvino-dev/ + from openvino.runtime import Core, Layout, get_batch + + core = Core() + if not Path(w).is_file(): # if not *.xml + w = next(Path(w).glob("*.xml")) # get *.xml file from *_openvino_model dir + ov_model = core.read_model(model=w, weights=Path(w).with_suffix(".bin")) + if ov_model.get_parameters()[0].get_layout().empty: + ov_model.get_parameters()[0].set_layout(Layout("NCHW")) + batch_dim = get_batch(ov_model) + if batch_dim.is_static: + batch_size = batch_dim.get_length() + ov_compiled_model = core.compile_model(ov_model, device_name="AUTO") # AUTO selects best available device + stride, names = self._load_metadata(Path(w).with_suffix(".yaml")) # load metadata + elif engine: # TensorRT + LOGGER.info(f"Loading {w} for TensorRT inference...") + import tensorrt as trt # https://developer.nvidia.com/nvidia-tensorrt-download + + check_version(trt.__version__, "7.0.0", hard=True) # require tensorrt>=7.0.0 + if device.type == "cpu": + device = torch.device("cuda:0") + Binding = namedtuple("Binding", ("name", "dtype", "shape", "data", "ptr")) + logger = trt.Logger(trt.Logger.INFO) + with open(w, "rb") as f, trt.Runtime(logger) as runtime: + model = runtime.deserialize_cuda_engine(f.read()) + context = model.create_execution_context() + bindings = OrderedDict() + output_names = [] + fp16 = False # default updated below + dynamic = False + for i in range(model.num_bindings): + name = model.get_binding_name(i) + dtype = trt.nptype(model.get_binding_dtype(i)) + if model.binding_is_input(i): + if -1 in tuple(model.get_binding_shape(i)): # dynamic + dynamic = True + context.set_binding_shape(i, tuple(model.get_profile_shape(0, i)[2])) + if dtype == np.float16: + fp16 = True + else: # output + output_names.append(name) + shape = tuple(context.get_binding_shape(i)) + im = torch.from_numpy(np.empty(shape, dtype=dtype)).to(device) + bindings[name] = Binding(name, dtype, shape, im, int(im.data_ptr())) + binding_addrs = OrderedDict((n, d.ptr) for n, d in bindings.items()) + batch_size = bindings["images"].shape[0] # if dynamic, this is instead max batch size + elif coreml: # CoreML + LOGGER.info(f"Loading {w} for CoreML inference...") + import coremltools as ct + + model = ct.models.MLModel(w) + elif saved_model: # TF SavedModel + LOGGER.info(f"Loading {w} for TensorFlow SavedModel inference...") + import tensorflow as tf + + keras = False # assume TF1 saved_model + model = tf.keras.models.load_model(w) if keras else tf.saved_model.load(w) + elif pb: # GraphDef https://www.tensorflow.org/guide/migrate#a_graphpb_or_graphpbtxt + LOGGER.info(f"Loading {w} for TensorFlow GraphDef inference...") + import tensorflow as tf + + def wrap_frozen_graph(gd, inputs, outputs): + """Wraps a frozen TensorFlow GraphDef for inference, returning a pruned function for specified inputs + and outputs. + """ + x = tf.compat.v1.wrap_function(lambda: tf.compat.v1.import_graph_def(gd, name=""), []) # wrapped + ge = x.graph.as_graph_element + return x.prune(tf.nest.map_structure(ge, inputs), tf.nest.map_structure(ge, outputs)) + + def gd_outputs(gd): + """Extracts and sorts non-input (output) tensor names from a TensorFlow GraphDef, excluding 'NoOp' + prefixed tensors. + """ + name_list, input_list = [], [] + for node in gd.node: # tensorflow.core.framework.node_def_pb2.NodeDef + name_list.append(node.name) + input_list.extend(node.input) + return sorted(f"{x}:0" for x in list(set(name_list) - set(input_list)) if not x.startswith("NoOp")) + + gd = tf.Graph().as_graph_def() # TF GraphDef + with open(w, "rb") as f: + gd.ParseFromString(f.read()) + frozen_func = wrap_frozen_graph(gd, inputs="x:0", outputs=gd_outputs(gd)) + elif tflite or edgetpu: # https://www.tensorflow.org/lite/guide/python#install_tensorflow_lite_for_python + try: # https://coral.ai/docs/edgetpu/tflite-python/#update-existing-tf-lite-code-for-the-edge-tpu + from tflite_runtime.interpreter import Interpreter, load_delegate + except ImportError: + import tensorflow as tf + + Interpreter, load_delegate = ( + tf.lite.Interpreter, + tf.lite.experimental.load_delegate, + ) + if edgetpu: # TF Edge TPU https://coral.ai/software/#edgetpu-runtime + LOGGER.info(f"Loading {w} for TensorFlow Lite Edge TPU inference...") + delegate = {"Linux": "libedgetpu.so.1", "Darwin": "libedgetpu.1.dylib", "Windows": "edgetpu.dll"}[ + platform.system() + ] + interpreter = Interpreter(model_path=w, experimental_delegates=[load_delegate(delegate)]) + else: # TFLite + LOGGER.info(f"Loading {w} for TensorFlow Lite inference...") + interpreter = Interpreter(model_path=w) # load TFLite model + interpreter.allocate_tensors() # allocate + input_details = interpreter.get_input_details() # inputs + output_details = interpreter.get_output_details() # outputs + # load metadata + with contextlib.suppress(zipfile.BadZipFile): + with zipfile.ZipFile(w, "r") as model: + meta_file = model.namelist()[0] + meta = ast.literal_eval(model.read(meta_file).decode("utf-8")) + stride, names = int(meta["stride"]), meta["names"] + elif tfjs: # TF.js + raise NotImplementedError("ERROR: YOLOv3 TF.js inference is not supported") + elif paddle: # PaddlePaddle + LOGGER.info(f"Loading {w} for PaddlePaddle inference...") + check_requirements("paddlepaddle-gpu" if cuda else "paddlepaddle") + import paddle.inference as pdi + + if not Path(w).is_file(): # if not *.pdmodel + w = next(Path(w).rglob("*.pdmodel")) # get *.pdmodel file from *_paddle_model dir + weights = Path(w).with_suffix(".pdiparams") + config = pdi.Config(str(w), str(weights)) + if cuda: + config.enable_use_gpu(memory_pool_init_size_mb=2048, device_id=0) + predictor = pdi.create_predictor(config) + input_handle = predictor.get_input_handle(predictor.get_input_names()[0]) + output_names = predictor.get_output_names() + elif triton: # NVIDIA Triton Inference Server + LOGGER.info(f"Using {w} as Triton Inference Server...") + check_requirements("tritonclient[all]") + from utils.triton import TritonRemoteModel + + model = TritonRemoteModel(url=w) + nhwc = model.runtime.startswith("tensorflow") + else: + raise NotImplementedError(f"ERROR: {w} is not a supported format") + + # class names + if "names" not in locals(): + names = yaml_load(data)["names"] if data else {i: f"class{i}" for i in range(999)} + if names[0] == "n01440764" and len(names) == 1000: # ImageNet + names = yaml_load(ROOT / "data/ImageNet.yaml")["names"] # human-readable names + + self.__dict__.update(locals()) # assign all variables to self + + def forward(self, im, augment=False, visualize=False): + """Performs YOLOv3 inference on an input image tensor, optionally with augmentation and visualization.""" + _b, _ch, h, w = im.shape # batch, channel, height, width + if self.fp16 and im.dtype != torch.float16: + im = im.half() # to FP16 + if self.nhwc: + im = im.permute(0, 2, 3, 1) # torch BCHW to numpy BHWC shape(1,320,192,3) + + if self.pt: # PyTorch + y = self.model(im, augment=augment, visualize=visualize) if augment or visualize else self.model(im) + elif self.jit: # TorchScript + y = self.model(im) + elif self.dnn: # ONNX OpenCV DNN + im = im.cpu().numpy() # torch to numpy + self.net.setInput(im) + y = self.net.forward() + elif self.onnx: # ONNX Runtime + im = im.cpu().numpy() # torch to numpy + y = self.session.run(self.output_names, {self.session.get_inputs()[0].name: im}) + elif self.xml: # OpenVINO + im = im.cpu().numpy() # FP32 + y = list(self.ov_compiled_model(im).values()) + elif self.engine: # TensorRT + if self.dynamic and im.shape != self.bindings["images"].shape: + i = self.model.get_binding_index("images") + self.context.set_binding_shape(i, im.shape) # reshape if dynamic + self.bindings["images"] = self.bindings["images"]._replace(shape=im.shape) + for name in self.output_names: + i = self.model.get_binding_index(name) + self.bindings[name].data.resize_(tuple(self.context.get_binding_shape(i))) + s = self.bindings["images"].shape + assert im.shape == s, f"input size {im.shape} {'>' if self.dynamic else 'not equal to'} max model size {s}" + self.binding_addrs["images"] = int(im.data_ptr()) + self.context.execute_v2(list(self.binding_addrs.values())) + y = [self.bindings[x].data for x in sorted(self.output_names)] + elif self.coreml: # CoreML + im = im.cpu().numpy() + im = Image.fromarray((im[0] * 255).astype("uint8")) + # im = im.resize((192, 320), Image.BILINEAR) + y = self.model.predict({"image": im}) # coordinates are xywh normalized + if "confidence" in y: + box = xywh2xyxy(y["coordinates"] * [[w, h, w, h]]) # xyxy pixels + conf, cls = y["confidence"].max(1), y["confidence"].argmax(1).astype(np.float) + y = np.concatenate((box, conf.reshape(-1, 1), cls.reshape(-1, 1)), 1) + else: + y = list(reversed(y.values())) # reversed for segmentation models (pred, proto) + elif self.paddle: # PaddlePaddle + im = im.cpu().numpy().astype(np.float32) + self.input_handle.copy_from_cpu(im) + self.predictor.run() + y = [self.predictor.get_output_handle(x).copy_to_cpu() for x in self.output_names] + elif self.triton: # NVIDIA Triton Inference Server + y = self.model(im) + else: # TensorFlow (SavedModel, GraphDef, Lite, Edge TPU) + im = im.cpu().numpy() + if self.saved_model: # SavedModel + y = self.model(im, training=False) if self.keras else self.model(im) + elif self.pb: # GraphDef + y = self.frozen_func(x=self.tf.constant(im)) + else: # Lite or Edge TPU + input = self.input_details[0] + int8 = input["dtype"] == np.uint8 # is TFLite quantized uint8 model + if int8: + scale, zero_point = input["quantization"] + im = (im / scale + zero_point).astype(np.uint8) # de-scale + self.interpreter.set_tensor(input["index"], im) + self.interpreter.invoke() + y = [] + for output in self.output_details: + x = self.interpreter.get_tensor(output["index"]) + if int8: + scale, zero_point = output["quantization"] + x = (x.astype(np.float32) - zero_point) * scale # re-scale + y.append(x) + y = [x if isinstance(x, np.ndarray) else x.numpy() for x in y] + y[0][..., :4] *= [w, h, w, h] # xywh normalized to pixels + + if isinstance(y, (list, tuple)): + return self.from_numpy(y[0]) if len(y) == 1 else [self.from_numpy(x) for x in y] + else: + return self.from_numpy(y) + + def from_numpy(self, x): + """Converts a Numpy array to a PyTorch tensor on the specified device, else returns the input if not a Numpy + array. + """ + return torch.from_numpy(x).to(self.device) if isinstance(x, np.ndarray) else x + + def warmup(self, imgsz=(1, 3, 640, 640)): + """Warms up the model by running inference once with a dummy input of shape imgsz.""" + warmup_types = self.pt, self.jit, self.onnx, self.engine, self.saved_model, self.pb, self.triton + if any(warmup_types) and (self.device.type != "cpu" or self.triton): + im = torch.empty(*imgsz, dtype=torch.half if self.fp16 else torch.float, device=self.device) # input + for _ in range(2 if self.jit else 1): # + self.forward(im) # warmup + + @staticmethod + def _model_type(p="path/to/model.pt"): + """Determines model type from filepath or URL, supports various formats including ONNX, PT, JIT. + + See `export_formats` for all. + """ + # types = [pt, jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle] + from export import export_formats + from utils.downloads import is_url + + sf = list(export_formats().Suffix) # export suffixes + if not is_url(p, check=False): + check_suffix(p, sf) # checks + url = urlparse(p) # if url may be Triton inference server + types = [s in Path(p).name for s in sf] + types[8] &= not types[9] # tflite &= not edgetpu + triton = not any(types) and all([any(s in url.scheme for s in ["http", "grpc"]), url.netloc]) + return [*types, triton] + + @staticmethod + def _load_metadata(f=Path("path/to/meta.yaml")): + """Loads metadata from a YAML file, returning 'stride' and 'names' if the file exists, else 'None'.""" + if f.exists(): + d = yaml_load(f) + return d["stride"], d["names"] # assign stride, names + return None, None + + +class AutoShape(nn.Module): + """A wrapper for YOLOv3 models to handle diverse input types with preprocessing, inference, and NMS.""" + + conf = 0.25 # NMS confidence threshold + iou = 0.45 # NMS IoU threshold + agnostic = False # NMS class-agnostic + multi_label = False # NMS multiple labels per box + classes = None # (optional list) filter by class, i.e. = [0, 15, 16] for COCO persons, cats and dogs + max_det = 1000 # maximum number of detections per image + amp = False # Automatic Mixed Precision (AMP) inference + + def __init__(self, model, verbose=True): + """Initializes the model for inference, setting attributes, and preparing for multithreaded execution with + optional verbose logging. + """ + super().__init__() + if verbose: + LOGGER.info("Adding AutoShape... ") + copy_attr(self, model, include=("yaml", "nc", "hyp", "names", "stride", "abc"), exclude=()) # copy attributes + self.dmb = isinstance(model, DetectMultiBackend) # DetectMultiBackend() instance + self.pt = not self.dmb or model.pt # PyTorch model + self.model = model.eval() + if self.pt: + m = self.model.model.model[-1] if self.dmb else self.model.model[-1] # Detect() + m.inplace = False # Detect.inplace=False for safe multithread inference + m.export = True # do not output loss values + + def _apply(self, fn): + """Applies given function `fn` to model tensors excluding parameters or registered buffers, adjusting strides + and grids. + """ + self = super()._apply(fn) + if self.pt: + m = self.model.model.model[-1] if self.dmb else self.model.model[-1] # Detect() + m.stride = fn(m.stride) + m.grid = list(map(fn, m.grid)) + if isinstance(m.anchor_grid, list): + m.anchor_grid = list(map(fn, m.anchor_grid)) + return self + + @smart_inference_mode() + def forward(self, ims, size=640, augment=False, profile=False): + """Performs inference on various input sources with optional augmentation and profiling; see + `https://ultralytics.com`. + """ + # file: ims = 'data/images/zidane.jpg' # str or PosixPath + # URI: = 'https://ultralytics.com/images/zidane.jpg' + # OpenCV: = cv2.imread('image.jpg')[:,:,::-1] # HWC BGR to RGB x(640,1280,3) + # PIL: = Image.open('image.jpg') or ImageGrab.grab() # HWC x(640,1280,3) + # numpy: = np.zeros((640,1280,3)) # HWC + # torch: = torch.zeros(16,3,320,640) # BCHW (scaled to size=640, 0-1 values) + # multiple: = [Image.open('image1.jpg'), Image.open('image2.jpg'), ...] # list of images + + dt = (Profile(), Profile(), Profile()) + with dt[0]: + if isinstance(size, int): # expand + size = (size, size) + p = next(self.model.parameters()) if self.pt else torch.empty(1, device=self.model.device) # param + autocast = self.amp and (p.device.type != "cpu") # Automatic Mixed Precision (AMP) inference + if isinstance(ims, torch.Tensor): # torch + with amp.autocast(autocast): + return self.model(ims.to(p.device).type_as(p), augment=augment) # inference + + # Pre-process + n, ims = (len(ims), list(ims)) if isinstance(ims, (list, tuple)) else (1, [ims]) # number, list of images + shape0, shape1, files = [], [], [] # image and inference shapes, filenames + for i, im in enumerate(ims): + f = f"image{i}" # filename + if isinstance(im, (str, Path)): # filename or uri + im, f = Image.open(requests.get(im, stream=True).raw if str(im).startswith("http") else im), im + im = np.asarray(exif_transpose(im)) + elif isinstance(im, Image.Image): # PIL Image + im, f = np.asarray(exif_transpose(im)), getattr(im, "filename", f) or f + files.append(Path(f).with_suffix(".jpg").name) + if im.shape[0] < 5: # image in CHW + im = im.transpose((1, 2, 0)) # reverse dataloader .transpose(2, 0, 1) + im = im[..., :3] if im.ndim == 3 else cv2.cvtColor(im, cv2.COLOR_GRAY2BGR) # enforce 3ch input + s = im.shape[:2] # HWC + shape0.append(s) # image shape + g = max(size) / max(s) # gain + shape1.append([int(y * g) for y in s]) + ims[i] = im if im.data.contiguous else np.ascontiguousarray(im) # update + shape1 = [make_divisible(x, self.stride) for x in np.array(shape1).max(0)] # inf shape + x = [letterbox(im, shape1, auto=False)[0] for im in ims] # pad + x = np.ascontiguousarray(np.array(x).transpose((0, 3, 1, 2))) # stack and BHWC to BCHW + x = torch.from_numpy(x).to(p.device).type_as(p) / 255 # uint8 to fp16/32 + + with amp.autocast(autocast): + # Inference + with dt[1]: + y = self.model(x, augment=augment) # forward + + # Post-process + with dt[2]: + y = non_max_suppression( + y if self.dmb else y[0], + self.conf, + self.iou, + self.classes, + self.agnostic, + self.multi_label, + max_det=self.max_det, + ) # NMS + for i in range(n): + scale_boxes(shape1, y[i][:, :4], shape0[i]) + + return Detections(ims, y, files, dt, self.names, x.shape) + + +class Detections: + """Handles YOLOv3 detection results with methods for visualization, saving, cropping, and format conversion.""" + + def __init__(self, ims, pred, files, times=(0, 0, 0), names=None, shape=None): + """Initializes YOLOv3 detections with image data, predictions, filenames, profiling times, class names, and + shapes. + """ + super().__init__() + d = pred[0].device # device + gn = [torch.tensor([*(im.shape[i] for i in [1, 0, 1, 0]), 1, 1], device=d) for im in ims] # normalizations + self.ims = ims # list of images as numpy arrays + self.pred = pred # list of tensors pred[0] = (xyxy, conf, cls) + self.names = names # class names + self.files = files # image filenames + self.times = times # profiling times + self.xyxy = pred # xyxy pixels + self.xywh = [xyxy2xywh(x) for x in pred] # xywh pixels + self.xyxyn = [x / g for x, g in zip(self.xyxy, gn)] # xyxy normalized + self.xywhn = [x / g for x, g in zip(self.xywh, gn)] # xywh normalized + self.n = len(self.pred) # number of images (batch size) + self.t = tuple(x.t / self.n * 1e3 for x in times) # timestamps (ms) + self.s = tuple(shape) # inference BCHW shape + + def _run(self, pprint=False, show=False, save=False, crop=False, render=False, labels=True, save_dir=Path("")): + """Executes inference on images, annotates detections, and can optionally show, save, or crop output images.""" + s, crops = "", [] + for i, (im, pred) in enumerate(zip(self.ims, self.pred)): + s += f"\nimage {i + 1}/{len(self.pred)}: {im.shape[0]}x{im.shape[1]} " # string + if pred.shape[0]: + for c in pred[:, -1].unique(): + n = (pred[:, -1] == c).sum() # detections per class + s += f"{n} {self.names[int(c)]}{'s' * (n > 1)}, " # add to string + s = s.rstrip(", ") + if show or save or render or crop: + annotator = Annotator(im, example=str(self.names)) + for *box, conf, cls in reversed(pred): # xyxy, confidence, class + label = f"{self.names[int(cls)]} {conf:.2f}" + if crop: + file = save_dir / "crops" / self.names[int(cls)] / self.files[i] if save else None + crops.append( + { + "box": box, + "conf": conf, + "cls": cls, + "label": label, + "im": save_one_box(box, im, file=file, save=save), + } + ) + else: # all others + annotator.box_label(box, label if labels else "", color=colors(cls)) + im = annotator.im + else: + s += "(no detections)" + + im = Image.fromarray(im.astype(np.uint8)) if isinstance(im, np.ndarray) else im # from np + if show: + if is_jupyter(): + from IPython.display import display + + display(im) + else: + im.show(self.files[i]) + if save: + f = self.files[i] + im.save(save_dir / f) # save + if i == self.n - 1: + LOGGER.info(f"Saved {self.n} image{'s' * (self.n > 1)} to {colorstr('bold', save_dir)}") + if render: + self.ims[i] = np.asarray(im) + if pprint: + s = s.lstrip("\n") + return f"{s}\nSpeed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {self.s}" % self.t + if crop: + if save: + LOGGER.info(f"Saved results to {save_dir}\n") + return crops + + @TryExcept("Showing images is not supported in this environment") + def show(self, labels=True): + """Displays image results with optional labels. + + Usage: `show(labels=True)` + """ + self._run(show=True, labels=labels) # show results + + def save(self, labels=True, save_dir="runs/detect/exp", exist_ok=False): + """Saves image results with optional labels to a specified directory. + + Usage: `save(labels=True, save_dir='runs/detect/exp', exist_ok=False)` + """ + save_dir = increment_path(save_dir, exist_ok, mkdir=True) # increment save_dir + self._run(save=True, labels=labels, save_dir=save_dir) # save results + + def crop(self, save=True, save_dir="runs/detect/exp", exist_ok=False): + """Crops detection results; can save to `save_dir`. + + Usage: `crop(save=True, save_dir='runs/detect/exp')`. + """ + save_dir = increment_path(save_dir, exist_ok, mkdir=True) if save else None + return self._run(crop=True, save=save, save_dir=save_dir) # crop results + + def render(self, labels=True): + """Renders detection results, optionally displaying labels. + + Usage: `render(labels=True)`. + """ + self._run(render=True, labels=labels) # render results + return self.ims + + def pandas(self): + """Returns a copy of the detection results as pandas DataFrames for various bounding box formats.""" + new = copy(self) # return copy + ca = "xmin", "ymin", "xmax", "ymax", "confidence", "class", "name" # xyxy columns + cb = "xcenter", "ycenter", "width", "height", "confidence", "class", "name" # xywh columns + for k, c in zip(["xyxy", "xyxyn", "xywh", "xywhn"], [ca, ca, cb, cb]): + a = [[[*x[:5], int(x[5]), self.names[int(x[5])]] for x in x.tolist()] for x in getattr(self, k)] # update + setattr(new, k, [pd.DataFrame(x, columns=c) for x in a]) + return new + + def tolist(self): + """Converts Detections object to a list of individual Detection objects for iteration.""" + r = range(self.n) # iterable + return [ + Detections( + [self.ims[i]], + [self.pred[i]], + [self.files[i]], + self.times, + self.names, + self.s, + ) + for i in r + ] + + def print(self): + """Logs the string representation of the current object state to the LOGGER.""" + LOGGER.info(self.__str__()) + + def __len__(self): # override len(results) + """Returns the number of results stored in the instance.""" + return self.n + + def __str__(self): # override print(results) + """Returns a string representation of the current object state, printing the results.""" + return self._run(pprint=True) # print results + + def __repr__(self): + """Returns a string representation for debugging, including class info and current object state.""" + return f"YOLOv3 {self.__class__} instance\n" + self.__str__() + + +class Proto(nn.Module): + """Implements the YOLOv3 mask Proto module for segmentation, including convolutional layers and upsampling.""" + + def __init__(self, c1, c_=256, c2=32): # ch_in, number of protos, number of masks + """Initializes the Proto module for YOLOv3 segmentation, setting up convolutional layers and upsampling.""" + super().__init__() + self.cv1 = Conv(c1, c_, k=3) + self.upsample = nn.Upsample(scale_factor=2, mode="nearest") + self.cv2 = Conv(c_, c_, k=3) + self.cv3 = Conv(c_, c2) + + def forward(self, x): + """Performs forward pass, upsampling and applying convolutions for YOLOv3 segmentation.""" + return self.cv3(self.cv2(self.upsample(self.cv1(x)))) + + +class Classify(nn.Module): + """Performs image classification using YOLOv3-based architecture with convolutional, pooling, and dropout layers.""" + + def __init__( + self, c1, c2, k=1, s=1, p=None, g=1, dropout_p=0.0 + ): # ch_in, ch_out, kernel, stride, padding, groups, dropout probability + """Initializes YOLOv3 classification head with convolution, pooling and dropout layers for feature extraction + and classification. + """ + super().__init__() + c_ = 1280 # efficientnet_b0 size + self.conv = Conv(c1, c_, k, s, autopad(k, p), g) + self.pool = nn.AdaptiveAvgPool2d(1) # to x(b,c_,1,1) + self.drop = nn.Dropout(p=dropout_p, inplace=True) + self.linear = nn.Linear(c_, c2) # to x(b,c2) + + def forward(self, x): + """Processes input tensor `x` through convolutions and pooling, optionally concatenating lists of tensors, and + returns linear output. + """ + if isinstance(x, list): + x = torch.cat(x, 1) + return self.linear(self.drop(self.pool(self.conv(x)).flatten(1))) diff --git a/models/experimental.py b/models/experimental.py new file mode 100644 index 0000000000..db0f20514e --- /dev/null +++ b/models/experimental.py @@ -0,0 +1,130 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Experimental modules.""" + +import math + +import numpy as np +import torch +import torch.nn as nn +from ultralytics.utils.patches import torch_load + +from utils.downloads import attempt_download + + +class Sum(nn.Module): + """Computes the weighted or unweighted sum of multiple input layers per https://arxiv.org/abs/1911.09070.""" + + def __init__(self, n, weight=False): # n: number of inputs + """Initializes a module to compute weighted/unweighted sum of n inputs, with optional learning weights. + + https://arxiv.org/abs/1911.09070 + """ + super().__init__() + self.weight = weight # apply weights boolean + self.iter = range(n - 1) # iter object + if weight: + self.w = nn.Parameter(-torch.arange(1.0, n) / 2, requires_grad=True) # layer weights + + def forward(self, x): + """Performs forward pass, blending `x` elements with optional learnable weights. + + See https://arxiv.org/abs/1911.09070 for more. + """ + y = x[0] # no weight + if self.weight: + w = torch.sigmoid(self.w) * 2 + for i in self.iter: + y = y + x[i + 1] * w[i] + else: + for i in self.iter: + y = y + x[i + 1] + return y + + +class MixConv2d(nn.Module): + """Implements mixed depth-wise convolutions for efficient neural networks; see https://arxiv.org/abs/1907.09595.""" + + def __init__(self, c1, c2, k=(1, 3), s=1, equal_ch=True): # ch_in, ch_out, kernel, stride, ch_strategy + """Initializes MixConv2d with mixed depth-wise convolution layers; details at https://arxiv.org/abs/1907.09595. + """ + super().__init__() + n = len(k) # number of convolutions + if equal_ch: # equal c_ per group + i = torch.linspace(0, n - 1e-6, c2).floor() # c2 indices + c_ = [(i == g).sum() for g in range(n)] # intermediate channels + else: # equal weight.numel() per group + b = [c2] + [0] * n + a = np.eye(n + 1, n, k=-1) + a -= np.roll(a, 1, axis=1) + a *= np.array(k) ** 2 + a[0] = 1 + c_ = np.linalg.lstsq(a, b, rcond=None)[0].round() # solve for equal weight indices, ax = b + + self.m = nn.ModuleList( + [nn.Conv2d(c1, int(c_), k, s, k // 2, groups=math.gcd(c1, int(c_)), bias=False) for k, c_ in zip(k, c_)] + ) + self.bn = nn.BatchNorm2d(c2) + self.act = nn.SiLU() + + def forward(self, x): + """Applies a series of convolutions, batch normalization, and SiLU activation to input tensor `x`.""" + return self.act(self.bn(torch.cat([m(x) for m in self.m], 1))) + + +class Ensemble(nn.ModuleList): + """Combines outputs from multiple models to improve inference results.""" + + def __init__(self): + """Initializes an ensemble of models to combine their outputs.""" + super().__init__() + + def forward(self, x, augment=False, profile=False, visualize=False): + """Applies ensemble of models on input `x`, with options for augmentation, profiling, and visualization, + returning inference outputs. + """ + y = [module(x, augment, profile, visualize)[0] for module in self] + # y = torch.stack(y).max(0)[0] # max ensemble + # y = torch.stack(y).mean(0) # mean ensemble + y = torch.cat(y, 1) # nms ensemble + return y, None # inference, train output + + +def attempt_load(weights, device=None, inplace=True, fuse=True): + """Loads an ensemble or single model weights, supports device placement and model fusion.""" + from models.yolo import Detect, Model + + model = Ensemble() + for w in weights if isinstance(weights, list) else [weights]: + ckpt = torch_load(attempt_download(w), map_location="cpu") # load + ckpt = (ckpt.get("ema") or ckpt["model"]).to(device).float() # FP32 model + + # Model compatibility updates + if not hasattr(ckpt, "stride"): + ckpt.stride = torch.tensor([32.0]) + if hasattr(ckpt, "names") and isinstance(ckpt.names, (list, tuple)): + ckpt.names = dict(enumerate(ckpt.names)) # convert to dict + + model.append(ckpt.fuse().eval() if fuse and hasattr(ckpt, "fuse") else ckpt.eval()) # model in eval mode + + # Module compatibility updates + for m in model.modules(): + t = type(m) + if t in (nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU, Detect, Model): + m.inplace = inplace # torch 1.7.0 compatibility + if t is Detect and not isinstance(m.anchor_grid, list): + delattr(m, "anchor_grid") + setattr(m, "anchor_grid", [torch.zeros(1)] * m.nl) + elif t is nn.Upsample and not hasattr(m, "recompute_scale_factor"): + m.recompute_scale_factor = None # torch 1.11.0 compatibility + + # Return model + if len(model) == 1: + return model[-1] + + # Return detection ensemble + print(f"Ensemble created with {weights}\n") + for k in "names", "nc", "yaml": + setattr(model, k, getattr(model[0], k)) + model.stride = model[torch.argmax(torch.tensor([m.stride.max() for m in model])).int()].stride # max stride + assert all(model[0].nc == m.nc for m in model), f"Models have different class counts: {[m.nc for m in model]}" + return model diff --git a/models/hub/anchors.yaml b/models/hub/anchors.yaml new file mode 100644 index 0000000000..0f3e288e16 --- /dev/null +++ b/models/hub/anchors.yaml @@ -0,0 +1,57 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Default anchors for COCO data + +# P5 ------------------------------------------------------------------------------------------------------------------- +# P5-640: +anchors_p5_640: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# P6 ------------------------------------------------------------------------------------------------------------------- +# P6-640: thr=0.25: 0.9964 BPR, 5.54 anchors past thr, n=12, img_size=640, metric_all=0.281/0.716-mean/best, past_thr=0.469-mean: 9,11, 21,19, 17,41, 43,32, 39,70, 86,64, 65,131, 134,130, 120,265, 282,180, 247,354, 512,387 +anchors_p6_640: + - [9, 11, 21, 19, 17, 41] # P3/8 + - [43, 32, 39, 70, 86, 64] # P4/16 + - [65, 131, 134, 130, 120, 265] # P5/32 + - [282, 180, 247, 354, 512, 387] # P6/64 + +# P6-1280: thr=0.25: 0.9950 BPR, 5.55 anchors past thr, n=12, img_size=1280, metric_all=0.281/0.714-mean/best, past_thr=0.468-mean: 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792 +anchors_p6_1280: + - [19, 27, 44, 40, 38, 94] # P3/8 + - [96, 68, 86, 152, 180, 137] # P4/16 + - [140, 301, 303, 264, 238, 542] # P5/32 + - [436, 615, 739, 380, 925, 792] # P6/64 + +# P6-1920: thr=0.25: 0.9950 BPR, 5.55 anchors past thr, n=12, img_size=1920, metric_all=0.281/0.714-mean/best, past_thr=0.468-mean: 28,41, 67,59, 57,141, 144,103, 129,227, 270,205, 209,452, 455,396, 358,812, 653,922, 1109,570, 1387,1187 +anchors_p6_1920: + - [28, 41, 67, 59, 57, 141] # P3/8 + - [144, 103, 129, 227, 270, 205] # P4/16 + - [209, 452, 455, 396, 358, 812] # P5/32 + - [653, 922, 1109, 570, 1387, 1187] # P6/64 + +# P7 ------------------------------------------------------------------------------------------------------------------- +# P7-640: thr=0.25: 0.9962 BPR, 6.76 anchors past thr, n=15, img_size=640, metric_all=0.275/0.733-mean/best, past_thr=0.466-mean: 11,11, 13,30, 29,20, 30,46, 61,38, 39,92, 78,80, 146,66, 79,163, 149,150, 321,143, 157,303, 257,402, 359,290, 524,372 +anchors_p7_640: + - [11, 11, 13, 30, 29, 20] # P3/8 + - [30, 46, 61, 38, 39, 92] # P4/16 + - [78, 80, 146, 66, 79, 163] # P5/32 + - [149, 150, 321, 143, 157, 303] # P6/64 + - [257, 402, 359, 290, 524, 372] # P7/128 + +# P7-1280: thr=0.25: 0.9968 BPR, 6.71 anchors past thr, n=15, img_size=1280, metric_all=0.273/0.732-mean/best, past_thr=0.463-mean: 19,22, 54,36, 32,77, 70,83, 138,71, 75,173, 165,159, 148,334, 375,151, 334,317, 251,626, 499,474, 750,326, 534,814, 1079,818 +anchors_p7_1280: + - [19, 22, 54, 36, 32, 77] # P3/8 + - [70, 83, 138, 71, 75, 173] # P4/16 + - [165, 159, 148, 334, 375, 151] # P5/32 + - [334, 317, 251, 626, 499, 474] # P6/64 + - [750, 326, 534, 814, 1079, 818] # P7/128 + +# P7-1920: thr=0.25: 0.9968 BPR, 6.71 anchors past thr, n=15, img_size=1920, metric_all=0.273/0.732-mean/best, past_thr=0.463-mean: 29,34, 81,55, 47,115, 105,124, 207,107, 113,259, 247,238, 222,500, 563,227, 501,476, 376,939, 749,711, 1126,489, 801,1222, 1618,1227 +anchors_p7_1920: + - [29, 34, 81, 55, 47, 115] # P3/8 + - [105, 124, 207, 107, 113, 259] # P4/16 + - [247, 238, 222, 500, 563, 227] # P5/32 + - [501, 476, 376, 939, 749, 711] # P6/64 + - [1126, 489, 801, 1222, 1618, 1227] # P7/128 diff --git a/models/hub/yolov5-bifpn.yaml b/models/hub/yolov5-bifpn.yaml new file mode 100644 index 0000000000..fba3fe5f7d --- /dev/null +++ b/models/hub/yolov5-bifpn.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 BiFPN head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14, 6], 1, Concat, [1]], # cat P4 <--- BiFPN change + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/hub/yolov5-fpn.yaml b/models/hub/yolov5-fpn.yaml new file mode 100644 index 0000000000..4411d1cc03 --- /dev/null +++ b/models/hub/yolov5-fpn.yaml @@ -0,0 +1,43 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 FPN head +head: [ + [-1, 3, C3, [1024, False]], # 10 (P5/32-large) + + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Conv, [512, 1, 1]], + [-1, 3, C3, [512, False]], # 14 (P4/16-medium) + + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 1, Conv, [256, 1, 1]], + [-1, 3, C3, [256, False]], # 18 (P3/8-small) + + [[18, 14, 10], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/hub/yolov5-p2.yaml b/models/hub/yolov5-p2.yaml new file mode 100644 index 0000000000..e47d39e4eb --- /dev/null +++ b/models/hub/yolov5-p2.yaml @@ -0,0 +1,55 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: 3 # AutoAnchor evolves 3 anchors per P output layer + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head with (P2, P3, P4, P5) outputs +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 2], 1, Concat, [1]], # cat backbone P2 + [-1, 1, C3, [128, False]], # 21 (P2/4-xsmall) + + [-1, 1, Conv, [128, 3, 2]], + [[-1, 18], 1, Concat, [1]], # cat head P3 + [-1, 3, C3, [256, False]], # 24 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 27 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 30 (P5/32-large) + + [[21, 24, 27, 30], 1, Detect, [nc, anchors]], # Detect(P2, P3, P4, P5) + ] diff --git a/models/hub/yolov5-p34.yaml b/models/hub/yolov5-p34.yaml new file mode 100644 index 0000000000..17e46f7bdc --- /dev/null +++ b/models/hub/yolov5-p34.yaml @@ -0,0 +1,42 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple +anchors: 3 # AutoAnchor evolves 3 anchors per P output layer + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head with (P3, P4) outputs +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [[17, 20], 1, Detect, [nc, anchors]], # Detect(P3, P4) + ] diff --git a/models/hub/yolov5-p6.yaml b/models/hub/yolov5-p6.yaml new file mode 100644 index 0000000000..dbc1ae4d0b --- /dev/null +++ b/models/hub/yolov5-p6.yaml @@ -0,0 +1,57 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: 3 # AutoAnchor evolves 3 anchors per P output layer + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 11 + ] + +# YOLOv5 v6.0 head with (P3, P4, P5, P6) outputs +head: [ + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 15 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 19 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 23 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 20], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 26 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 16], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 29 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 12], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) + + [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) + ] diff --git a/models/hub/yolov5-p7.yaml b/models/hub/yolov5-p7.yaml new file mode 100644 index 0000000000..2c1706992e --- /dev/null +++ b/models/hub/yolov5-p7.yaml @@ -0,0 +1,68 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: 3 # AutoAnchor evolves 3 anchors per P output layer + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, Conv, [1280, 3, 2]], # 11-P7/128 + [-1, 3, C3, [1280]], + [-1, 1, SPPF, [1280, 5]], # 13 + ] + +# YOLOv5 v6.0 head with (P3, P4, P5, P6, P7) outputs +head: [ + [-1, 1, Conv, [1024, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 10], 1, Concat, [1]], # cat backbone P6 + [-1, 3, C3, [1024, False]], # 17 + + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 21 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 25 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 29 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 26], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 32 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 22], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 35 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 18], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 38 (P6/64-xlarge) + + [-1, 1, Conv, [1024, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P7 + [-1, 3, C3, [1280, False]], # 41 (P7/128-xxlarge) + + [[29, 32, 35, 38, 41], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6, P7) + ] diff --git a/models/hub/yolov5-panet.yaml b/models/hub/yolov5-panet.yaml new file mode 100644 index 0000000000..68a7175661 --- /dev/null +++ b/models/hub/yolov5-panet.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 PANet head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/hub/yolov5l6.yaml b/models/hub/yolov5l6.yaml new file mode 100644 index 0000000000..223f681bf7 --- /dev/null +++ b/models/hub/yolov5l6.yaml @@ -0,0 +1,61 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [19, 27, 44, 40, 38, 94] # P3/8 + - [96, 68, 86, 152, 180, 137] # P4/16 + - [140, 301, 303, 264, 238, 542] # P5/32 + - [436, 615, 739, 380, 925, 792] # P6/64 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 11 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 15 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 19 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 23 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 20], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 26 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 16], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 29 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 12], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) + + [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) + ] diff --git a/models/hub/yolov5m6.yaml b/models/hub/yolov5m6.yaml new file mode 100644 index 0000000000..6878d89960 --- /dev/null +++ b/models/hub/yolov5m6.yaml @@ -0,0 +1,61 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.67 # model depth multiple +width_multiple: 0.75 # layer channel multiple +anchors: + - [19, 27, 44, 40, 38, 94] # P3/8 + - [96, 68, 86, 152, 180, 137] # P4/16 + - [140, 301, 303, 264, 238, 542] # P5/32 + - [436, 615, 739, 380, 925, 792] # P6/64 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 11 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 15 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 19 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 23 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 20], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 26 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 16], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 29 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 12], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) + + [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) + ] diff --git a/models/hub/yolov5n6.yaml b/models/hub/yolov5n6.yaml new file mode 100644 index 0000000000..0d454c9ca3 --- /dev/null +++ b/models/hub/yolov5n6.yaml @@ -0,0 +1,61 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.25 # layer channel multiple +anchors: + - [19, 27, 44, 40, 38, 94] # P3/8 + - [96, 68, 86, 152, 180, 137] # P4/16 + - [140, 301, 303, 264, 238, 542] # P5/32 + - [436, 615, 739, 380, 925, 792] # P6/64 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 11 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 15 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 19 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 23 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 20], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 26 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 16], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 29 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 12], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) + + [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) + ] diff --git a/models/hub/yolov5s-LeakyReLU.yaml b/models/hub/yolov5s-LeakyReLU.yaml new file mode 100644 index 0000000000..61d6d33176 --- /dev/null +++ b/models/hub/yolov5s-LeakyReLU.yaml @@ -0,0 +1,50 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +activation: nn.LeakyReLU(0.1) # <----- Conv() activation used throughout entire YOLOv5 model +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/hub/yolov5s-ghost.yaml b/models/hub/yolov5s-ghost.yaml new file mode 100644 index 0000000000..53695ae48a --- /dev/null +++ b/models/hub/yolov5s-ghost.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, GhostConv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3Ghost, [128]], + [-1, 1, GhostConv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3Ghost, [256]], + [-1, 1, GhostConv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3Ghost, [512]], + [-1, 1, GhostConv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3Ghost, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, GhostConv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3Ghost, [512, False]], # 13 + + [-1, 1, GhostConv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3Ghost, [256, False]], # 17 (P3/8-small) + + [-1, 1, GhostConv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3Ghost, [512, False]], # 20 (P4/16-medium) + + [-1, 1, GhostConv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3Ghost, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/hub/yolov5s-transformer.yaml b/models/hub/yolov5s-transformer.yaml new file mode 100644 index 0000000000..213e4dac13 --- /dev/null +++ b/models/hub/yolov5s-transformer.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3TR, [1024]], # 9 <--- C3TR() Transformer module + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/hub/yolov5s6.yaml b/models/hub/yolov5s6.yaml new file mode 100644 index 0000000000..6e69964a95 --- /dev/null +++ b/models/hub/yolov5s6.yaml @@ -0,0 +1,61 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple +anchors: + - [19, 27, 44, 40, 38, 94] # P3/8 + - [96, 68, 86, 152, 180, 137] # P4/16 + - [140, 301, 303, 264, 238, 542] # P5/32 + - [436, 615, 739, 380, 925, 792] # P6/64 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 11 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 15 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 19 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 23 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 20], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 26 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 16], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 29 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 12], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) + + [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) + ] diff --git a/models/hub/yolov5x6.yaml b/models/hub/yolov5x6.yaml new file mode 100644 index 0000000000..33a8525f10 --- /dev/null +++ b/models/hub/yolov5x6.yaml @@ -0,0 +1,61 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.33 # model depth multiple +width_multiple: 1.25 # layer channel multiple +anchors: + - [19, 27, 44, 40, 38, 94] # P3/8 + - [96, 68, 86, 152, 180, 137] # P4/16 + - [140, 301, 303, 264, 238, 542] # P5/32 + - [436, 615, 739, 380, 925, 792] # P6/64 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [768, 3, 2]], # 7-P5/32 + [-1, 3, C3, [768]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P6/64 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 11 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [768, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P5 + [-1, 3, C3, [768, False]], # 15 + + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 19 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 23 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 20], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 26 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 16], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [768, False]], # 29 (P5/32-large) + + [-1, 1, Conv, [768, 3, 2]], + [[-1, 12], 1, Concat, [1]], # cat head P6 + [-1, 3, C3, [1024, False]], # 32 (P6/64-xlarge) + + [[23, 26, 29, 32], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6) + ] diff --git a/models/segment/yolov5l-seg.yaml b/models/segment/yolov5l-seg.yaml new file mode 100644 index 0000000000..824e8aec22 --- /dev/null +++ b/models/segment/yolov5l-seg.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Segment, [nc, anchors, 32, 256]], # Detect(P3, P4, P5) + ] diff --git a/models/segment/yolov5m-seg.yaml b/models/segment/yolov5m-seg.yaml new file mode 100644 index 0000000000..c3c1e668af --- /dev/null +++ b/models/segment/yolov5m-seg.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.67 # model depth multiple +width_multiple: 0.75 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Segment, [nc, anchors, 32, 256]], # Detect(P3, P4, P5) + ] diff --git a/models/segment/yolov5n-seg.yaml b/models/segment/yolov5n-seg.yaml new file mode 100644 index 0000000000..2461e4160f --- /dev/null +++ b/models/segment/yolov5n-seg.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.25 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Segment, [nc, anchors, 32, 256]], # Detect(P3, P4, P5) + ] diff --git a/models/segment/yolov5s-seg.yaml b/models/segment/yolov5s-seg.yaml new file mode 100644 index 0000000000..fac7664a35 --- /dev/null +++ b/models/segment/yolov5s-seg.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.5 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Segment, [nc, anchors, 32, 256]], # Detect(P3, P4, P5) + ] diff --git a/models/segment/yolov5x-seg.yaml b/models/segment/yolov5x-seg.yaml new file mode 100644 index 0000000000..d3c457a6db --- /dev/null +++ b/models/segment/yolov5x-seg.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.33 # model depth multiple +width_multiple: 1.25 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Segment, [nc, anchors, 32, 256]], # Detect(P3, P4, P5) + ] diff --git a/models/tf.py b/models/tf.py new file mode 100644 index 0000000000..d3b933fea2 --- /dev/null +++ b/models/tf.py @@ -0,0 +1,746 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +TensorFlow, Keras and TFLite versions of YOLOv3 +Authored by https://github.com/zldrobit in PR https://github.com/ultralytics/yolov5/pull/1127. + +Usage: + $ python models/tf.py --weights yolov5s.pt + +Export: + $ python export.py --weights yolov5s.pt --include saved_model pb tflite tfjs +""" + +import argparse +import sys +from copy import deepcopy +from pathlib import Path + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +# ROOT = ROOT.relative_to(Path.cwd()) # relative + +import numpy as np +import tensorflow as tf +import torch +import torch.nn as nn +from tensorflow import keras + +from models.common import ( + C3, + SPP, + SPPF, + Bottleneck, + BottleneckCSP, + C3x, + Concat, + Conv, + CrossConv, + DWConv, + DWConvTranspose2d, + Focus, + autopad, +) +from models.experimental import MixConv2d, attempt_load +from models.yolo import Detect, Segment +from utils.activations import SiLU +from utils.general import LOGGER, make_divisible, print_args + + +class TFBN(keras.layers.Layer): + """A TensorFlow BatchNormalization wrapper layer initialized with specific weights for YOLOv3 models.""" + + def __init__(self, w=None): + """Initializes TFBN with weights, wrapping TensorFlow's BatchNormalization layer with specific initializers.""" + super().__init__() + self.bn = keras.layers.BatchNormalization( + beta_initializer=keras.initializers.Constant(w.bias.numpy()), + gamma_initializer=keras.initializers.Constant(w.weight.numpy()), + moving_mean_initializer=keras.initializers.Constant(w.running_mean.numpy()), + moving_variance_initializer=keras.initializers.Constant(w.running_var.numpy()), + epsilon=w.eps, + ) + + def call(self, inputs): + """Applies batch normalization on inputs using initialized parameters.""" + return self.bn(inputs) + + +class TFPad(keras.layers.Layer): + """Pads inputs in spatial dimensions 1 and 2 using specified padding width as an int or (int, int) tuple/list.""" + + def __init__(self, pad): + """Initializes a padding layer for spatial dimensions 1 and 2, with `pad` as int or (int, int) tuple/list.""" + super().__init__() + if isinstance(pad, int): + self.pad = tf.constant([[0, 0], [pad, pad], [pad, pad], [0, 0]]) + else: # tuple/list + self.pad = tf.constant([[0, 0], [pad[0], pad[0]], [pad[1], pad[1]], [0, 0]]) + + def call(self, inputs): + """Applies constant padding to inputs with `pad` specifying padding width; `pad` can be an int or (int, int) + tuple/list. + """ + return tf.pad(inputs, self.pad, mode="constant", constant_values=0) + + +class TFConv(keras.layers.Layer): + """Implements a standard convolutional layer with optional batch normalization and activation for TensorFlow.""" + + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True, w=None): + """Initializes a convolutional layer with customizable filters, kernel size, stride, padding, groups, and + activation. + """ + super().__init__() + assert g == 1, "TF v2.2 Conv2D does not support 'groups' argument" + # TensorFlow convolution padding is inconsistent with PyTorch (e.g. k=3 s=2 'SAME' padding) + # see https://stackoverflow.com/questions/52975843/comparing-conv2d-with-padding-between-tensorflow-and-pytorch + conv = keras.layers.Conv2D( + filters=c2, + kernel_size=k, + strides=s, + padding="SAME" if s == 1 else "VALID", + use_bias=not hasattr(w, "bn"), + kernel_initializer=keras.initializers.Constant(w.conv.weight.permute(2, 3, 1, 0).numpy()), + bias_initializer="zeros" if hasattr(w, "bn") else keras.initializers.Constant(w.conv.bias.numpy()), + ) + self.conv = conv if s == 1 else keras.Sequential([TFPad(autopad(k, p)), conv]) + self.bn = TFBN(w.bn) if hasattr(w, "bn") else tf.identity + self.act = activations(w.act) if act else tf.identity + + def call(self, inputs): + """Executes the convolution, batch normalization, and activation on the input data.""" + return self.act(self.bn(self.conv(inputs))) + + +class TFDWConv(keras.layers.Layer): + """Implements a depthwise convolutional layer with optional batch normalization and activation for TensorFlow.""" + + def __init__(self, c1, c2, k=1, s=1, p=None, act=True, w=None): + """Initializes a depthwise convolutional layer with optional batch normalization and activation.""" + super().__init__() + assert c2 % c1 == 0, f"TFDWConv() output={c2} must be a multiple of input={c1} channels" + conv = keras.layers.DepthwiseConv2D( + kernel_size=k, + depth_multiplier=c2 // c1, + strides=s, + padding="SAME" if s == 1 else "VALID", + use_bias=not hasattr(w, "bn"), + depthwise_initializer=keras.initializers.Constant(w.conv.weight.permute(2, 3, 1, 0).numpy()), + bias_initializer="zeros" if hasattr(w, "bn") else keras.initializers.Constant(w.conv.bias.numpy()), + ) + self.conv = conv if s == 1 else keras.Sequential([TFPad(autopad(k, p)), conv]) + self.bn = TFBN(w.bn) if hasattr(w, "bn") else tf.identity + self.act = activations(w.act) if act else tf.identity + + def call(self, inputs): + """Applies convolution, batch normalization, and activation to the input tensor.""" + return self.act(self.bn(self.conv(inputs))) + + +class TFDWConvTranspose2d(keras.layers.Layer): + """Implements a depthwise transposed convolutional layer for TensorFlow with equal input and output channels.""" + + def __init__(self, c1, c2, k=1, s=1, p1=0, p2=0, w=None): + """Initializes TFDWConvTranspose2d with ch_in=c1=ch_out, k=4, p1=1; sets up depthwise Conv2DTranspose layers.""" + super().__init__() + assert c1 == c2, f"TFDWConv() output={c2} must be equal to input={c1} channels" + assert k == 4 and p1 == 1, "TFDWConv() only valid for k=4 and p1=1" + weight, bias = w.weight.permute(2, 3, 1, 0).numpy(), w.bias.numpy() + self.c1 = c1 + self.conv = [ + keras.layers.Conv2DTranspose( + filters=1, + kernel_size=k, + strides=s, + padding="VALID", + output_padding=p2, + use_bias=True, + kernel_initializer=keras.initializers.Constant(weight[..., i : i + 1]), + bias_initializer=keras.initializers.Constant(bias[i]), + ) + for i in range(c1) + ] + + def call(self, inputs): + """Performs a forward pass by applying parallel convolutions to split input tensors and concatenates the + results. + """ + return tf.concat([m(x) for m, x in zip(self.conv, tf.split(inputs, self.c1, 3))], 3)[:, 1:-1, 1:-1] + + +class TFFocus(keras.layers.Layer): + """Focuses spatial information into channel space using a convolutional layer for efficient feature extraction.""" + + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True, w=None): + """Initializes TFFocus layer for efficient information focusing into channel-space with customizable convolution + parameters. + """ + super().__init__() + self.conv = TFConv(c1 * 4, c2, k, s, p, g, act, w.conv) + + def call(self, inputs): # x(b,w,h,c) -> y(b,w/2,h/2,4c) + """Executes TFFocus layer operation, reducing spatial dimensions by 2 and quadrupling channels, input shape + (b,w,h,c). + """ + inputs = [inputs[:, ::2, ::2, :], inputs[:, 1::2, ::2, :], inputs[:, ::2, 1::2, :], inputs[:, 1::2, 1::2, :]] + return self.conv(tf.concat(inputs, 3)) + + +class TFBottleneck(keras.layers.Layer): + """A TensorFlow bottleneck layer with optional shortcut connections, channel expansion, and group convolutions.""" + + def __init__(self, c1, c2, shortcut=True, g=1, e=0.5, w=None): # ch_in, ch_out, shortcut, groups, expansion + """Initializes a standard bottleneck layer with optional shortcut, channel expansion, and group convolutions.""" + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = TFConv(c1, c_, 1, 1, w=w.cv1) + self.cv2 = TFConv(c_, c2, 3, 1, g=g, w=w.cv2) + self.add = shortcut and c1 == c2 + + def call(self, inputs): + """Executes a bottleneck layer with optional shortcut; returns either input + convoluted input or just + convoluted input. + """ + return inputs + self.cv2(self.cv1(inputs)) if self.add else self.cv2(self.cv1(inputs)) + + +class TFCrossConv(keras.layers.Layer): + """Implements a cross convolutional layer with customizable channels, kernel size, stride, groups, and shortcut.""" + + def __init__(self, c1, c2, k=3, s=1, g=1, e=1.0, shortcut=False, w=None): + """Initializes cross convolutional layer with parameters for channel sizes, kernel size, stride, groups, + expansion factor, shortcut option, and weights. + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = TFConv(c1, c_, (1, k), (1, s), w=w.cv1) + self.cv2 = TFConv(c_, c2, (k, 1), (s, 1), g=g, w=w.cv2) + self.add = shortcut and c1 == c2 + + def call(self, inputs): + """Executes the function, optionally adding input to output if shapes match; inputs: tensor [B, C, H, W].""" + return inputs + self.cv2(self.cv1(inputs)) if self.add else self.cv2(self.cv1(inputs)) + + +class TFConv2d(keras.layers.Layer): + """Implements a TensorFlow 2.2+ Conv2D layer as a substitute for PyTorch's Conv2D with customizable parameters.""" + + def __init__(self, c1, c2, k, s=1, g=1, bias=True, w=None): + """Initializes TFConv2d layer for TensorFlow 2.2+, substituting PyTorch Conv2D; c1, c2: channels, k: kernel + size, s: stride. + """ + super().__init__() + assert g == 1, "TF v2.2 Conv2D does not support 'groups' argument" + self.conv = keras.layers.Conv2D( + filters=c2, + kernel_size=k, + strides=s, + padding="VALID", + use_bias=bias, + kernel_initializer=keras.initializers.Constant(w.weight.permute(2, 3, 1, 0).numpy()), + bias_initializer=keras.initializers.Constant(w.bias.numpy()) if bias else None, + ) + + def call(self, inputs): + """Applies convolution to the inputs using initialized weights and biases, returning the convolved output.""" + return self.conv(inputs) + + +class TFBottleneckCSP(keras.layers.Layer): + """Implements a Cross Stage Partial (CSP) Bottleneck layer for efficient feature extraction in neural networks.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5, w=None): + """Initializes CSP Bottleneck layer with channel configurations and optional shortcut, groups, expansion, and + weights. + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = TFConv(c1, c_, 1, 1, w=w.cv1) + self.cv2 = TFConv2d(c1, c_, 1, 1, bias=False, w=w.cv2) + self.cv3 = TFConv2d(c_, c_, 1, 1, bias=False, w=w.cv3) + self.cv4 = TFConv(2 * c_, c2, 1, 1, w=w.cv4) + self.bn = TFBN(w.bn) + self.act = lambda x: keras.activations.swish(x) + self.m = keras.Sequential([TFBottleneck(c_, c_, shortcut, g, e=1.0, w=w.m[j]) for j in range(n)]) + + def call(self, inputs): + """Executes the forward pass by combining features through convolutions, activation, and batch normalization.""" + y1 = self.cv3(self.m(self.cv1(inputs))) + y2 = self.cv2(inputs) + return self.cv4(self.act(self.bn(tf.concat((y1, y2), axis=3)))) + + +class TFC3(keras.layers.Layer): + """CSP Bottleneck layer with 3 convolutions for enhanced feature extraction and integration in TensorFlow models.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5, w=None): + """Initializes a CSP Bottleneck layer with 3 convolutions for channel manipulation and feature integration.""" + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = TFConv(c1, c_, 1, 1, w=w.cv1) + self.cv2 = TFConv(c1, c_, 1, 1, w=w.cv2) + self.cv3 = TFConv(2 * c_, c2, 1, 1, w=w.cv3) + self.m = keras.Sequential([TFBottleneck(c_, c_, shortcut, g, e=1.0, w=w.m[j]) for j in range(n)]) + + def call(self, inputs): + """Executes model forwarding, combining features using TF layers and concatenation, returning the resulting + tensor. + """ + return self.cv3(tf.concat((self.m(self.cv1(inputs)), self.cv2(inputs)), axis=3)) + + +class TFC3x(keras.layers.Layer): + """Implements a CSP Bottleneck layer with cross-convolutions for enhanced feature extraction in YOLOv3 models.""" + + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5, w=None): + """Initializes a TFC3x layer with cross-convolutions, expanding and concatenating features for given channel + inputs and outputs. + """ + super().__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = TFConv(c1, c_, 1, 1, w=w.cv1) + self.cv2 = TFConv(c1, c_, 1, 1, w=w.cv2) + self.cv3 = TFConv(2 * c_, c2, 1, 1, w=w.cv3) + self.m = keras.Sequential( + [TFCrossConv(c_, c_, k=3, s=1, g=g, e=1.0, shortcut=shortcut, w=w.m[j]) for j in range(n)] + ) + + def call(self, inputs): + """Executes model forwarding, combining features through conv layers and concatenation.""" + return self.cv3(tf.concat((self.m(self.cv1(inputs)), self.cv2(inputs)), axis=3)) + + +class TFSPP(keras.layers.Layer): + """Implements Spatial Pyramid Pooling (SPP) for YOLOv3-SPP with configurable channels and kernel sizes.""" + + def __init__(self, c1, c2, k=(5, 9, 13), w=None): + """Initializes a Spatial Pyramid Pooling layer for YOLOv3-SPP with configurable in/out channels and kernel + sizes. + """ + super().__init__() + c_ = c1 // 2 # hidden channels + self.cv1 = TFConv(c1, c_, 1, 1, w=w.cv1) + self.cv2 = TFConv(c_ * (len(k) + 1), c2, 1, 1, w=w.cv2) + self.m = [keras.layers.MaxPool2D(pool_size=x, strides=1, padding="SAME") for x in k] + + def call(self, inputs): + """Applies transformations and concatenates feature maps from multiple kernel-sized max-poolings.""" + x = self.cv1(inputs) + return self.cv2(tf.concat([x] + [m(x) for m in self.m], 3)) + + +class TFSPPF(keras.layers.Layer): + """Implements a fast spatial pyramid pooling layer for efficient multi-scale feature extraction in YOLOv3 models.""" + + def __init__(self, c1, c2, k=5, w=None): + """Initializes a Spatial Pyramid Pooling-Fast layer with specified channels, kernel size, and optional weights. + """ + super().__init__() + c_ = c1 // 2 # hidden channels + self.cv1 = TFConv(c1, c_, 1, 1, w=w.cv1) + self.cv2 = TFConv(c_ * 4, c2, 1, 1, w=w.cv2) + self.m = keras.layers.MaxPool2D(pool_size=k, strides=1, padding="SAME") + + def call(self, inputs): + """Applies two TFConvs and max pooling with concatenation, returning the processed tensor.""" + x = self.cv1(inputs) + y1 = self.m(x) + y2 = self.m(y1) + return self.cv2(tf.concat([x, y1, y2, self.m(y2)], 3)) + + +class TFDetect(keras.layers.Layer): + """Implements YOLOv3 detection layer in TensorFlow for object detection with configurable classes and anchors.""" + + def __init__(self, nc=80, anchors=(), ch=(), imgsz=(640, 640), w=None): # detection layer + """Initializes a YOLOv3 detection layer with specified classes, anchors, channels, image size, and weights.""" + super().__init__() + self.stride = tf.convert_to_tensor(w.stride.numpy(), dtype=tf.float32) + self.nc = nc # number of classes + self.no = nc + 5 # number of outputs per anchor + self.nl = len(anchors) # number of detection layers + self.na = len(anchors[0]) // 2 # number of anchors + self.grid = [tf.zeros(1)] * self.nl # init grid + self.anchors = tf.convert_to_tensor(w.anchors.numpy(), dtype=tf.float32) + self.anchor_grid = tf.reshape(self.anchors * tf.reshape(self.stride, [self.nl, 1, 1]), [self.nl, 1, -1, 1, 2]) + self.m = [TFConv2d(x, self.no * self.na, 1, w=w.m[i]) for i, x in enumerate(ch)] + self.training = False # set to False after building model + self.imgsz = imgsz + for i in range(self.nl): + ny, nx = self.imgsz[0] // self.stride[i], self.imgsz[1] // self.stride[i] + self.grid[i] = self._make_grid(nx, ny) + + def call(self, inputs): + """Performs inference on inputs, transforming shape to (batch_size, ny*nx, num_anchors, num_outputs) for each + layer. + """ + z = [] # inference output + x = [] + for i in range(self.nl): + x.append(self.m[i](inputs[i])) + # x(bs,20,20,255) to x(bs,3,20,20,85) + ny, nx = self.imgsz[0] // self.stride[i], self.imgsz[1] // self.stride[i] + x[i] = tf.reshape(x[i], [-1, ny * nx, self.na, self.no]) + + if not self.training: # inference + y = x[i] + grid = tf.transpose(self.grid[i], [0, 2, 1, 3]) - 0.5 + anchor_grid = tf.transpose(self.anchor_grid[i], [0, 2, 1, 3]) * 4 + xy = (tf.sigmoid(y[..., 0:2]) * 2 + grid) * self.stride[i] # xy + wh = tf.sigmoid(y[..., 2:4]) ** 2 * anchor_grid + # Normalize xywh to 0-1 to reduce calibration error + xy /= tf.constant([[self.imgsz[1], self.imgsz[0]]], dtype=tf.float32) + wh /= tf.constant([[self.imgsz[1], self.imgsz[0]]], dtype=tf.float32) + y = tf.concat([xy, wh, tf.sigmoid(y[..., 4 : 5 + self.nc]), y[..., 5 + self.nc :]], -1) + z.append(tf.reshape(y, [-1, self.na * ny * nx, self.no])) + + return tf.transpose(x, [0, 2, 1, 3]) if self.training else (tf.concat(z, 1),) + + @staticmethod + def _make_grid(nx=20, ny=20): + """Generates a grid of shape [1, 1, ny * nx, 2] with ranges [0, nx) and [0, ny) for object detection.""" + # return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() + xv, yv = tf.meshgrid(tf.range(nx), tf.range(ny)) + return tf.cast(tf.reshape(tf.stack([xv, yv], 2), [1, 1, ny * nx, 2]), dtype=tf.float32) + + +class TFSegment(TFDetect): + """Implements YOLOv3 segmentation head for object detection and segmentation tasks using TensorFlow.""" + + def __init__(self, nc=80, anchors=(), nm=32, npr=256, ch=(), imgsz=(640, 640), w=None): + """Initializes a YOLOv3 Segment head with customizable parameters for segmentation models.""" + super().__init__(nc, anchors, ch, imgsz, w) + self.nm = nm # number of masks + self.npr = npr # number of protos + self.no = 5 + nc + self.nm # number of outputs per anchor + self.m = [TFConv2d(x, self.no * self.na, 1, w=w.m[i]) for i, x in enumerate(ch)] # output conv + self.proto = TFProto(ch[0], self.npr, self.nm, w=w.proto) # protos + self.detect = TFDetect.call + + def call(self, x): + """Executes model's forward pass, returning predictions and optionally full-size protos if training.""" + p = self.proto(x[0]) + # p = TFUpsample(None, scale_factor=4, mode='nearest')(self.proto(x[0])) # (optional) full-size protos + p = tf.transpose(p, [0, 3, 1, 2]) # from shape(1,160,160,32) to shape(1,32,160,160) + x = self.detect(self, x) + return (x, p) if self.training else (x[0], p) + + +class TFProto(keras.layers.Layer): + """Implements a TensorFlow layer for feature processing with convolution and upsample operations.""" + + def __init__(self, c1, c_=256, c2=32, w=None): + """Initializes a TFProto layer with convolution and upsample operations for feature processing.""" + super().__init__() + self.cv1 = TFConv(c1, c_, k=3, w=w.cv1) + self.upsample = TFUpsample(None, scale_factor=2, mode="nearest") + self.cv2 = TFConv(c_, c_, k=3, w=w.cv2) + self.cv3 = TFConv(c_, c2, w=w.cv3) + + def call(self, inputs): + """Performs convolution and upsample operations on input features, returning processed features.""" + return self.cv3(self.cv2(self.upsample(self.cv1(inputs)))) + + +class TFUpsample(keras.layers.Layer): + """Implements an upsample layer using TensorFlow with specified size, scale factor, and interpolation mode.""" + + def __init__(self, size, scale_factor, mode, w=None): # warning: all arguments needed including 'w' + """Initializes an upsample layer with specific size, doubling scale factor (>0, even), interpolation mode, and + optional weights. + """ + super().__init__() + assert scale_factor % 2 == 0, "scale_factor must be multiple of 2" + self.upsample = lambda x: tf.image.resize(x, (x.shape[1] * scale_factor, x.shape[2] * scale_factor), mode) + # self.upsample = keras.layers.UpSampling2D(size=scale_factor, interpolation=mode) + # with default arguments: align_corners=False, half_pixel_centers=False + # self.upsample = lambda x: tf.raw_ops.ResizeNearestNeighbor(images=x, + # size=(x.shape[1] * 2, x.shape[2] * 2)) + + def call(self, inputs): + """Applies upsample lambda function to the input tensor, returning the upsampled tensor.""" + return self.upsample(inputs) + + +class TFConcat(keras.layers.Layer): + """Concatenates input tensors along the specified dimension (NHWC format) using TensorFlow.""" + + def __init__(self, dimension=1, w=None): + """Initializes a TensorFlow layer to concatenate tensors along the NHWC dimension, requiring dimension=1.""" + super().__init__() + assert dimension == 1, "convert only NCHW to NHWC concat" + self.d = 3 + + def call(self, inputs): + """Concatenates tensors along NHWC dimension (3rd axis); `inputs` is a list of tensors.""" + return tf.concat(inputs, self.d) + + +def parse_model(d, ch, model, imgsz): # model_dict, input_channels(3) + """Parses model configuration and constructs Keras model with layer connectivity, returning the model and save list. + """ + LOGGER.info(f"\n{'':>3}{'from':>18}{'n':>3}{'params':>10} {'module':<40}{'arguments':<30}") + anchors, nc, gd, gw = d["anchors"], d["nc"], d["depth_multiple"], d["width_multiple"] + na = (len(anchors[0]) // 2) if isinstance(anchors, list) else anchors # number of anchors + no = na * (nc + 5) # number of outputs = anchors * (classes + 5) + + layers, save, c2 = [], [], ch[-1] # layers, savelist, ch out + for i, (f, n, m, args) in enumerate(d["backbone"] + d["head"]): # from, number, module, args + m_str = m + m = eval(m) if isinstance(m, str) else m # eval strings + for j, a in enumerate(args): + try: + args[j] = eval(a) if isinstance(a, str) else a # eval strings + except NameError: + pass + + n = max(round(n * gd), 1) if n > 1 else n # depth gain + if m in [ + nn.Conv2d, + Conv, + DWConv, + DWConvTranspose2d, + Bottleneck, + SPP, + SPPF, + MixConv2d, + Focus, + CrossConv, + BottleneckCSP, + C3, + C3x, + ]: + c1, c2 = ch[f], args[0] + c2 = make_divisible(c2 * gw, 8) if c2 != no else c2 + + args = [c1, c2, *args[1:]] + if m in [BottleneckCSP, C3, C3x]: + args.insert(2, n) + n = 1 + elif m is nn.BatchNorm2d: + args = [ch[f]] + elif m is Concat: + c2 = sum(ch[-1 if x == -1 else x + 1] for x in f) + elif m in [Detect, Segment]: + args.append([ch[x + 1] for x in f]) + if isinstance(args[1], int): # number of anchors + args[1] = [list(range(args[1] * 2))] * len(f) + if m is Segment: + args[3] = make_divisible(args[3] * gw, 8) + args.append(imgsz) + else: + c2 = ch[f] + + tf_m = eval("TF" + m_str.replace("nn.", "")) + m_ = ( + keras.Sequential([tf_m(*args, w=model.model[i][j]) for j in range(n)]) + if n > 1 + else tf_m(*args, w=model.model[i]) + ) # module + + torch_m_ = nn.Sequential(*(m(*args) for _ in range(n))) if n > 1 else m(*args) # module + t = str(m)[8:-2].replace("__main__.", "") # module type + np = sum(x.numel() for x in torch_m_.parameters()) # number params + m_.i, m_.f, m_.type, m_.np = i, f, t, np # attach index, 'from' index, type, number params + LOGGER.info(f"{i:>3}{f!s:>18}{n!s:>3}{np:>10} {t:<40}{args!s:<30}") # print + save.extend(x % i for x in ([f] if isinstance(f, int) else f) if x != -1) # append to savelist + layers.append(m_) + ch.append(c2) + return keras.Sequential(layers), sorted(save) + + +class TFModel: + """TensorFlow implementation of YOLOv3 for object detection, supporting Keras and TFLite models.""" + + def __init__(self, cfg="yolov5s.yaml", ch=3, nc=None, model=None, imgsz=(640, 640)): # model, channels, classes + """Initializes TF YOLOv3 model with config, channels, classes, optional pre-loaded model, and input image size. + """ + super().__init__() + if isinstance(cfg, dict): + self.yaml = cfg # model dict + else: # is *.yaml + import yaml # for torch hub + + self.yaml_file = Path(cfg).name + with open(cfg) as f: + self.yaml = yaml.load(f, Loader=yaml.FullLoader) # model dict + + # Define model + if nc and nc != self.yaml["nc"]: + LOGGER.info(f"Overriding {cfg} nc={self.yaml['nc']} with nc={nc}") + self.yaml["nc"] = nc # override yaml value + self.model, self.savelist = parse_model(deepcopy(self.yaml), ch=[ch], model=model, imgsz=imgsz) + + def predict( + self, + inputs, + tf_nms=False, + agnostic_nms=False, + topk_per_class=100, + topk_all=100, + iou_thres=0.45, + conf_thres=0.25, + ): + """Performs inference on input data using a YOLOv3 model, including optional TensorFlow NMS.""" + y = [] # outputs + x = inputs + for m in self.model.layers: + if m.f != -1: # if not from previous layer + x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers + + x = m(x) # run + y.append(x if m.i in self.savelist else None) # save output + + # Add TensorFlow NMS + if tf_nms: + boxes = self._xywh2xyxy(x[0][..., :4]) + probs = x[0][:, :, 4:5] + classes = x[0][:, :, 5:] + scores = probs * classes + if agnostic_nms: + nms = AgnosticNMS()((boxes, classes, scores), topk_all, iou_thres, conf_thres) + else: + boxes = tf.expand_dims(boxes, 2) + nms = tf.image.combined_non_max_suppression( + boxes, scores, topk_per_class, topk_all, iou_thres, conf_thres, clip_boxes=False + ) + return (nms,) + return x # output [1,6300,85] = [xywh, conf, class0, class1, ...] + # x = x[0] # [x(1,6300,85), ...] to x(6300,85) + # xywh = x[..., :4] # x(6300,4) boxes + # conf = x[..., 4:5] # x(6300,1) confidences + # cls = tf.reshape(tf.cast(tf.argmax(x[..., 5:], axis=1), tf.float32), (-1, 1)) # x(6300,1) classes + # return tf.concat([conf, cls, xywh], 1) + + @staticmethod + def _xywh2xyxy(xywh): + """Converts bounding boxes from [x, y, w, h] format to [x1, y1, x2, y2], where xy1=top-left, xy2=bottom- right. + """ + x, y, w, h = tf.split(xywh, num_or_size_splits=4, axis=-1) + return tf.concat([x - w / 2, y - h / 2, x + w / 2, y + h / 2], axis=-1) + + +class AgnosticNMS(keras.layers.Layer): + """Applies class-agnostic non-maximum suppression (NMS) to filter detections by IoU and confidence thresholds.""" + + def call(self, input, topk_all, iou_thres, conf_thres): + """Applies non-maximum suppression (NMS) to filter detections based on IoU, confidence thresholds, and top-K.""" + return tf.map_fn( + lambda x: self._nms(x, topk_all, iou_thres, conf_thres), + input, + fn_output_signature=(tf.float32, tf.float32, tf.float32, tf.int32), + name="agnostic_nms", + ) + + @staticmethod + def _nms(x, topk_all=100, iou_thres=0.45, conf_thres=0.25): # agnostic NMS + """Performs non-max suppression on bounding boxes with class, IoU, and confidence thresholds; returns processed + boxes, scores, classes, and count. + """ + boxes, classes, scores = x + class_inds = tf.cast(tf.argmax(classes, axis=-1), tf.float32) + scores_inp = tf.reduce_max(scores, -1) + selected_inds = tf.image.non_max_suppression( + boxes, scores_inp, max_output_size=topk_all, iou_threshold=iou_thres, score_threshold=conf_thres + ) + selected_boxes = tf.gather(boxes, selected_inds) + padded_boxes = tf.pad( + selected_boxes, + paddings=[[0, topk_all - tf.shape(selected_boxes)[0]], [0, 0]], + mode="CONSTANT", + constant_values=0.0, + ) + selected_scores = tf.gather(scores_inp, selected_inds) + padded_scores = tf.pad( + selected_scores, + paddings=[[0, topk_all - tf.shape(selected_boxes)[0]]], + mode="CONSTANT", + constant_values=-1.0, + ) + selected_classes = tf.gather(class_inds, selected_inds) + padded_classes = tf.pad( + selected_classes, + paddings=[[0, topk_all - tf.shape(selected_boxes)[0]]], + mode="CONSTANT", + constant_values=-1.0, + ) + valid_detections = tf.shape(selected_inds)[0] + return padded_boxes, padded_scores, padded_classes, valid_detections + + +def activations(act=nn.SiLU): + """Converts PyTorch activation functions (LeakyReLU, Hardswish, SiLU) to their TensorFlow counterparts.""" + if isinstance(act, nn.LeakyReLU): + return lambda x: keras.activations.relu(x, alpha=0.1) + elif isinstance(act, nn.Hardswish): + return lambda x: x * tf.nn.relu6(x + 3) * 0.166666667 + elif isinstance(act, (nn.SiLU, SiLU)): + return lambda x: keras.activations.swish(x) + else: + raise Exception(f"no matching TensorFlow activation found for PyTorch activation {act}") + + +def representative_dataset_gen(dataset, ncalib=100): + """Generates a representative dataset for TFLite conversion; yields normalized np arrays from input dataset up to + `ncalib` samples. + """ + for n, (path, img, im0s, vid_cap, string) in enumerate(dataset): + im = np.transpose(img, [1, 2, 0]) + im = np.expand_dims(im, axis=0).astype(np.float32) + im /= 255 + yield [im] + if n >= ncalib: + break + + +def run( + weights=ROOT / "yolov5s.pt", # weights path + imgsz=(640, 640), # inference size h,w + batch_size=1, # batch size + dynamic=False, # dynamic batch size +): + # PyTorch model + """Exports and summarizes both PyTorch and TensorFlow models for YOLOv5-based object detection.""" + im = torch.zeros((batch_size, 3, *imgsz)) # BCHW image + model = attempt_load(weights, device=torch.device("cpu"), inplace=True, fuse=False) + _ = model(im) # inference + model.info() + + # TensorFlow model + im = tf.zeros((batch_size, *imgsz, 3)) # BHWC image + tf_model = TFModel(cfg=model.yaml, model=model, nc=model.nc, imgsz=imgsz) + _ = tf_model.predict(im) # inference + + # Keras model + im = keras.Input(shape=(*imgsz, 3), batch_size=None if dynamic else batch_size) + keras_model = keras.Model(inputs=im, outputs=tf_model.predict(im)) + keras_model.summary() + + LOGGER.info("PyTorch, TensorFlow and Keras models successfully verified.\nUse export.py for TF model export.") + + +def parse_opt(): + """Parses command line arguments for model configuration including weights path, image size, batch size, and dynamic + batching. + """ + parser = argparse.ArgumentParser() + parser.add_argument("--weights", type=str, default=ROOT / "yolov3-tiny.pt", help="weights path") + parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[640], help="inference size h,w") + parser.add_argument("--batch-size", type=int, default=1, help="batch size") + parser.add_argument("--dynamic", action="store_true", help="dynamic batch size") + opt = parser.parse_args() + opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand + print_args(vars(opt)) + return opt + + +def main(opt): + """Executes the model run function with parsed CLI arguments on batch size and dynamic batching option.""" + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/models/yolo.py b/models/yolo.py new file mode 100644 index 0000000000..125395db32 --- /dev/null +++ b/models/yolo.py @@ -0,0 +1,452 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +YOLO-specific modules. + +Usage: + $ python models/yolo.py --cfg yolov5s.yaml +""" + +import argparse +import os +import platform +import sys +from copy import deepcopy +from pathlib import Path + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +if platform.system() != "Windows": + ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from models.common import * # noqa +from models.experimental import * # noqa +from utils.autoanchor import check_anchor_order +from utils.general import LOGGER, check_version, check_yaml, make_divisible, print_args +from utils.plots import feature_visualization +from utils.torch_utils import ( + fuse_conv_and_bn, + initialize_weights, + model_info, + profile, + scale_img, + select_device, + time_sync, +) + +try: + import thop # for FLOPs computation +except ImportError: + thop = None + + +class Detect(nn.Module): + """YOLOv3 Detect head for processing detection model outputs, including grid and anchor grid generation.""" + + stride = None # strides computed during build + dynamic = False # force grid reconstruction + export = False # export mode + + def __init__(self, nc=80, anchors=(), ch=(), inplace=True): # detection layer + """Initializes YOLOv3 detection layer with class count, anchors, channels, and operation modes.""" + super().__init__() + self.nc = nc # number of classes + self.no = nc + 5 # number of outputs per anchor + self.nl = len(anchors) # number of detection layers + self.na = len(anchors[0]) // 2 # number of anchors + self.grid = [torch.empty(0) for _ in range(self.nl)] # init grid + self.anchor_grid = [torch.empty(0) for _ in range(self.nl)] # init anchor grid + self.register_buffer("anchors", torch.tensor(anchors).float().view(self.nl, -1, 2)) # shape(nl,na,2) + self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv + self.inplace = inplace # use inplace ops (e.g. slice assignment) + + def forward(self, x): + """Processes input through convolutional layers, reshaping output for detection. + + Expects x as list of tensors with shape(bs, C, H, W). + """ + z = [] # inference output + for i in range(self.nl): + x[i] = self.m[i](x[i]) # conv + bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) + x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() + + if not self.training: # inference + if self.dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]: + self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i) + + if isinstance(self, Segment): # (boxes + masks) + xy, wh, conf, mask = x[i].split((2, 2, self.nc + 1, self.no - self.nc - 5), 4) + xy = (xy.sigmoid() * 2 + self.grid[i]) * self.stride[i] # xy + wh = (wh.sigmoid() * 2) ** 2 * self.anchor_grid[i] # wh + y = torch.cat((xy, wh, conf.sigmoid(), mask), 4) + else: # Detect (boxes only) + xy, wh, conf = x[i].sigmoid().split((2, 2, self.nc + 1), 4) + xy = (xy * 2 + self.grid[i]) * self.stride[i] # xy + wh = (wh * 2) ** 2 * self.anchor_grid[i] # wh + y = torch.cat((xy, wh, conf), 4) + z.append(y.view(bs, self.na * nx * ny, self.no)) + + return x if self.training else (torch.cat(z, 1),) if self.export else (torch.cat(z, 1), x) + + def _make_grid(self, nx=20, ny=20, i=0, torch_1_10=check_version(torch.__version__, "1.10.0")): + """Generates a grid and corresponding anchor grid with shape `(1, num_anchors, ny, nx, 2)` for indexing anchors. + """ + d = self.anchors[i].device + t = self.anchors[i].dtype + shape = 1, self.na, ny, nx, 2 # grid shape + y, x = torch.arange(ny, device=d, dtype=t), torch.arange(nx, device=d, dtype=t) + yv, xv = torch.meshgrid(y, x, indexing="ij") if torch_1_10 else torch.meshgrid(y, x) # torch>=0.7 compatibility + grid = torch.stack((xv, yv), 2).expand(shape) - 0.5 # add grid offset, i.e. y = 2.0 * x - 0.5 + anchor_grid = (self.anchors[i] * self.stride[i]).view((1, self.na, 1, 1, 2)).expand(shape) + return grid, anchor_grid + + +class Segment(Detect): + """YOLOv3 Segment head for segmentation models, adding mask prediction and prototyping to detection.""" + + def __init__(self, nc=80, anchors=(), nm=32, npr=256, ch=(), inplace=True): + """Initializes the YOLOv3 segment head with customizable class count, anchors, masks, protos, channels, and + inplace option. + """ + super().__init__(nc, anchors, ch, inplace) + self.nm = nm # number of masks + self.npr = npr # number of protos + self.no = 5 + nc + self.nm # number of outputs per anchor + self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv + self.proto = Proto(ch[0], self.npr, self.nm) # protos + self.detect = Detect.forward + + def forward(self, x): + """Executes forward pass, returning predictions and protos, with different outputs based on training and export + states. + """ + p = self.proto(x[0]) + x = self.detect(self, x) + return (x, p) if self.training else (x[0], p) if self.export else (x[0], p, x[1]) + + +class BaseModel(nn.Module): + """Implements the base YOLOv3 model architecture for object detection tasks.""" + + def forward(self, x, profile=False, visualize=False): + """Performs a single-scale inference or training step on input `x`, with options for profiling and + visualization. + """ + return self._forward_once(x, profile, visualize) # single-scale inference, train + + def _forward_once(self, x, profile=False, visualize=False): + """Executes a single inference or training step, offering profiling and visualization options for input `x`.""" + y, dt = [], [] # outputs + for m in self.model: + if m.f != -1: # if not from previous layer + x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers + if profile: + self._profile_one_layer(m, x, dt) + x = m(x) # run + y.append(x if m.i in self.save else None) # save output + if visualize: + feature_visualization(x, m.type, m.i, save_dir=visualize) + return x + + def _profile_one_layer(self, m, x, dt): + """Profiles a single layer of the model by measuring its execution time and computational cost.""" + c = m == self.model[-1] # is final layer, copy input as inplace fix + o = thop.profile(m, inputs=(x.copy() if c else x,), verbose=False)[0] / 1e9 * 2 if thop else 0 # FLOPs + t = time_sync() + for _ in range(10): + m(x.copy() if c else x) + dt.append((time_sync() - t) * 100) + if m == self.model[0]: + LOGGER.info(f"{'time (ms)':>10s} {'GFLOPs':>10s} {'params':>10s} module") + LOGGER.info(f"{dt[-1]:10.2f} {o:10.2f} {m.np:10.0f} {m.type}") + if c: + LOGGER.info(f"{sum(dt):10.2f} {'-':>10s} {'-':>10s} Total") + + def fuse(self): # fuse model Conv2d() + BatchNorm2d() layers + """Fuses Conv2d() and BatchNorm2d() layers in the model to optimize inference speed.""" + LOGGER.info("Fusing layers... ") + for m in self.model.modules(): + if isinstance(m, (Conv, DWConv)) and hasattr(m, "bn"): + m.conv = fuse_conv_and_bn(m.conv, m.bn) # update conv + delattr(m, "bn") # remove batchnorm + m.forward = m.forward_fuse # update forward + self.info() + return self + + def info(self, verbose=False, img_size=640): # print model information + """Prints model information; `verbose` for detailed, `img_size` for input image size (default 640).""" + model_info(self, verbose, img_size) + + def _apply(self, fn): + """Applies `to()`, `cpu()`, `cuda()`, `half()` to model tensors, excluding parameters or registered buffers.""" + self = super()._apply(fn) + m = self.model[-1] # Detect() + if isinstance(m, (Detect, Segment)): + m.stride = fn(m.stride) + m.grid = list(map(fn, m.grid)) + if isinstance(m.anchor_grid, list): + m.anchor_grid = list(map(fn, m.anchor_grid)) + return self + + +class DetectionModel(BaseModel): + """YOLOv3 detection model class for initializing and processing detection models with configurable parameters.""" + + def __init__(self, cfg="yolov5s.yaml", ch=3, nc=None, anchors=None): # model, input channels, number of classes + """Initializes YOLOv3 detection model with configurable YAML, input channels, classes, and anchors.""" + super().__init__() + if isinstance(cfg, dict): + self.yaml = cfg # model dict + else: # is *.yaml + import yaml # for torch hub + + self.yaml_file = Path(cfg).name + with open(cfg, encoding="ascii", errors="ignore") as f: + self.yaml = yaml.safe_load(f) # model dict + + # Define model + ch = self.yaml["ch"] = self.yaml.get("ch", ch) # input channels + if nc and nc != self.yaml["nc"]: + LOGGER.info(f"Overriding model.yaml nc={self.yaml['nc']} with nc={nc}") + self.yaml["nc"] = nc # override yaml value + if anchors: + LOGGER.info(f"Overriding model.yaml anchors with anchors={anchors}") + self.yaml["anchors"] = round(anchors) # override yaml value + self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch]) # model, savelist + self.names = [str(i) for i in range(self.yaml["nc"])] # default names + self.inplace = self.yaml.get("inplace", True) + + # Build strides, anchors + m = self.model[-1] # Detect() + if isinstance(m, (Detect, Segment)): + s = 256 # 2x min stride + m.inplace = self.inplace + + def forward(x): + """Passes the input 'x' through the model and returns the processed output.""" + return self.forward(x)[0] if isinstance(m, Segment) else self.forward(x) + + m.stride = torch.tensor([s / x.shape[-2] for x in forward(torch.zeros(1, ch, s, s))]) # forward + check_anchor_order(m) + m.anchors /= m.stride.view(-1, 1, 1) + self.stride = m.stride + self._initialize_biases() # only run once + + # Init weights, biases + initialize_weights(self) + self.info() + LOGGER.info("") + + def forward(self, x, augment=False, profile=False, visualize=False): + """Processes input through the model, with options for augmentation, profiling, and visualization.""" + if augment: + return self._forward_augment(x) # augmented inference, None + return self._forward_once(x, profile, visualize) # single-scale inference, train + + def _forward_augment(self, x): + """Performs augmented inference by scaling and flipping input images, returning concatenated predictions.""" + img_size = x.shape[-2:] # height, width + s = [1, 0.83, 0.67] # scales + f = [None, 3, None] # flips (2-ud, 3-lr) + y = [] # outputs + for si, fi in zip(s, f): + xi = scale_img(x.flip(fi) if fi else x, si, gs=int(self.stride.max())) + yi = self._forward_once(xi)[0] # forward + # cv2.imwrite(f'img_{si}.jpg', 255 * xi[0].cpu().numpy().transpose((1, 2, 0))[:, :, ::-1]) # save + yi = self._descale_pred(yi, fi, si, img_size) + y.append(yi) + y = self._clip_augmented(y) # clip augmented tails + return torch.cat(y, 1), None # augmented inference, train + + def _descale_pred(self, p, flips, scale, img_size): + """Rescales predictions after augmentation by adjusting scales and flips based on image dimensions.""" + if self.inplace: + p[..., :4] /= scale # de-scale + if flips == 2: + p[..., 1] = img_size[0] - p[..., 1] # de-flip ud + elif flips == 3: + p[..., 0] = img_size[1] - p[..., 0] # de-flip lr + else: + x, y, wh = p[..., 0:1] / scale, p[..., 1:2] / scale, p[..., 2:4] / scale # de-scale + if flips == 2: + y = img_size[0] - y # de-flip ud + elif flips == 3: + x = img_size[1] - x # de-flip lr + p = torch.cat((x, y, wh, p[..., 4:]), -1) + return p + + def _clip_augmented(self, y): + """Clips augmented inference tails from YOLOv3 predictions, affecting the first and last detection layers.""" + nl = self.model[-1].nl # number of detection layers (P3-P5) + g = sum(4**x for x in range(nl)) # grid points + e = 1 # exclude layer count + i = (y[0].shape[1] // g) * sum(4**x for x in range(e)) # indices + y[0] = y[0][:, :-i] # large + i = (y[-1].shape[1] // g) * sum(4 ** (nl - 1 - x) for x in range(e)) # indices + y[-1] = y[-1][:, i:] # small + return y + + def _initialize_biases(self, cf=None): # initialize biases into Detect(), cf is class frequency + """Initializes biases for objectness and classes in Detect() module; optionally uses class frequency `cf`.""" + # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. + m = self.model[-1] # Detect() module + for mi, s in zip(m.m, m.stride): # from + b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) + b.data[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) + b.data[:, 5 : 5 + m.nc] += ( + math.log(0.6 / (m.nc - 0.99999)) if cf is None else torch.log(cf / cf.sum()) + ) # cls + mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) + + +Model = DetectionModel # retain YOLOv3 'Model' class for backwards compatibility + + +class SegmentationModel(DetectionModel): + """Implements a YOLOv3-based segmentation model with customizable configuration, channels, classes, and anchors.""" + + def __init__(self, cfg="yolov5s-seg.yaml", ch=3, nc=None, anchors=None): + """Initializes a SegmentationModel with optional configuration, channel, class count, and anchors parameters.""" + super().__init__(cfg, ch, nc, anchors) + + +class ClassificationModel(BaseModel): + """Implements a YOLOv3-based image classification model with configurable architecture and class count.""" + + def __init__(self, cfg=None, model=None, nc=1000, cutoff=10): # yaml, model, number of classes, cutoff index + """Initializes a ClassificationModel from a detection model or YAML, with configurable classes and cutoff.""" + super().__init__() + self._from_detection_model(model, nc, cutoff) if model is not None else self._from_yaml(cfg) + + def _from_detection_model(self, model, nc=1000, cutoff=10): + """Initializes a classification model from a YOLOv3 detection model, configuring classes and cutoff.""" + if isinstance(model, DetectMultiBackend): + model = model.model # unwrap DetectMultiBackend + model.model = model.model[:cutoff] # backbone + m = model.model[-1] # last layer + ch = m.conv.in_channels if hasattr(m, "conv") else m.cv1.conv.in_channels # ch into module + c = Classify(ch, nc) # Classify() + c.i, c.f, c.type = m.i, m.f, "models.common.Classify" # index, from, type + model.model[-1] = c # replace + self.model = model.model + self.stride = model.stride + self.save = [] + self.nc = nc + + def _from_yaml(self, cfg): + """Creates a YOLOv3 classification model from a YAML file configuration.""" + self.model = None + + +def parse_model(d, ch): # model_dict, input_channels(3) + """Parses a YOLOv3 model configuration from a dictionary and constructs the model.""" + LOGGER.info(f"\n{'':>3}{'from':>18}{'n':>3}{'params':>10} {'module':<40}{'arguments':<30}") + anchors, nc, gd, gw, act = d["anchors"], d["nc"], d["depth_multiple"], d["width_multiple"], d.get("activation") + if act: + Conv.default_act = eval(act) # redefine default activation, i.e. Conv.default_act = nn.SiLU() + LOGGER.info(f"{colorstr('activation:')} {act}") # print + na = (len(anchors[0]) // 2) if isinstance(anchors, list) else anchors # number of anchors + no = na * (nc + 5) # number of outputs = anchors * (classes + 5) + + layers, save, c2 = [], [], ch[-1] # layers, savelist, ch out + for i, (f, n, m, args) in enumerate(d["backbone"] + d["head"]): # from, number, module, args + m = eval(m) if isinstance(m, str) else m # eval strings + for j, a in enumerate(args): + with contextlib.suppress(NameError): + args[j] = eval(a) if isinstance(a, str) else a # eval strings + + n = n_ = max(round(n * gd), 1) if n > 1 else n # depth gain + if m in { + Conv, + GhostConv, + Bottleneck, + GhostBottleneck, + SPP, + SPPF, + DWConv, + MixConv2d, + Focus, + CrossConv, + BottleneckCSP, + C3, + C3TR, + C3SPP, + C3Ghost, + nn.ConvTranspose2d, + DWConvTranspose2d, + C3x, + }: + c1, c2 = ch[f], args[0] + if c2 != no: # if not output + c2 = make_divisible(c2 * gw, 8) + + args = [c1, c2, *args[1:]] + if m in {BottleneckCSP, C3, C3TR, C3Ghost, C3x}: + args.insert(2, n) # number of repeats + n = 1 + elif m is nn.BatchNorm2d: + args = [ch[f]] + elif m is Concat: + c2 = sum(ch[x] for x in f) + # TODO: channel, gw, gd + elif m in {Detect, Segment}: + args.append([ch[x] for x in f]) + if isinstance(args[1], int): # number of anchors + args[1] = [list(range(args[1] * 2))] * len(f) + if m is Segment: + args[3] = make_divisible(args[3] * gw, 8) + elif m is Contract: + c2 = ch[f] * args[0] ** 2 + elif m is Expand: + c2 = ch[f] // args[0] ** 2 + else: + c2 = ch[f] + + m_ = nn.Sequential(*(m(*args) for _ in range(n))) if n > 1 else m(*args) # module + t = str(m)[8:-2].replace("__main__.", "") # module type + np = sum(x.numel() for x in m_.parameters()) # number params + m_.i, m_.f, m_.type, m_.np = i, f, t, np # attach index, 'from' index, type, number params + LOGGER.info(f"{i:>3}{f!s:>18}{n_:>3}{np:10.0f} {t:<40}{args!s:<30}") # print + save.extend(x % i for x in ([f] if isinstance(f, int) else f) if x != -1) # append to savelist + layers.append(m_) + if i == 0: + ch = [] + ch.append(c2) + return nn.Sequential(*layers), sorted(save) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--cfg", type=str, default="yolov5s.yaml", help="model.yaml") + parser.add_argument("--batch-size", type=int, default=1, help="total batch size for all GPUs") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--profile", action="store_true", help="profile model speed") + parser.add_argument("--line-profile", action="store_true", help="profile model speed layer by layer") + parser.add_argument("--test", action="store_true", help="test all yolo*.yaml") + opt = parser.parse_args() + opt.cfg = check_yaml(opt.cfg) # check YAML + print_args(vars(opt)) + device = select_device(opt.device) + + # Create model + im = torch.rand(opt.batch_size, 3, 640, 640).to(device) + model = Model(opt.cfg).to(device) + + # Options + if opt.line_profile: # profile layer by layer + model(im, profile=True) + + elif opt.profile: # profile forward-backward + results = profile(input=im, ops=[model], n=3) + + elif opt.test: # test all models + for cfg in Path(ROOT / "models").rglob("yolo*.yaml"): + try: + _ = Model(cfg) + except Exception as e: + print(f"Error in {cfg}: {e}") + + else: # report fused model summary + model.fuse() diff --git a/models/yolov3-spp.yaml b/models/yolov3-spp.yaml new file mode 100644 index 0000000000..34c2d517c6 --- /dev/null +++ b/models/yolov3-spp.yaml @@ -0,0 +1,52 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# darknet53 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [32, 3, 1]], # 0 + [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 + [-1, 1, Bottleneck, [64]], + [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 + [-1, 2, Bottleneck, [128]], + [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 + [-1, 8, Bottleneck, [256]], + [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 + [-1, 8, Bottleneck, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 + [-1, 4, Bottleneck, [1024]], # 10 + ] + +# YOLOv3-SPP head +head: [ + [-1, 1, Bottleneck, [1024, False]], + [-1, 1, SPP, [512, [5, 9, 13]]], + [-1, 1, Conv, [1024, 3, 1]], + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large) + + [-2, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium) + + [-2, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P3 + [-1, 1, Bottleneck, [256, False]], + [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small) + + [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolov3-tiny.yaml b/models/yolov3-tiny.yaml new file mode 100644 index 0000000000..f1861012ea --- /dev/null +++ b/models/yolov3-tiny.yaml @@ -0,0 +1,42 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 14, 23, 27, 37, 58] # P4/16 + - [81, 82, 135, 169, 344, 319] # P5/32 + +# YOLOv3-tiny backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [16, 3, 1]], # 0 + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 1-P1/2 + [-1, 1, Conv, [32, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 3-P2/4 + [-1, 1, Conv, [64, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 5-P3/8 + [-1, 1, Conv, [128, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 7-P4/16 + [-1, 1, Conv, [256, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 9-P5/32 + [-1, 1, Conv, [512, 3, 1]], + [-1, 1, nn.ZeroPad2d, [[0, 1, 0, 1]]], # 11 + [-1, 1, nn.MaxPool2d, [2, 1, 0]], # 12 + ] + +# YOLOv3-tiny head +head: [ + [-1, 1, Conv, [1024, 3, 1]], + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, Conv, [512, 3, 1]], # 15 (P5/32-large) + + [-2, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Conv, [256, 3, 1]], # 19 (P4/16-medium) + + [[19, 15], 1, Detect, [nc, anchors]], # Detect(P4, P5) + ] diff --git a/models/yolov3.yaml b/models/yolov3.yaml new file mode 100644 index 0000000000..15cb68a83c --- /dev/null +++ b/models/yolov3.yaml @@ -0,0 +1,52 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# darknet53 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [32, 3, 1]], # 0 + [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 + [-1, 1, Bottleneck, [64]], + [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 + [-1, 2, Bottleneck, [128]], + [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 + [-1, 8, Bottleneck, [256]], + [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 + [-1, 8, Bottleneck, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 + [-1, 4, Bottleneck, [1024]], # 10 + ] + +# YOLOv3 head +head: [ + [-1, 1, Bottleneck, [1024, False]], + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, Conv, [1024, 3, 1]], + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large) + + [-2, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 8], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium) + + [-2, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P3 + [-1, 1, Bottleneck, [256, False]], + [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small) + + [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolov5l.yaml b/models/yolov5l.yaml new file mode 100644 index 0000000000..c6c878a10e --- /dev/null +++ b/models/yolov5l.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolov5m.yaml b/models/yolov5m.yaml new file mode 100644 index 0000000000..41d9c223a2 --- /dev/null +++ b/models/yolov5m.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.67 # model depth multiple +width_multiple: 0.75 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolov5n.yaml b/models/yolov5n.yaml new file mode 100644 index 0000000000..588674923d --- /dev/null +++ b/models/yolov5n.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.25 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolov5s.yaml b/models/yolov5s.yaml new file mode 100644 index 0000000000..11ff790018 --- /dev/null +++ b/models/yolov5s.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/models/yolov5x.yaml b/models/yolov5x.yaml new file mode 100644 index 0000000000..817b4f9118 --- /dev/null +++ b/models/yolov5x.yaml @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Parameters +nc: 80 # number of classes +depth_multiple: 1.33 # model depth multiple +width_multiple: 1.25 # layer channel multiple +anchors: + - [10, 13, 16, 30, 33, 23] # P3/8 + - [30, 61, 62, 45, 59, 119] # P4/16 + - [116, 90, 156, 198, 373, 326] # P5/32 + +# YOLOv5 v6.0 backbone +backbone: + # [from, number, module, args] + [ + [-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 6, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 3, C3, [1024]], + [-1, 1, SPPF, [1024, 5]], # 9 + ] + +# YOLOv5 v6.0 head +head: [ + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, "nearest"]], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..9ba98d679c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,146 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Overview: +# This pyproject.toml file manages the build, packaging, and distribution of the Ultralytics library. +# It defines essential project metadata, dependencies, and settings used to develop and deploy the library. + +# Key Sections: +# - [build-system]: Specifies the build requirements and backend (e.g., setuptools, wheel). +# - [project]: Includes details like name, version, description, authors, dependencies and more. +# - [project.optional-dependencies]: Provides additional, optional packages for extended features. +# - [tool.*]: Configures settings for various tools (pytest, yapf, etc.) used in the project. + +# Installation: +# The Ultralytics library can be installed using the command: 'pip install ultralytics' +# For development purposes, you can install the package in editable mode with: 'pip install -e .' +# This approach allows for real-time code modifications without the need for re-installation. + +# Documentation: +# For comprehensive documentation and usage instructions, visit: https://docs.ultralytics.com + +[build-system] +requires = ["setuptools>=43.0.0", "wheel"] +build-backend = "setuptools.build_meta" + +# Project settings ----------------------------------------------------------------------------------------------------- +[project] +name = "YOLOv3" +description = "Ultralytics YOLOv3 for object detection." +readme = "README.md" +requires-python = ">=3.8" +license = { "text" = "AGPL-3.0" } +keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "HUB", "Ultralytics"] +authors = [ + { name = "Glenn Jocher" }, + { name = "Ayush Chaurasia" }, + { name = "Jing Qiu" } +] +maintainers = [ + { name = "Glenn Jocher" }, + { name = "Ayush Chaurasia" }, + { name = "Jing Qiu" } +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Software Development", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Scientific/Engineering :: Image Recognition", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS", + "Operating System :: Microsoft :: Windows", +] + +# Required dependencies ------------------------------------------------------------------------------------------------ +dependencies = [ + "matplotlib>=3.3.0", + "numpy>=1.22.2", + "opencv-python>=4.6.0", + "pillow>=7.1.2", + "pyyaml>=5.3.1", + "requests>=2.23.0", + "scipy>=1.4.1", + "torch>=1.8.0", + "torchvision>=0.9.0", + "tqdm>=4.64.0", # progress bars + "psutil", # system utilization + "py-cpuinfo", # display CPU info + "thop>=0.1.1", # FLOPs computation + "pandas>=1.1.4", + "seaborn>=0.11.0", # plotting + "ultralytics>=8.2.64" +] + +# Optional dependencies ------------------------------------------------------------------------------------------------ +[project.optional-dependencies] +dev = [ + "ipython", + "check-manifest", + "pre-commit", + "pytest", + "pytest-cov", + "coverage[toml]", + "mkdocs-material", + "mkdocstrings[python]", + "mkdocs-redirects", # for 301 redirects + "mkdocs-ultralytics-plugin>=0.0.34", # for meta descriptions and images, dates and authors +] +export = [ + "onnx>=1.12.0", # ONNX export + "coremltools>=7.0; platform_system != 'Windows'", # CoreML only supported on macOS and Linux + "openvino-dev>=2023.0", # OpenVINO export + "tensorflow>=2.0.0,<=2.19.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161 + "tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow +] +# tensorflow>=2.4.1,<=2.13.1 # TF exports (-cpu, -aarch64, -macos) +# tflite-support # for TFLite model metadata +# scikit-learn==0.19.2 # CoreML quantization +# nvidia-pyindex # TensorRT export +# nvidia-tensorrt # TensorRT export +logging = [ + "comet", # https://docs.ultralytics.com/integrations/comet/ + "tensorboard>=2.13.0", + "dvclive>=2.12.0", +] +extra = [ + "ipython", # interactive notebook + "albumentations>=1.0.3", # training augmentations + "pycocotools>=2.0.6", # COCO mAP +] + +[project.urls] +"Bug Reports" = "https://github.com/ultralytics/yolov3/issues" +"Funding" = "https://ultralytics.com" +"Source" = "https://github.com/ultralytics/yolov3/" + +# Tools settings ------------------------------------------------------------------------------------------------------- +[tool.pytest] +norecursedirs = [".git", "dist", "build"] +addopts = "--doctest-modules --durations=30 --color=yes" + +[tool.isort] +line_length = 120 +multi_line_output = 0 + +[tool.ruff] +line-length = 120 + +[tool.docformatter] +wrap-summaries = 120 +wrap-descriptions = 120 +in-place = true +pre-summary-newline = true +close-quotes-on-newline = true + +[tool.codespell] +ignore-words-list = "crate,nd,strack,dota,ane,segway,fo,gool,winn,commend" +skip = '*.csv,*venv*,docs/??/,docs/mkdocs_??.yml' diff --git a/requirements.txt b/requirements.txt old mode 100755 new mode 100644 index a475a45c38..cc59229b25 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,50 @@ -# pip3 install -U -r requirements.txt -numpy -opencv-python -torch >= 1.3 -matplotlib -pycocotools -tqdm -tb-nightly -future -Pillow +# YOLOv3 requirements +# Usage: pip install -r requirements.txt +# Python >= 3.8 recommended -# Equivalent conda commands ---------------------------------------------------- -# conda update -n base -c defaults conda -# conda install -yc anaconda future numpy opencv matplotlib tqdm pillow -# conda install -yc conda-forge scikit-image pycocotools tensorboard -# conda install -yc spyder-ide spyder-line-profiler -# conda install -yc pytorch pytorch torchvision +# Base ------------------------------------------------------------------------ +gitpython>=3.1.30 # Git repo interaction for training/versioning +matplotlib>=3.5.0 # Plotting results and graphs +numpy>=1.23.5 # Fundamental for array/matrix operations +opencv-python>=4.1.1 # Image/video processing +Pillow>=10.3.0 # Image reading/writing support +psutil>=5.9.0 # System monitoring (RAM, CPU, etc.) +PyYAML>=5.3.1 # Reading configs (yaml files) +requests>=2.32.2 # HTTP requests, used in model hub/downloads +scipy>=1.4.1 # Scientific computing (e.g. IoU, metrics) +thop>=0.1.1 # Model profiling - FLOPs and parameter count +torch>=1.8.0 # Core PyTorch for training/inference +torchvision>=0.9.0 # Torch utilities for vision (transforms, datasets) +tqdm>=4.66.3 # Progress bar in CLI +ultralytics>=8.2.64 # YOLO framework library (models, training, utils) +# protobuf<=3.20.1 # For ONNX/TensorFlow export compatibility + +# Logging --------------------------------------------------------------------- +# tensorboard>=2.4.1 # Visual logging (scalars, images) +# clearml>=1.2.0 # Experiment tracking +# comet # Another logging/monitoring tool + +# Plotting -------------------------------------------------------------------- +pandas>=1.1.4 # Data handling and manipulation +seaborn>=0.11.0 # Statistical data visualization (confusion matrix, etc.) + +# Export (optional) ----------------------------------------------------------- +# coremltools>=6.0 # Apple CoreML export support +# onnx>=1.10.0 # ONNX export support +# onnx-simplifier>=0.4.1 # Optimizes ONNX models +# nvidia-pyindex # Required for installing NVIDIA TensorRT +# nvidia-tensorrt # TensorRT export and inference +# scikit-learn<=1.1.2 # Used in CoreML quantization (used in older code) +# tensorflow>=2.4.0 # TensorFlow export +# tensorflowjs>=3.9.0 # TensorFlow.js export +# openvino-dev>=2023.0 # Intel OpenVINO export + +# Deploy ---------------------------------------------------------------------- +setuptools>=70.0.0 # Required to avoid known vulnerabilities +# tritonclient[all]~=2.24.0 # NVIDIA Triton server deployment (optional) + +# Extras ---------------------------------------------------------------------- +# ipython # Enhanced interactive shell +# mss # Screenshot capturing for inference UI +# albumentations>=1.0.3 # Powerful image augmentation library +# pycocotools>=2.0.6 # COCO dataset metrics (mAP, etc.) diff --git a/segment/predict.py b/segment/predict.py new file mode 100644 index 0000000000..529332c12c --- /dev/null +++ b/segment/predict.py @@ -0,0 +1,305 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Run YOLOv3 segmentation inference on images, videos, directories, streams, etc. + +Usage - sources: + $ python segment/predict.py --weights yolov5s-seg.pt --source 0 # webcam + img.jpg # image + vid.mp4 # video + screen # screenshot + path/ # directory + list.txt # list of images + list.streams # list of streams + 'path/*.jpg' # glob + 'https://youtu.be/LNwODJXcvt4' # YouTube + 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream + +Usage - formats: + $ python segment/predict.py --weights yolov5s-seg.pt # PyTorch + yolov5s-seg.torchscript # TorchScript + yolov5s-seg.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s-seg_openvino_model # OpenVINO + yolov5s-seg.engine # TensorRT + yolov5s-seg.mlmodel # CoreML (macOS-only) + yolov5s-seg_saved_model # TensorFlow SavedModel + yolov5s-seg.pb # TensorFlow GraphDef + yolov5s-seg.tflite # TensorFlow Lite + yolov5s-seg_edgetpu.tflite # TensorFlow Edge TPU + yolov5s-seg_paddle_model # PaddlePaddle +""" + +import argparse +import os +import platform +import sys +from pathlib import Path + +import torch + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from ultralytics.utils.plotting import Annotator, colors, save_one_box + +from models.common import DetectMultiBackend +from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams +from utils.general import ( + LOGGER, + Profile, + check_file, + check_img_size, + check_imshow, + check_requirements, + colorstr, + cv2, + increment_path, + non_max_suppression, + print_args, + scale_boxes, + scale_segments, + strip_optimizer, +) +from utils.segment.general import masks2segments, process_mask, process_mask_native +from utils.torch_utils import select_device, smart_inference_mode + + +@smart_inference_mode() +def run( + weights=ROOT / "yolov5s-seg.pt", # model.pt path(s) + source=ROOT / "data/images", # file/dir/URL/glob/screen/0(webcam) + data=ROOT / "data/coco128.yaml", # dataset.yaml path + imgsz=(640, 640), # inference size (height, width) + conf_thres=0.25, # confidence threshold + iou_thres=0.45, # NMS IOU threshold + max_det=1000, # maximum detections per image + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + view_img=False, # show results + save_txt=False, # save results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_crop=False, # save cropped prediction boxes + nosave=False, # do not save images/videos + classes=None, # filter by class: --class 0, or --class 0 2 3 + agnostic_nms=False, # class-agnostic NMS + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project=ROOT / "runs/predict-seg", # save results to project/name + name="exp", # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + line_thickness=3, # bounding box thickness (pixels) + hide_labels=False, # hide labels + hide_conf=False, # hide confidences + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + vid_stride=1, # video frame-rate stride + retina_masks=False, +): + """Performs YOLOv3 segmentation inference on various sources such as images, videos, and streams.""" + source = str(source) + save_img = not nosave and not source.endswith(".txt") # save inference images + is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS) + is_url = source.lower().startswith(("rtsp://", "rtmp://", "http://", "https://")) + webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file) + screenshot = source.lower().startswith("screen") + if is_url and is_file: + source = check_file(source) # download + + # Directories + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + (save_dir / "labels" if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load model + device = select_device(device) + model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half) + stride, names, pt = model.stride, model.names, model.pt + imgsz = check_img_size(imgsz, s=stride) # check image size + + # Dataloader + bs = 1 # batch_size + if webcam: + view_img = check_imshow(warn=True) + dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride) + bs = len(dataset) + elif screenshot: + dataset = LoadScreenshots(source, img_size=imgsz, stride=stride, auto=pt) + else: + dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt, vid_stride=vid_stride) + vid_path, vid_writer = [None] * bs, [None] * bs + + # Run inference + model.warmup(imgsz=(1 if pt else bs, 3, *imgsz)) # warmup + seen, windows, dt = 0, [], (Profile(), Profile(), Profile()) + for path, im, im0s, vid_cap, s in dataset: + with dt[0]: + im = torch.from_numpy(im).to(model.device) + im = im.half() if model.fp16 else im.float() # uint8 to fp16/32 + im /= 255 # 0 - 255 to 0.0 - 1.0 + if len(im.shape) == 3: + im = im[None] # expand for batch dim + + # Inference + with dt[1]: + visualize = increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False + pred, proto = model(im, augment=augment, visualize=visualize)[:2] + + # NMS + with dt[2]: + pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det, nm=32) + + # Second-stage classifier (optional) + # pred = utils.general.apply_classifier(pred, classifier_model, im, im0s) + + # Process predictions + for i, det in enumerate(pred): # per image + seen += 1 + if webcam: # batch_size >= 1 + p, im0, frame = path[i], im0s[i].copy(), dataset.count + s += f"{i}: " + else: + p, im0, frame = path, im0s.copy(), getattr(dataset, "frame", 0) + + p = Path(p) # to Path + save_path = str(save_dir / p.name) # im.jpg + txt_path = str(save_dir / "labels" / p.stem) + ("" if dataset.mode == "image" else f"_{frame}") # im.txt + s += "{:g}x{:g} ".format(*im.shape[2:]) # print string + imc = im0.copy() if save_crop else im0 # for save_crop + annotator = Annotator(im0, line_width=line_thickness, example=str(names)) + if len(det): + if retina_masks: + # scale bbox first the crop masks + det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round() # rescale boxes to im0 size + masks = process_mask_native(proto[i], det[:, 6:], det[:, :4], im0.shape[:2]) # HWC + else: + masks = process_mask(proto[i], det[:, 6:], det[:, :4], im.shape[2:], upsample=True) # HWC + det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round() # rescale boxes to im0 size + + # Segments + if save_txt: + segments = [ + scale_segments(im0.shape if retina_masks else im.shape[2:], x, im0.shape, normalize=True) + for x in reversed(masks2segments(masks)) + ] + + # Print results + for c in det[:, 5].unique(): + n = (det[:, 5] == c).sum() # detections per class + s += f"{n} {names[int(c)]}{'s' * (n > 1)}, " # add to string + + # Mask plotting + annotator.masks( + masks, + colors=[colors(x, True) for x in det[:, 5]], + im_gpu=torch.as_tensor(im0, dtype=torch.float16).to(device).permute(2, 0, 1).flip(0).contiguous() + / 255 + if retina_masks + else im[i], + ) + + # Write results + for j, (*xyxy, conf, cls) in enumerate(reversed(det[:, :6])): + if save_txt: # Write to file + seg = segments[j].reshape(-1) # (n,2) to (n*2) + line = (cls, *seg, conf) if save_conf else (cls, *seg) # label format + with open(f"{txt_path}.txt", "a") as f: + f.write(("%g " * len(line)).rstrip() % line + "\n") + + if save_img or save_crop or view_img: # Add bbox to image + c = int(cls) # integer class + label = None if hide_labels else (names[c] if hide_conf else f"{names[c]} {conf:.2f}") + annotator.box_label(xyxy, label, color=colors(c, True)) + # annotator.draw.polygon(segments[j], outline=colors(c, True), width=3) + if save_crop: + save_one_box(xyxy, imc, file=save_dir / "crops" / names[c] / f"{p.stem}.jpg", BGR=True) + + # Stream results + im0 = annotator.result() + if view_img: + if platform.system() == "Linux" and p not in windows: + windows.append(p) + cv2.namedWindow(str(p), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux) + cv2.resizeWindow(str(p), im0.shape[1], im0.shape[0]) + cv2.imshow(str(p), im0) + if cv2.waitKey(1) == ord("q"): # 1 millisecond + exit() + + # Save results (image with detections) + if save_img: + if dataset.mode == "image": + cv2.imwrite(save_path, im0) + else: # 'video' or 'stream' + if vid_path[i] != save_path: # new video + vid_path[i] = save_path + if isinstance(vid_writer[i], cv2.VideoWriter): + vid_writer[i].release() # release previous video writer + if vid_cap: # video + fps = vid_cap.get(cv2.CAP_PROP_FPS) + w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + else: # stream + fps, w, h = 30, im0.shape[1], im0.shape[0] + save_path = str(Path(save_path).with_suffix(".mp4")) # force *.mp4 suffix on results videos + vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) + vid_writer[i].write(im0) + + # Print time (inference-only) + LOGGER.info(f"{s}{'' if len(det) else '(no detections), '}{dt[1].dt * 1e3:.1f}ms") + + # Print results + t = tuple(x.t / seen * 1e3 for x in dt) # speeds per image + LOGGER.info(f"Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {(1, 3, *imgsz)}" % t) + if save_txt or save_img: + s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else "" + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}") + if update: + strip_optimizer(weights[0]) # update model (to fix SourceChangeWarning) + + +def parse_opt(): + """Parses command-line options for YOLOv5 including model paths, source, inference size, and saving options.""" + parser = argparse.ArgumentParser() + parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov5s-seg.pt", help="model path(s)") + parser.add_argument("--source", type=str, default=ROOT / "data/images", help="file/dir/URL/glob/screen/0(webcam)") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="(optional) dataset.yaml path") + parser.add_argument("--imgsz", "--img", "--img-size", nargs="+", type=int, default=[640], help="inference size h,w") + parser.add_argument("--conf-thres", type=float, default=0.25, help="confidence threshold") + parser.add_argument("--iou-thres", type=float, default=0.45, help="NMS IoU threshold") + parser.add_argument("--max-det", type=int, default=1000, help="maximum detections per image") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--view-img", action="store_true", help="show results") + parser.add_argument("--save-txt", action="store_true", help="save results to *.txt") + parser.add_argument("--save-conf", action="store_true", help="save confidences in --save-txt labels") + parser.add_argument("--save-crop", action="store_true", help="save cropped prediction boxes") + parser.add_argument("--nosave", action="store_true", help="do not save images/videos") + parser.add_argument("--classes", nargs="+", type=int, help="filter by class: --classes 0, or --classes 0 2 3") + parser.add_argument("--agnostic-nms", action="store_true", help="class-agnostic NMS") + parser.add_argument("--augment", action="store_true", help="augmented inference") + parser.add_argument("--visualize", action="store_true", help="visualize features") + parser.add_argument("--update", action="store_true", help="update all models") + parser.add_argument("--project", default=ROOT / "runs/predict-seg", help="save results to project/name") + parser.add_argument("--name", default="exp", help="save results to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--line-thickness", default=3, type=int, help="bounding box thickness (pixels)") + parser.add_argument("--hide-labels", default=False, action="store_true", help="hide labels") + parser.add_argument("--hide-conf", default=False, action="store_true", help="hide confidences") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") + parser.add_argument("--vid-stride", type=int, default=1, help="video frame-rate stride") + parser.add_argument("--retina-masks", action="store_true", help="whether to plot masks in native resolution") + opt = parser.parse_args() + opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand + print_args(vars(opt)) + return opt + + +def main(opt): + """Executes model inference based on parsed options, checking requirements and excluding specified packages.""" + check_requirements(ROOT / "requirements.txt", exclude=("tensorboard", "thop")) + run(**vars(opt)) + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/segment/train.py b/segment/train.py new file mode 100644 index 0000000000..28a9e4f0fb --- /dev/null +++ b/segment/train.py @@ -0,0 +1,760 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Train a YOLOv3 segment model on a segment dataset Models and datasets download automatically from the latest YOLOv3 +release. + +Usage - Single-GPU training: + $ python segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640 # from pretrained (recommended) + $ python segment/train.py --data coco128-seg.yaml --weights '' --cfg yolov5s-seg.yaml --img 640 # from scratch + +Usage - Multi-GPU DDP training: + $ python -m torch.distributed.run --nproc_per_node 4 --master_port 1 segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640 --device 0,1,2,3 + +Models: https://github.com/ultralytics/yolov5/tree/master/models +Datasets: https://github.com/ultralytics/yolov5/tree/master/data +Tutorial: https://docs.ultralytics.com/yolov5/tutorials/train_custom_data +""" + +import argparse +import math +import os +import random +import subprocess +import sys +import time +from copy import deepcopy +from datetime import datetime +from pathlib import Path + +import numpy as np +import torch +import torch.distributed as dist +import torch.nn as nn +import yaml +from torch.optim import lr_scheduler +from tqdm import tqdm + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from ultralytics.utils.patches import torch_load + +import segment.val as validate # for end-of-epoch mAP +from models.experimental import attempt_load +from models.yolo import SegmentationModel +from utils.autoanchor import check_anchors +from utils.autobatch import check_train_batch_size +from utils.callbacks import Callbacks +from utils.downloads import attempt_download, is_url +from utils.general import ( + LOGGER, + TQDM_BAR_FORMAT, + check_amp, + check_dataset, + check_file, + check_git_info, + check_git_status, + check_img_size, + check_requirements, + check_suffix, + check_yaml, + colorstr, + get_latest_run, + increment_path, + init_seeds, + intersect_dicts, + labels_to_class_weights, + labels_to_image_weights, + one_cycle, + print_args, + print_mutation, + strip_optimizer, + yaml_save, +) +from utils.loggers import GenericLogger +from utils.plots import plot_evolve, plot_labels +from utils.segment.dataloaders import create_dataloader +from utils.segment.loss import ComputeLoss +from utils.segment.metrics import KEYS, fitness +from utils.segment.plots import plot_images_and_masks, plot_results_with_masks +from utils.torch_utils import ( + EarlyStopping, + ModelEMA, + de_parallel, + select_device, + smart_DDP, + smart_optimizer, + smart_resume, + torch_distributed_zero_first, +) + +LOCAL_RANK = int(os.getenv("LOCAL_RANK", -1)) # https://pytorch.org/docs/stable/elastic/run.html +RANK = int(os.getenv("RANK", -1)) +WORLD_SIZE = int(os.getenv("WORLD_SIZE", 1)) +GIT_INFO = check_git_info() + + +def train(hyp, opt, device, callbacks): # hyp is path/to/hyp.yaml or hyp dictionary + """Trains a segmentation model using the provided hyperparameters, options, and callbacks, handling multi-GPU + setups, data loading, logging, and validation. + """ + ( + save_dir, + epochs, + batch_size, + weights, + single_cls, + evolve, + data, + cfg, + resume, + noval, + nosave, + workers, + freeze, + mask_ratio, + ) = ( + Path(opt.save_dir), + opt.epochs, + opt.batch_size, + opt.weights, + opt.single_cls, + opt.evolve, + opt.data, + opt.cfg, + opt.resume, + opt.noval, + opt.nosave, + opt.workers, + opt.freeze, + opt.mask_ratio, + ) + # callbacks.run('on_pretrain_routine_start') + + # Directories + w = save_dir / "weights" # weights dir + (w.parent if evolve else w).mkdir(parents=True, exist_ok=True) # make dir + last, best = w / "last.pt", w / "best.pt" + + # Hyperparameters + if isinstance(hyp, str): + with open(hyp, errors="ignore") as f: + hyp = yaml.safe_load(f) # load hyps dict + LOGGER.info(colorstr("hyperparameters: ") + ", ".join(f"{k}={v}" for k, v in hyp.items())) + opt.hyp = hyp.copy() # for saving hyps to checkpoints + + # Save run settings + if not evolve: + yaml_save(save_dir / "hyp.yaml", hyp) + yaml_save(save_dir / "opt.yaml", vars(opt)) + + # Loggers + data_dict = None + if RANK in {-1, 0}: + logger = GenericLogger(opt=opt, console_logger=LOGGER) + + # Config + plots = not evolve and not opt.noplots # create plots + overlap = not opt.no_overlap + cuda = device.type != "cpu" + init_seeds(opt.seed + 1 + RANK, deterministic=True) + with torch_distributed_zero_first(LOCAL_RANK): + data_dict = data_dict or check_dataset(data) # check if None + train_path, val_path = data_dict["train"], data_dict["val"] + nc = 1 if single_cls else int(data_dict["nc"]) # number of classes + names = {0: "item"} if single_cls and len(data_dict["names"]) != 1 else data_dict["names"] # class names + is_coco = isinstance(val_path, str) and val_path.endswith("coco/val2017.txt") # COCO dataset + + # Model + check_suffix(weights, ".pt") # check weights + pretrained = weights.endswith(".pt") + if pretrained: + with torch_distributed_zero_first(LOCAL_RANK): + weights = attempt_download(weights) # download if not found locally + ckpt = torch_load(weights, map_location="cpu") # load checkpoint to CPU to avoid CUDA memory leak + model = SegmentationModel(cfg or ckpt["model"].yaml, ch=3, nc=nc, anchors=hyp.get("anchors")).to(device) + exclude = ["anchor"] if (cfg or hyp.get("anchors")) and not resume else [] # exclude keys + csd = ckpt["model"].float().state_dict() # checkpoint state_dict as FP32 + csd = intersect_dicts(csd, model.state_dict(), exclude=exclude) # intersect + model.load_state_dict(csd, strict=False) # load + LOGGER.info(f"Transferred {len(csd)}/{len(model.state_dict())} items from {weights}") # report + else: + model = SegmentationModel(cfg, ch=3, nc=nc, anchors=hyp.get("anchors")).to(device) # create + amp = check_amp(model) # check AMP + + # Freeze + freeze = [f"model.{x}." for x in (freeze if len(freeze) > 1 else range(freeze[0]))] # layers to freeze + for k, v in model.named_parameters(): + v.requires_grad = True # train all layers + # v.register_hook(lambda x: torch.nan_to_num(x)) # NaN to 0 (commented for erratic training results) + if any(x in k for x in freeze): + LOGGER.info(f"freezing {k}") + v.requires_grad = False + + # Image size + gs = max(int(model.stride.max()), 32) # grid size (max stride) + imgsz = check_img_size(opt.imgsz, gs, floor=gs * 2) # verify imgsz is gs-multiple + + # Batch size + if RANK == -1 and batch_size == -1: # single-GPU only, estimate best batch size + batch_size = check_train_batch_size(model, imgsz, amp) + logger.update_params({"batch_size": batch_size}) + # loggers.on_params_update({"batch_size": batch_size}) + + # Optimizer + nbs = 64 # nominal batch size + accumulate = max(round(nbs / batch_size), 1) # accumulate loss before optimizing + hyp["weight_decay"] *= batch_size * accumulate / nbs # scale weight_decay + optimizer = smart_optimizer(model, opt.optimizer, hyp["lr0"], hyp["momentum"], hyp["weight_decay"]) + + # Scheduler + if opt.cos_lr: + lf = one_cycle(1, hyp["lrf"], epochs) # cosine 1->hyp['lrf'] + else: + + def lf(x): + """Linear learning rate scheduler decreasing from 1 to hyp['lrf'] over the course of given epochs.""" + return (1 - x / epochs) * (1.0 - hyp["lrf"]) + hyp["lrf"] # linear + + scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) # plot_lr_scheduler(optimizer, scheduler, epochs) + + # EMA + ema = ModelEMA(model) if RANK in {-1, 0} else None + + # Resume + best_fitness, start_epoch = 0.0, 0 + if pretrained: + if resume: + best_fitness, start_epoch, epochs = smart_resume(ckpt, optimizer, ema, weights, epochs, resume) + del ckpt, csd + + # DP mode + if cuda and RANK == -1 and torch.cuda.device_count() > 1: + LOGGER.warning( + "WARNING ⚠️ DP not recommended, use torch.distributed.run for best DDP Multi-GPU results.\n" + "See Multi-GPU Tutorial at https://docs.ultralytics.com/yolov5/tutorials/multi_gpu_training to get started." + ) + model = torch.nn.DataParallel(model) + + # SyncBatchNorm + if opt.sync_bn and cuda and RANK != -1: + model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model).to(device) + LOGGER.info("Using SyncBatchNorm()") + + # Trainloader + train_loader, dataset = create_dataloader( + train_path, + imgsz, + batch_size // WORLD_SIZE, + gs, + single_cls, + hyp=hyp, + augment=True, + cache=None if opt.cache == "val" else opt.cache, + rect=opt.rect, + rank=LOCAL_RANK, + workers=workers, + image_weights=opt.image_weights, + quad=opt.quad, + prefix=colorstr("train: "), + shuffle=True, + mask_downsample_ratio=mask_ratio, + overlap_mask=overlap, + ) + labels = np.concatenate(dataset.labels, 0) + mlc = int(labels[:, 0].max()) # max label class + assert mlc < nc, f"Label class {mlc} exceeds nc={nc} in {data}. Possible class labels are 0-{nc - 1}" + + # Process 0 + if RANK in {-1, 0}: + val_loader = create_dataloader( + val_path, + imgsz, + batch_size // WORLD_SIZE * 2, + gs, + single_cls, + hyp=hyp, + cache=None if noval else opt.cache, + rect=True, + rank=-1, + workers=workers * 2, + pad=0.5, + mask_downsample_ratio=mask_ratio, + overlap_mask=overlap, + prefix=colorstr("val: "), + )[0] + + if not resume: + if not opt.noautoanchor: + check_anchors(dataset, model=model, thr=hyp["anchor_t"], imgsz=imgsz) # run AutoAnchor + model.half().float() # pre-reduce anchor precision + + if plots: + plot_labels(labels, names, save_dir) + # callbacks.run('on_pretrain_routine_end', labels, names) + + # DDP mode + if cuda and RANK != -1: + model = smart_DDP(model) + + # Model attributes + nl = de_parallel(model).model[-1].nl # number of detection layers (to scale hyps) + hyp["box"] *= 3 / nl # scale to layers + hyp["cls"] *= nc / 80 * 3 / nl # scale to classes and layers + hyp["obj"] *= (imgsz / 640) ** 2 * 3 / nl # scale to image size and layers + hyp["label_smoothing"] = opt.label_smoothing + model.nc = nc # attach number of classes to model + model.hyp = hyp # attach hyperparameters to model + model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) * nc # attach class weights + model.names = names + + # Start training + t0 = time.time() + nb = len(train_loader) # number of batches + nw = max(round(hyp["warmup_epochs"] * nb), 100) # number of warmup iterations, max(3 epochs, 100 iterations) + # nw = min(nw, (epochs - start_epoch) / 2 * nb) # limit warmup to < 1/2 of training + last_opt_step = -1 + maps = np.zeros(nc) # mAP per class + results = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) # P, R, mAP@.5, mAP@.5-.95, val_loss(box, obj, cls) + scheduler.last_epoch = start_epoch - 1 # do not move + scaler = torch.cuda.amp.GradScaler(enabled=amp) + stopper, stop = EarlyStopping(patience=opt.patience), False + compute_loss = ComputeLoss(model, overlap=overlap) # init loss class + # callbacks.run('on_train_start') + LOGGER.info( + f"Image sizes {imgsz} train, {imgsz} val\n" + f"Using {train_loader.num_workers * WORLD_SIZE} dataloader workers\n" + f"Logging results to {colorstr('bold', save_dir)}\n" + f"Starting training for {epochs} epochs..." + ) + for epoch in range(start_epoch, epochs): # epoch ------------------------------------------------------------------ + # callbacks.run('on_train_epoch_start') + model.train() + + # Update image weights (optional, single-GPU only) + if opt.image_weights: + cw = model.class_weights.cpu().numpy() * (1 - maps) ** 2 / nc # class weights + iw = labels_to_image_weights(dataset.labels, nc=nc, class_weights=cw) # image weights + dataset.indices = random.choices(range(dataset.n), weights=iw, k=dataset.n) # rand weighted idx + + # Update mosaic border (optional) + # b = int(random.uniform(0.25 * imgsz, 0.75 * imgsz + gs) // gs * gs) + # dataset.mosaic_border = [b - imgsz, -b] # height, width borders + + mloss = torch.zeros(4, device=device) # mean losses + if RANK != -1: + train_loader.sampler.set_epoch(epoch) + pbar = enumerate(train_loader) + LOGGER.info( + ("\n" + "%11s" * 8) + % ("Epoch", "GPU_mem", "box_loss", "seg_loss", "obj_loss", "cls_loss", "Instances", "Size") + ) + if RANK in {-1, 0}: + pbar = tqdm(pbar, total=nb, bar_format=TQDM_BAR_FORMAT) # progress bar + optimizer.zero_grad() + for i, (imgs, targets, paths, _, masks) in pbar: # batch ------------------------------------------------------ + # callbacks.run('on_train_batch_start') + ni = i + nb * epoch # number integrated batches (since train start) + imgs = imgs.to(device, non_blocking=True).float() / 255 # uint8 to float32, 0-255 to 0.0-1.0 + + # Warmup + if ni <= nw: + xi = [0, nw] # x interp + # compute_loss.gr = np.interp(ni, xi, [0.0, 1.0]) # iou loss ratio (obj_loss = 1.0 or iou) + accumulate = max(1, np.interp(ni, xi, [1, nbs / batch_size]).round()) + for j, x in enumerate(optimizer.param_groups): + # bias lr falls from 0.1 to lr0, all other lrs rise from 0.0 to lr0 + x["lr"] = np.interp(ni, xi, [hyp["warmup_bias_lr"] if j == 0 else 0.0, x["initial_lr"] * lf(epoch)]) + if "momentum" in x: + x["momentum"] = np.interp(ni, xi, [hyp["warmup_momentum"], hyp["momentum"]]) + + # Multi-scale + if opt.multi_scale: + sz = random.randrange(int(imgsz * 0.5), int(imgsz * 1.5) + gs) // gs * gs # size + sf = sz / max(imgs.shape[2:]) # scale factor + if sf != 1: + ns = [math.ceil(x * sf / gs) * gs for x in imgs.shape[2:]] # new shape (stretched to gs-multiple) + imgs = nn.functional.interpolate(imgs, size=ns, mode="bilinear", align_corners=False) + + # Forward + with torch.cuda.amp.autocast(amp): + pred = model(imgs) # forward + loss, loss_items = compute_loss(pred, targets.to(device), masks=masks.to(device).float()) + if RANK != -1: + loss *= WORLD_SIZE # gradient averaged between devices in DDP mode + if opt.quad: + loss *= 4.0 + + # Backward + scaler.scale(loss).backward() + + # Optimize - https://pytorch.org/docs/master/notes/amp_examples.html + if ni - last_opt_step >= accumulate: + scaler.unscale_(optimizer) # unscale gradients + torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=10.0) # clip gradients + scaler.step(optimizer) # optimizer.step + scaler.update() + optimizer.zero_grad() + if ema: + ema.update(model) + last_opt_step = ni + + # Log + if RANK in {-1, 0}: + mloss = (mloss * i + loss_items) / (i + 1) # update mean losses + mem = f"{torch.cuda.memory_reserved() / 1e9 if torch.cuda.is_available() else 0:.3g}G" # (GB) + pbar.set_description( + ("%11s" * 2 + "%11.4g" * 6) + % (f"{epoch}/{epochs - 1}", mem, *mloss, targets.shape[0], imgs.shape[-1]) + ) + # callbacks.run('on_train_batch_end', model, ni, imgs, targets, paths) + # if callbacks.stop_training: + # return + + # Mosaic plots + if plots: + if ni < 3: + plot_images_and_masks(imgs, targets, masks, paths, save_dir / f"train_batch{ni}.jpg") + if ni == 10: + files = sorted(save_dir.glob("train*.jpg")) + logger.log_images(files, "Mosaics", epoch) + # end batch ------------------------------------------------------------------------------------------------ + + # Scheduler + lr = [x["lr"] for x in optimizer.param_groups] # for loggers + scheduler.step() + + if RANK in {-1, 0}: + # mAP + # callbacks.run('on_train_epoch_end', epoch=epoch) + ema.update_attr(model, include=["yaml", "nc", "hyp", "names", "stride", "class_weights"]) + final_epoch = (epoch + 1 == epochs) or stopper.possible_stop + if not noval or final_epoch: # Calculate mAP + results, maps, _ = validate.run( + data_dict, + batch_size=batch_size // WORLD_SIZE * 2, + imgsz=imgsz, + half=amp, + model=ema.ema, + single_cls=single_cls, + dataloader=val_loader, + save_dir=save_dir, + plots=False, + callbacks=callbacks, + compute_loss=compute_loss, + mask_downsample_ratio=mask_ratio, + overlap=overlap, + ) + + # Update best mAP + fi = fitness(np.array(results).reshape(1, -1)) # weighted combination of [P, R, mAP@.5, mAP@.5-.95] + stop = stopper(epoch=epoch, fitness=fi) # early stop check + if fi > best_fitness: + best_fitness = fi + log_vals = list(mloss) + list(results) + lr + # callbacks.run('on_fit_epoch_end', log_vals, epoch, best_fitness, fi) + # Log val metrics and media + metrics_dict = dict(zip(KEYS, log_vals)) + logger.log_metrics(metrics_dict, epoch) + + # Save model + if (not nosave) or (final_epoch and not evolve): # if save + ckpt = { + "epoch": epoch, + "best_fitness": best_fitness, + "model": deepcopy(de_parallel(model)).half(), + "ema": deepcopy(ema.ema).half(), + "updates": ema.updates, + "optimizer": optimizer.state_dict(), + "opt": vars(opt), + "git": GIT_INFO, # {remote, branch, commit} if a git repo + "date": datetime.now().isoformat(), + } + + # Save last, best and delete + torch.save(ckpt, last) + if best_fitness == fi: + torch.save(ckpt, best) + if opt.save_period > 0 and epoch % opt.save_period == 0: + torch.save(ckpt, w / f"epoch{epoch}.pt") + logger.log_model(w / f"epoch{epoch}.pt") + del ckpt + # callbacks.run('on_model_save', last, epoch, final_epoch, best_fitness, fi) + + # EarlyStopping + if RANK != -1: # if DDP training + broadcast_list = [stop if RANK == 0 else None] + dist.broadcast_object_list(broadcast_list, 0) # broadcast 'stop' to all ranks + if RANK != 0: + stop = broadcast_list[0] + if stop: + break # must break all DDP ranks + + # end epoch ---------------------------------------------------------------------------------------------------- + # end training ----------------------------------------------------------------------------------------------------- + if RANK in {-1, 0}: + LOGGER.info(f"\n{epoch - start_epoch + 1} epochs completed in {(time.time() - t0) / 3600:.3f} hours.") + for f in last, best: + if f.exists(): + strip_optimizer(f) # strip optimizers + if f is best: + LOGGER.info(f"\nValidating {f}...") + results, _, _ = validate.run( + data_dict, + batch_size=batch_size // WORLD_SIZE * 2, + imgsz=imgsz, + model=attempt_load(f, device).half(), + iou_thres=0.65 if is_coco else 0.60, # best pycocotools at iou 0.65 + single_cls=single_cls, + dataloader=val_loader, + save_dir=save_dir, + save_json=is_coco, + verbose=True, + plots=plots, + callbacks=callbacks, + compute_loss=compute_loss, + mask_downsample_ratio=mask_ratio, + overlap=overlap, + ) # val best model with plots + if is_coco: + # callbacks.run('on_fit_epoch_end', list(mloss) + list(results) + lr, epoch, best_fitness, fi) + metrics_dict = dict(zip(KEYS, list(mloss) + list(results) + lr)) + logger.log_metrics(metrics_dict, epoch) + + # callbacks.run('on_train_end', last, best, epoch, results) + # on train end callback using genericLogger + logger.log_metrics(dict(zip(KEYS[4:16], results)), epochs) + if not opt.evolve: + logger.log_model(best, epoch) + if plots: + plot_results_with_masks(file=save_dir / "results.csv") # save results.png + files = ["results.png", "confusion_matrix.png", *(f"{x}_curve.png" for x in ("F1", "PR", "P", "R"))] + files = [(save_dir / f) for f in files if (save_dir / f).exists()] # filter + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}") + logger.log_images(files, "Results", epoch + 1) + logger.log_images(sorted(save_dir.glob("val*.jpg")), "Validation", epoch + 1) + torch.cuda.empty_cache() + return results + + +def parse_opt(known=False): + """Parses command line arguments for training configurations, supporting optional known args parsing.""" + parser = argparse.ArgumentParser() + parser.add_argument("--weights", type=str, default=ROOT / "yolov5s-seg.pt", help="initial weights path") + parser.add_argument("--cfg", type=str, default="", help="model.yaml path") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128-seg.yaml", help="dataset.yaml path") + parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/hyp.scratch-low.yaml", help="hyperparameters path") + parser.add_argument("--epochs", type=int, default=100, help="total training epochs") + parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)") + parser.add_argument("--rect", action="store_true", help="rectangular training") + parser.add_argument("--resume", nargs="?", const=True, default=False, help="resume most recent training") + parser.add_argument("--nosave", action="store_true", help="only save final checkpoint") + parser.add_argument("--noval", action="store_true", help="only validate final epoch") + parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor") + parser.add_argument("--noplots", action="store_true", help="save no plot files") + parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations") + parser.add_argument("--bucket", type=str, default="", help="gsutil bucket") + parser.add_argument("--cache", type=str, nargs="?", const="ram", help="image --cache ram/disk") + parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%") + parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class") + parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer") + parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--project", default=ROOT / "runs/train-seg", help="save to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--quad", action="store_true", help="quad dataloader") + parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler") + parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon") + parser.add_argument("--patience", type=int, default=100, help="EarlyStopping patience (epochs without improvement)") + parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2") + parser.add_argument("--save-period", type=int, default=-1, help="Save checkpoint every x epochs (disabled if < 1)") + parser.add_argument("--seed", type=int, default=0, help="Global training seed") + parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify") + + # Instance Segmentation Args + parser.add_argument("--mask-ratio", type=int, default=4, help="Downsample the truth masks to saving memory") + parser.add_argument("--no-overlap", action="store_true", help="Overlap masks train faster at slightly less mAP") + + return parser.parse_known_args()[0] if known else parser.parse_args() + + +def main(opt, callbacks=Callbacks()): + """Initializes training or evolution of models with given options and callbacks, handling device setup and data + preparation. + """ + if RANK in {-1, 0}: + print_args(vars(opt)) + check_git_status() + check_requirements(ROOT / "requirements.txt") + + # Resume + if opt.resume and not opt.evolve: # resume from specified or most recent last.pt + last = Path(check_file(opt.resume) if isinstance(opt.resume, str) else get_latest_run()) + opt_yaml = last.parent.parent / "opt.yaml" # train options yaml + opt_data = opt.data # original dataset + if opt_yaml.is_file(): + with open(opt_yaml, errors="ignore") as f: + d = yaml.safe_load(f) + else: + d = torch_load(last, map_location="cpu")["opt"] + opt = argparse.Namespace(**d) # replace + opt.cfg, opt.weights, opt.resume = "", str(last), True # reinstate + if is_url(opt_data): + opt.data = check_file(opt_data) # avoid HUB resume auth timeout + else: + opt.data, opt.cfg, opt.hyp, opt.weights, opt.project = ( + check_file(opt.data), + check_yaml(opt.cfg), + check_yaml(opt.hyp), + str(opt.weights), + str(opt.project), + ) # checks + assert len(opt.cfg) or len(opt.weights), "either --cfg or --weights must be specified" + if opt.evolve: + if opt.project == str(ROOT / "runs/train-seg"): # if default project name, rename to runs/evolve-seg + opt.project = str(ROOT / "runs/evolve-seg") + opt.exist_ok, opt.resume = opt.resume, False # pass resume to exist_ok and disable resume + if opt.name == "cfg": + opt.name = Path(opt.cfg).stem # use model.yaml as name + opt.save_dir = str(increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok)) + + # DDP mode + device = select_device(opt.device, batch_size=opt.batch_size) + if LOCAL_RANK != -1: + msg = "is not compatible with YOLOv3 Multi-GPU DDP training" + assert not opt.image_weights, f"--image-weights {msg}" + assert not opt.evolve, f"--evolve {msg}" + assert opt.batch_size != -1, f"AutoBatch with --batch-size -1 {msg}, please pass a valid --batch-size" + assert opt.batch_size % WORLD_SIZE == 0, f"--batch-size {opt.batch_size} must be multiple of WORLD_SIZE" + assert torch.cuda.device_count() > LOCAL_RANK, "insufficient CUDA devices for DDP command" + torch.cuda.set_device(LOCAL_RANK) + device = torch.device("cuda", LOCAL_RANK) + dist.init_process_group(backend="nccl" if dist.is_nccl_available() else "gloo") + + # Train + if not opt.evolve: + train(opt.hyp, opt, device, callbacks) + + # Evolve hyperparameters (optional) + else: + # Hyperparameter evolution metadata (mutation scale 0-1, lower_limit, upper_limit) + meta = { + "lr0": (1, 1e-5, 1e-1), # initial learning rate (SGD=1E-2, Adam=1E-3) + "lrf": (1, 0.01, 1.0), # final OneCycleLR learning rate (lr0 * lrf) + "momentum": (0.3, 0.6, 0.98), # SGD momentum/Adam beta1 + "weight_decay": (1, 0.0, 0.001), # optimizer weight decay + "warmup_epochs": (1, 0.0, 5.0), # warmup epochs (fractions ok) + "warmup_momentum": (1, 0.0, 0.95), # warmup initial momentum + "warmup_bias_lr": (1, 0.0, 0.2), # warmup initial bias lr + "box": (1, 0.02, 0.2), # box loss gain + "cls": (1, 0.2, 4.0), # cls loss gain + "cls_pw": (1, 0.5, 2.0), # cls BCELoss positive_weight + "obj": (1, 0.2, 4.0), # obj loss gain (scale with pixels) + "obj_pw": (1, 0.5, 2.0), # obj BCELoss positive_weight + "iou_t": (0, 0.1, 0.7), # IoU training threshold + "anchor_t": (1, 2.0, 8.0), # anchor-multiple threshold + "anchors": (2, 2.0, 10.0), # anchors per output grid (0 to ignore) + "fl_gamma": (0, 0.0, 2.0), # focal loss gamma (efficientDet default gamma=1.5) + "hsv_h": (1, 0.0, 0.1), # image HSV-Hue augmentation (fraction) + "hsv_s": (1, 0.0, 0.9), # image HSV-Saturation augmentation (fraction) + "hsv_v": (1, 0.0, 0.9), # image HSV-Value augmentation (fraction) + "degrees": (1, 0.0, 45.0), # image rotation (+/- deg) + "translate": (1, 0.0, 0.9), # image translation (+/- fraction) + "scale": (1, 0.0, 0.9), # image scale (+/- gain) + "shear": (1, 0.0, 10.0), # image shear (+/- deg) + "perspective": (0, 0.0, 0.001), # image perspective (+/- fraction), range 0-0.001 + "flipud": (1, 0.0, 1.0), # image flip up-down (probability) + "fliplr": (0, 0.0, 1.0), # image flip left-right (probability) + "mosaic": (1, 0.0, 1.0), # image mixup (probability) + "mixup": (1, 0.0, 1.0), # image mixup (probability) + "copy_paste": (1, 0.0, 1.0), + } # segment copy-paste (probability) + + with open(opt.hyp, errors="ignore") as f: + hyp = yaml.safe_load(f) # load hyps dict + if "anchors" not in hyp: # anchors commented in hyp.yaml + hyp["anchors"] = 3 + if opt.noautoanchor: + del hyp["anchors"], meta["anchors"] + opt.noval, opt.nosave, save_dir = True, True, Path(opt.save_dir) # only val/save final epoch + # ei = [isinstance(x, (int, float)) for x in hyp.values()] # evolvable indices + evolve_yaml, evolve_csv = save_dir / "hyp_evolve.yaml", save_dir / "evolve.csv" + if opt.bucket: + # download evolve.csv if exists + subprocess.run( + [ + "gsutil", + "cp", + f"gs://{opt.bucket}/evolve.csv", + str(evolve_csv), + ] + ) + + for _ in range(opt.evolve): # generations to evolve + if evolve_csv.exists(): # if evolve.csv exists: select best hyps and mutate + # Select parent(s) + parent = "single" # parent selection method: 'single' or 'weighted' + x = np.loadtxt(evolve_csv, ndmin=2, delimiter=",", skiprows=1) + n = min(5, len(x)) # number of previous results to consider + x = x[np.argsort(-fitness(x))][:n] # top n mutations + w = fitness(x) - fitness(x).min() + 1e-6 # weights (sum > 0) + if parent == "single" or len(x) == 1: + # x = x[random.randint(0, n - 1)] # random selection + x = x[random.choices(range(n), weights=w)[0]] # weighted selection + elif parent == "weighted": + x = (x * w.reshape(n, 1)).sum(0) / w.sum() # weighted combination + + # Mutate + mp, s = 0.8, 0.2 # mutation probability, sigma + npr = np.random + npr.seed(int(time.time())) + g = np.array([meta[k][0] for k in hyp.keys()]) # gains 0-1 + ng = len(meta) + v = np.ones(ng) + while all(v == 1): # mutate until a change occurs (prevent duplicates) + v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0) + for i, k in enumerate(hyp.keys()): # plt.hist(v.ravel(), 300) + hyp[k] = float(x[i + 12] * v[i]) # mutate + + # Constrain to limits + for k, v in meta.items(): + hyp[k] = max(hyp[k], v[1]) # lower limit + hyp[k] = min(hyp[k], v[2]) # upper limit + hyp[k] = round(hyp[k], 5) # significant digits + + # Train mutation + results = train(hyp.copy(), opt, device, callbacks) + callbacks = Callbacks() + # Write mutation results + print_mutation(KEYS[4:16], results, hyp.copy(), save_dir, opt.bucket) + + # Plot results + plot_evolve(evolve_csv) + LOGGER.info( + f"Hyperparameter evolution finished {opt.evolve} generations\n" + f"Results saved to {colorstr('bold', save_dir)}\n" + f"Usage example: $ python train.py --hyp {evolve_yaml}" + ) + + +def run(**kwargs): + """Executes model training with specified configurations; see example: `train.run(data='coco128.yaml', imgsz=320, + weights='yolov5m.pt')`. + """ + opt = parse_opt(True) + for k, v in kwargs.items(): + setattr(opt, k, v) + main(opt) + return opt + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/segment/tutorial.ipynb b/segment/tutorial.ipynb new file mode 100644 index 0000000000..5406147ea1 --- /dev/null +++ b/segment/tutorial.ipynb @@ -0,0 +1,613 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "t6MPjfT5NrKQ" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + "\n", + " [中文](https://docs.ultralytics.com/zh/) | [한국어](https://docs.ultralytics.com/ko/) | [日本語](https://docs.ultralytics.com/ja/) | [Русский](https://docs.ultralytics.com/ru/) | [Deutsch](https://docs.ultralytics.com/de/) | [Français](https://docs.ultralytics.com/fr/) | [Español](https://docs.ultralytics.com/es/) | [Português](https://docs.ultralytics.com/pt/) | [Türkçe](https://docs.ultralytics.com/tr/) | [Tiếng Việt](https://docs.ultralytics.com/vi/) | [العربية](https://docs.ultralytics.com/ar/)\n", + "\n", + " \"Ultralytics\n", + " \"Run\n", + " \"Open\n", + " \"Open\n", + "\n", + " \"Discord\"\n", + " \"Ultralytics\n", + " \"Ultralytics\n", + "
\n", + "\n", + "This **Ultralytics YOLOv5 Segmentation Colab Notebook** is the easiest way to get started with [YOLO models](https://www.ultralytics.com/yolo)—no installation needed. Built by [Ultralytics](https://www.ultralytics.com/), the creators of YOLO, this notebook walks you through running **state-of-the-art** models directly in your browser.\n", + "\n", + "Ultralytics models are constantly updated for performance and flexibility. They're **fast**, **accurate**, and **easy to use**, and they excel at [object detection](https://docs.ultralytics.com/tasks/detect/), [tracking](https://docs.ultralytics.com/modes/track/), [instance segmentation](https://docs.ultralytics.com/tasks/segment/), [image classification](https://docs.ultralytics.com/tasks/classify/), and [pose estimation](https://docs.ultralytics.com/tasks/pose/).\n", + "\n", + "Find detailed documentation in the [Ultralytics Docs](https://docs.ultralytics.com/). Get support via [GitHub Issues](https://github.com/ultralytics/ultralytics/issues/new/choose). Join discussions on [Discord](https://discord.com/invite/ultralytics), [Reddit](https://www.reddit.com/r/ultralytics/), and the [Ultralytics Community Forums](https://community.ultralytics.com/)!\n", + "\n", + "Request an Enterprise License for commercial use at [Ultralytics Licensing](https://www.ultralytics.com/license).\n", + "\n", + "
\n", + "
\n", + " \n", + " \"Ultralytics\n", + " \n", + "\n", + "

\n", + " Watch: How to Train\n", + " Ultralytics\n", + " YOLO11 Model on Custom Dataset using Google Colab Notebook 🚀\n", + "

\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7mGmQbAO5pQb" + }, + "source": [ + "# Setup\n", + "\n", + "Clone GitHub [repository](https://github.com/ultralytics/yolov5), install [dependencies](https://github.com/ultralytics/yolov5/blob/master/requirements.txt) and check PyTorch and GPU." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wbvMlHd_QwMG", + "outputId": "171b23f0-71b9-4cbf-b666-6fa2ecef70c8" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "YOLOv5 🚀 v7.0-2-gc9d47ae Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Setup complete ✅ (2 CPUs, 12.7 GB RAM, 22.6/78.2 GB disk)\n" + ] + } + ], + "source": [ + "!git clone https://github.com/ultralytics/yolov5 # clone\n", + "%cd yolov5\n", + "%pip install -qr requirements.txt comet_ml # install\n", + "\n", + "import torch\n", + "\n", + "import utils\n", + "\n", + "display = utils.notebook_init() # checks" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4JnkELT0cIJg" + }, + "source": [ + "# 1. Predict\n", + "\n", + "`segment/predict.py` runs YOLOv5 instance segmentation inference on a variety of sources, downloading models automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases), and saving results to `runs/predict`. Example inference sources are:\n", + "\n", + "```shell\n", + "python segment/predict.py --source 0 # webcam\n", + " img.jpg # image \n", + " vid.mp4 # video\n", + " screen # screenshot\n", + " path/ # directory\n", + " 'path/*.jpg' # glob\n", + " 'https://youtu.be/LNwODJXcvt4' # YouTube\n", + " 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zR9ZbuQCH7FX", + "outputId": "3f67f1c7-f15e-4fa5-d251-967c3b77eaad" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001B[34m\u001B[1msegment/predict: \u001B[0mweights=['yolov5s-seg.pt'], source=data/images, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/predict-seg, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1, retina_masks=False\n", + "YOLOv5 🚀 v7.0-2-gc9d47ae Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "Downloading https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s-seg.pt to yolov5s-seg.pt...\n", + "100% 14.9M/14.9M [00:01<00:00, 12.0MB/s]\n", + "\n", + "Fusing layers... \n", + "YOLOv5s-seg summary: 224 layers, 7611485 parameters, 0 gradients, 26.4 GFLOPs\n", + "image 1/2 /content/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, 18.2ms\n", + "image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 2 persons, 1 tie, 13.4ms\n", + "Speed: 0.5ms pre-process, 15.8ms inference, 18.5ms NMS per image at shape (1, 3, 640, 640)\n", + "Results saved to \u001B[1mruns/predict-seg/exp\u001B[0m\n" + ] + } + ], + "source": [ + "!python segment/predict.py --weights yolov5s-seg.pt --img 640 --conf 0.25 --source data/images\n", + "# display.Image(filename='runs/predict-seg/exp/zidane.jpg', width=600)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hkAzDWJ7cWTr" + }, + "source": [ + "        \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0eq1SMWl6Sfn" + }, + "source": [ + "# 2. Validate\n", + "Validate a model's accuracy on the [COCO](https://cocodataset.org/#home) dataset's `val` or `test` splits. Models are downloaded automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases). To show results by class use the `--verbose` flag." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WQPtK1QYVaD_", + "outputId": "9d751d8c-bee8-4339-cf30-9854ca530449" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/coco2017labels-segments.zip ...\n", + "Downloading http://images.cocodataset.org/zips/val2017.zip ...\n", + "######################################################################## 100.0%\n", + "######################################################################## 100.0%\n" + ] + } + ], + "source": [ + "# Download COCO val\n", + "!bash data/scripts/get_coco.sh --val --segments # download (780M - 5000 images)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "X58w8JLpMnjH", + "outputId": "a140d67a-02da-479e-9ddb-7d54bf9e407a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001B[34m\u001B[1msegment/val: \u001B[0mdata=/content/yolov5/data/coco.yaml, weights=['yolov5s-seg.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, max_det=300, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=False, project=runs/val-seg, name=exp, exist_ok=False, half=True, dnn=False\n", + "YOLOv5 🚀 v7.0-2-gc9d47ae Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "Fusing layers... \n", + "YOLOv5s-seg summary: 224 layers, 7611485 parameters, 0 gradients, 26.4 GFLOPs\n", + "\u001B[34m\u001B[1mval: \u001B[0mScanning /content/datasets/coco/val2017... 4952 images, 48 backgrounds, 0 corrupt: 100% 5000/5000 [00:03<00:00, 1361.31it/s]\n", + "\u001B[34m\u001B[1mval: \u001B[0mNew cache created: /content/datasets/coco/val2017.cache\n", + " Class Images Instances Box(P R mAP50 mAP50-95) Mask(P R mAP50 mAP50-95): 100% 157/157 [01:54<00:00, 1.37it/s]\n", + " all 5000 36335 0.673 0.517 0.566 0.373 0.672 0.49 0.532 0.319\n", + "Speed: 0.6ms pre-process, 4.4ms inference, 2.9ms NMS per image at shape (32, 3, 640, 640)\n", + "Results saved to \u001B[1mruns/val-seg/exp\u001B[0m\n" + ] + } + ], + "source": [ + "# Validate YOLOv5s-seg on COCO val\n", + "!python segment/val.py --weights yolov5s-seg.pt --data coco.yaml --img 640 --half" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZY2VXXXu74w5" + }, + "source": [ + "# 3. Train\n", + "\n", + "\n", + " \"Ultralytics\n", + "\n", + "

\n", + "\n", + "Train a YOLOv5s-seg model on the [COCO128](https://www.kaggle.com/datasets/ultralytics/coco128) dataset with `--data coco128-seg.yaml`, starting from pretrained `--weights yolov5s-seg.pt`, or from randomly initialized `--weights '' --cfg yolov5s-seg.yaml`.\n", + "\n", + "- **Pretrained [Models](https://github.com/ultralytics/yolov5/tree/master/models)** are downloaded\n", + "automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases)\n", + "- **[Datasets](https://github.com/ultralytics/yolov5/tree/master/data)** available for autodownload include: [COCO](https://github.com/ultralytics/yolov5/blob/master/data/coco.yaml), [COCO128](https://github.com/ultralytics/yolov5/blob/master/data/coco128.yaml), [VOC](https://github.com/ultralytics/yolov5/blob/master/data/VOC.yaml), [Argoverse](https://github.com/ultralytics/yolov5/blob/master/data/Argoverse.yaml), [VisDrone](https://github.com/ultralytics/yolov5/blob/master/data/VisDrone.yaml), [GlobalWheat](https://github.com/ultralytics/yolov5/blob/master/data/GlobalWheat2020.yaml), [xView](https://github.com/ultralytics/yolov5/blob/master/data/xView.yaml), [Objects365](https://github.com/ultralytics/yolov5/blob/master/data/Objects365.yaml), [SKU-110K](https://github.com/ultralytics/yolov5/blob/master/data/SKU-110K.yaml).\n", + "- **Training Results** are saved to `runs/train-seg/` with incrementing run directories, i.e. `runs/train-seg/exp2`, `runs/train-seg/exp3` etc.\n", + "

\n", + "\n", + "A **Mosaic Dataloader** is used for training which combines 4 images into 1 mosaic." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "i3oKtE4g-aNn" + }, + "outputs": [], + "source": [ + "# @title Select YOLOv5 🚀 logger {run: 'auto'}\n", + "logger = \"Comet\" # @param ['Comet', 'ClearML', 'TensorBoard']\n", + "\n", + "if logger == \"Comet\":\n", + " %pip install -q comet_ml\n", + " import comet_ml\n", + "\n", + " comet_ml.init()\n", + "elif logger == \"ClearML\":\n", + " %pip install -q clearml\n", + " import clearml\n", + "\n", + " clearml.browser_login()\n", + "elif logger == \"TensorBoard\":\n", + " %load_ext tensorboard\n", + " %tensorboard --logdir runs/train" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1NcFxRcFdJ_O", + "outputId": "3a3e0cf7-e79c-47a5-c8e7-2d26eeeab988" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001B[34m\u001B[1msegment/train: \u001B[0mweights=yolov5s-seg.pt, cfg=, data=coco128-seg.yaml, hyp=data/hyps/hyp.scratch-low.yaml, epochs=3, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket=, cache=ram, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs/train-seg, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, mask_ratio=4, no_overlap=False\n", + "\u001B[34m\u001B[1mgithub: \u001B[0mup to date with https://github.com/ultralytics/yolov5 ✅\n", + "YOLOv5 🚀 v7.0-2-gc9d47ae Python-3.7.15 torch-1.12.1+cu113 CUDA:0 (Tesla T4, 15110MiB)\n", + "\n", + "\u001B[34m\u001B[1mhyperparameters: \u001B[0mlr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0\n", + "\u001B[34m\u001B[1mTensorBoard: \u001B[0mStart with 'tensorboard --logdir runs/train-seg', view at http://localhost:6006/\n", + "\n", + "Dataset not found ⚠️, missing paths ['/content/datasets/coco128-seg/images/train2017']\n", + "Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128-seg.zip to coco128-seg.zip...\n", + "100% 6.79M/6.79M [00:01<00:00, 6.73MB/s]\n", + "Dataset download success ✅ (1.9s), saved to \u001B[1m/content/datasets\u001B[0m\n", + "\n", + " from n params module arguments \n", + " 0 -1 1 3520 models.common.Conv [3, 32, 6, 2, 2] \n", + " 1 -1 1 18560 models.common.Conv [32, 64, 3, 2] \n", + " 2 -1 1 18816 models.common.C3 [64, 64, 1] \n", + " 3 -1 1 73984 models.common.Conv [64, 128, 3, 2] \n", + " 4 -1 2 115712 models.common.C3 [128, 128, 2] \n", + " 5 -1 1 295424 models.common.Conv [128, 256, 3, 2] \n", + " 6 -1 3 625152 models.common.C3 [256, 256, 3] \n", + " 7 -1 1 1180672 models.common.Conv [256, 512, 3, 2] \n", + " 8 -1 1 1182720 models.common.C3 [512, 512, 1] \n", + " 9 -1 1 656896 models.common.SPPF [512, 512, 5] \n", + " 10 -1 1 131584 models.common.Conv [512, 256, 1, 1] \n", + " 11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] \n", + " 12 [-1, 6] 1 0 models.common.Concat [1] \n", + " 13 -1 1 361984 models.common.C3 [512, 256, 1, False] \n", + " 14 -1 1 33024 models.common.Conv [256, 128, 1, 1] \n", + " 15 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] \n", + " 16 [-1, 4] 1 0 models.common.Concat [1] \n", + " 17 -1 1 90880 models.common.C3 [256, 128, 1, False] \n", + " 18 -1 1 147712 models.common.Conv [128, 128, 3, 2] \n", + " 19 [-1, 14] 1 0 models.common.Concat [1] \n", + " 20 -1 1 296448 models.common.C3 [256, 256, 1, False] \n", + " 21 -1 1 590336 models.common.Conv [256, 256, 3, 2] \n", + " 22 [-1, 10] 1 0 models.common.Concat [1] \n", + " 23 -1 1 1182720 models.common.C3 [512, 512, 1, False] \n", + " 24 [17, 20, 23] 1 615133 models.yolo.Segment [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], 32, 128, [128, 256, 512]]\n", + "Model summary: 225 layers, 7621277 parameters, 7621277 gradients, 26.6 GFLOPs\n", + "\n", + "Transferred 367/367 items from yolov5s-seg.pt\n", + "\u001B[34m\u001B[1mAMP: \u001B[0mchecks passed ✅\n", + "\u001B[34m\u001B[1moptimizer:\u001B[0m SGD(lr=0.01) with parameter groups 60 weight(decay=0.0), 63 weight(decay=0.0005), 63 bias\n", + "\u001B[34m\u001B[1malbumentations: \u001B[0mBlur(p=0.01, blur_limit=(3, 7)), MedianBlur(p=0.01, blur_limit=(3, 7)), ToGray(p=0.01), CLAHE(p=0.01, clip_limit=(1, 4.0), tile_grid_size=(8, 8))\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mScanning /content/datasets/coco128-seg/labels/train2017... 126 images, 2 backgrounds, 0 corrupt: 100% 128/128 [00:00<00:00, 1389.59it/s]\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mNew cache created: /content/datasets/coco128-seg/labels/train2017.cache\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00, 238.86it/s]\n", + "\u001B[34m\u001B[1mval: \u001B[0mScanning /content/datasets/coco128-seg/labels/train2017.cache... 126 images, 2 backgrounds, 0 corrupt: 100% 128/128 [00:00 # 2. paste API key\n", + "python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. train\n", + "```\n", + "To learn more about all of the supported Comet features for this integration, check out the [Comet Tutorial](https://docs.ultralytics.com/yolov5/tutorials/comet_logging_integration). If you'd like to learn more about Comet, head over to our [documentation](https://www.comet.com/docs/v2/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=yolov5_colab). Get started by trying out the Comet Colab Notebook:\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1RG0WOQyxlDlo5Km8GogJpIEJlg_5lyYO?usp=sharing)\n", + "\n", + "\n", + "\"Comet" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Lay2WsTjNJzP" + }, + "source": [ + "## ClearML Logging and Automation 🌟 NEW\n", + "\n", + "[ClearML](https://cutt.ly/yolov5-notebook-clearml) is completely integrated into YOLOv5 to track your experimentation, manage dataset versions and even remotely execute training runs. To enable ClearML (check cells above):\n", + "\n", + "- `pip install clearml`\n", + "- run `clearml-init` to connect to a ClearML server (**deploy your own [open-source server](https://github.com/allegroai/clearml-server)**, or use our [free hosted server](https://cutt.ly/yolov5-notebook-clearml))\n", + "\n", + "You'll get all the great expected features from an experiment manager: live updates, model upload, experiment comparison etc. but ClearML also tracks uncommitted changes and installed packages for example. Thanks to that ClearML Tasks (which is what we call experiments) are also reproducible on different machines! With only 1 extra line, we can schedule a YOLOv5 training task on a queue to be executed by any number of ClearML Agents (workers).\n", + "\n", + "You can use ClearML Data to version your dataset and then pass it to YOLOv5 simply using its unique ID. This will help you keep track of your data without adding extra hassle. Explore the [ClearML Tutorial](https://docs.ultralytics.com/yolov5/tutorials/clearml_logging_integration) for details!\n", + "\n", + "\n", + "\"ClearML" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-WPvRbS5Swl6" + }, + "source": [ + "## Local Logging\n", + "\n", + "Training results are automatically logged with [Tensorboard](https://www.tensorflow.org/tensorboard) and [CSV](https://github.com/ultralytics/yolov5/pull/4148) loggers to `runs/train`, with a new experiment directory created for each new training as `runs/train/exp2`, `runs/train/exp3`, etc.\n", + "\n", + "This directory contains train and val statistics, mosaics, labels, predictions and augmentated mosaics, as well as metrics and charts including precision-recall (PR) curves and confusion matrices. \n", + "\n", + "\"Local\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zelyeqbyt3GD" + }, + "source": [ + "# Environments\n", + "\n", + "YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including [CUDA](https://developer.nvidia.com/cuda)/[CUDNN](https://developer.nvidia.com/cudnn), [Python](https://www.python.org/) and [PyTorch](https://pytorch.org/) preinstalled):\n", + "\n", + "- **Notebooks** with free GPU: \"Run \"Open \"Open\n", + "- **Google Cloud** Deep Learning VM. See [GCP Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/google_cloud_quickstart_tutorial/)\n", + "- **Amazon** Deep Learning AMI. See [AWS Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/aws_quickstart_tutorial/)\n", + "- **Docker Image**. See [Docker Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/docker_image_quickstart_tutorial/) \"Docker\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6Qu7Iesl0p54" + }, + "source": [ + "# Status\n", + "\n", + "![YOLOv5 CI](https://github.com/ultralytics/yolov3/actions/workflows/ci-testing.yml/badge.svg)\n", + "\n", + "If this badge is green, all [YOLOv3 GitHub Actions](https://github.com/ultralytics/yolov3/actions) Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training ([train.py](https://github.com/ultralytics/yolov5/blob/master/train.py)), testing ([val.py](https://github.com/ultralytics/yolov5/blob/master/val.py)), inference ([detect.py](https://github.com/ultralytics/yolov5/blob/master/detect.py)) and export ([export.py](https://github.com/ultralytics/yolov5/blob/master/export.py)) on macOS, Windows, and Ubuntu every 24 hours and on every commit.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IEijrePND_2I" + }, + "source": [ + "# Appendix\n", + "\n", + "Additional content below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GMusP4OAxFu6" + }, + "outputs": [], + "source": [ + "# YOLOv5 PyTorch HUB Inference (DetectionModels only)\n", + "\n", + "model = torch.hub.load(\"ultralytics/yolov5\", \"yolov5s-seg\") # yolov5n - yolov5x6 or custom\n", + "im = \"https://ultralytics.com/images/zidane.jpg\" # file, Path, PIL.Image, OpenCV, nparray, list\n", + "results = model(im) # inference\n", + "results.print() # or .show(), .save(), .crop(), .pandas(), etc." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "YOLOv5 Segmentation Tutorial", + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/segment/val.py b/segment/val.py new file mode 100644 index 0000000000..378cdef8e7 --- /dev/null +++ b/segment/val.py @@ -0,0 +1,514 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Validate a trained YOLOv3 segment model on a segment dataset. + +Usage: + $ bash data/scripts/get_coco.sh --val --segments # download COCO-segments val split (1G, 5000 images) + $ python segment/val.py --weights yolov5s-seg.pt --data coco.yaml --img 640 # validate COCO-segments + +Usage - formats: + $ python segment/val.py --weights yolov5s-seg.pt # PyTorch + yolov5s-seg.torchscript # TorchScript + yolov5s-seg.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s-seg_openvino_label # OpenVINO + yolov5s-seg.engine # TensorRT + yolov5s-seg.mlmodel # CoreML (macOS-only) + yolov5s-seg_saved_model # TensorFlow SavedModel + yolov5s-seg.pb # TensorFlow GraphDef + yolov5s-seg.tflite # TensorFlow Lite + yolov5s-seg_edgetpu.tflite # TensorFlow Edge TPU + yolov5s-seg_paddle_model # PaddlePaddle +""" + +import argparse +import json +import os +import subprocess +import sys +from multiprocessing.pool import ThreadPool +from pathlib import Path + +import numpy as np +import torch +from tqdm import tqdm + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +import torch.nn.functional as F + +from models.common import DetectMultiBackend +from models.yolo import SegmentationModel +from utils.callbacks import Callbacks +from utils.general import ( + LOGGER, + NUM_THREADS, + TQDM_BAR_FORMAT, + Profile, + check_dataset, + check_img_size, + check_requirements, + check_yaml, + coco80_to_coco91_class, + colorstr, + increment_path, + non_max_suppression, + print_args, + scale_boxes, + xywh2xyxy, + xyxy2xywh, +) +from utils.metrics import ConfusionMatrix, box_iou +from utils.plots import output_to_target, plot_val_study +from utils.segment.dataloaders import create_dataloader +from utils.segment.general import mask_iou, process_mask, process_mask_native, scale_image +from utils.segment.metrics import Metrics, ap_per_class_box_and_mask +from utils.segment.plots import plot_images_and_masks +from utils.torch_utils import de_parallel, select_device, smart_inference_mode + + +def save_one_txt(predn, save_conf, shape, file): + """Saves detection results in normalized xywh format (with optional confidence) to a txt file.""" + gn = torch.tensor(shape)[[1, 0, 1, 0]] # normalization gain whwh + for *xyxy, conf, cls in predn.tolist(): + xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh + line = (cls, *xywh, conf) if save_conf else (cls, *xywh) # label format + with open(file, "a") as f: + f.write(("%g " * len(line)).rstrip() % line + "\n") + + +def save_one_json(predn, jdict, path, class_map, pred_masks): + """Saves detection results in COCO JSON format, including bbox, category_id and segmentation if available.""" + from pycocotools.mask import encode + + def single_encode(x): + """Encodes a binary mask to COCO RLE format, converting counts to a UTF-8 string for JSON serialization.""" + rle = encode(np.asarray(x[:, :, None], order="F", dtype="uint8"))[0] + rle["counts"] = rle["counts"].decode("utf-8") + return rle + + image_id = int(path.stem) if path.stem.isnumeric() else path.stem + box = xyxy2xywh(predn[:, :4]) # xywh + box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner + pred_masks = np.transpose(pred_masks, (2, 0, 1)) + with ThreadPool(NUM_THREADS) as pool: + rles = pool.map(single_encode, pred_masks) + for i, (p, b) in enumerate(zip(predn.tolist(), box.tolist())): + jdict.append( + { + "image_id": image_id, + "category_id": class_map[int(p[5])], + "bbox": [round(x, 3) for x in b], + "score": round(p[4], 5), + "segmentation": rles[i], + } + ) + + +def process_batch(detections, labels, iouv, pred_masks=None, gt_masks=None, overlap=False, masks=False): + """Return correct prediction matrix. + + Args: + detections (array[N, 6]), x1, y1, x2, y2, conf, class: labels (array[M, 5]), class, x1, y1, x2, y2 + + Returns: + correct (array[N, 10]), for 10 IoU levels. + """ + if masks: + if overlap: + nl = len(labels) + index = torch.arange(nl, device=gt_masks.device).view(nl, 1, 1) + 1 + gt_masks = gt_masks.repeat(nl, 1, 1) # shape(1,640,640) -> (n,640,640) + gt_masks = torch.where(gt_masks == index, 1.0, 0.0) + if gt_masks.shape[1:] != pred_masks.shape[1:]: + gt_masks = F.interpolate(gt_masks[None], pred_masks.shape[1:], mode="bilinear", align_corners=False)[0] + gt_masks = gt_masks.gt_(0.5) + iou = mask_iou(gt_masks.view(gt_masks.shape[0], -1), pred_masks.view(pred_masks.shape[0], -1)) + else: # boxes + iou = box_iou(labels[:, 1:], detections[:, :4]) + + correct = np.zeros((detections.shape[0], iouv.shape[0])).astype(bool) + correct_class = labels[:, 0:1] == detections[:, 5] + for i in range(len(iouv)): + x = torch.where((iou >= iouv[i]) & correct_class) # IoU > threshold and classes match + if x[0].shape[0]: + matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() # [label, detect, iou] + if x[0].shape[0] > 1: + matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 1], return_index=True)[1]] + # matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 0], return_index=True)[1]] + correct[matches[:, 1].astype(int), i] = True + return torch.tensor(correct, dtype=torch.bool, device=iouv.device) + + +@smart_inference_mode() +def run( + data, + weights=None, # model.pt path(s) + batch_size=32, # batch size + imgsz=640, # inference size (pixels) + conf_thres=0.001, # confidence threshold + iou_thres=0.6, # NMS IoU threshold + max_det=300, # maximum detections per image + task="val", # train, val, test, speed or study + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + workers=8, # max dataloader workers (per RANK in DDP mode) + single_cls=False, # treat as single-class dataset + augment=False, # augmented inference + verbose=False, # verbose output + save_txt=False, # save results to *.txt + save_hybrid=False, # save label+prediction hybrid results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_json=False, # save a COCO-JSON results file + project=ROOT / "runs/val-seg", # save to project/name + name="exp", # save to project/name + exist_ok=False, # existing project/name ok, do not increment + half=True, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + model=None, + dataloader=None, + save_dir=Path(""), + plots=True, + overlap=False, + mask_downsample_ratio=1, + compute_loss=None, + callbacks=Callbacks(), +): + """Validates a trained YOLOv3 segmentation model using a specified dataset and evaluation metrics.""" + if save_json: + check_requirements("pycocotools>=2.0.6") + process = process_mask_native # more accurate + else: + process = process_mask # faster + + # Initialize/load model and set device + training = model is not None + if training: # called by train.py + device, pt, jit, engine = next(model.parameters()).device, True, False, False # get model device, PyTorch model + half &= device.type != "cpu" # half precision only supported on CUDA + model.half() if half else model.float() + nm = de_parallel(model).model[-1].nm # number of masks + else: # called directly + device = select_device(device, batch_size=batch_size) + + # Directories + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + (save_dir / "labels" if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load model + model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half) + stride, pt, jit, engine = model.stride, model.pt, model.jit, model.engine + imgsz = check_img_size(imgsz, s=stride) # check image size + half = model.fp16 # FP16 supported on limited backends with CUDA + nm = de_parallel(model).model.model[-1].nm if isinstance(model, SegmentationModel) else 32 # number of masks + if engine: + batch_size = model.batch_size + else: + device = model.device + if not (pt or jit): + batch_size = 1 # export.py models default to batch-size 1 + LOGGER.info(f"Forcing --batch-size 1 square inference (1,3,{imgsz},{imgsz}) for non-PyTorch models") + + # Data + data = check_dataset(data) # check + + # Configure + model.eval() + cuda = device.type != "cpu" + is_coco = isinstance(data.get("val"), str) and data["val"].endswith(f"coco{os.sep}val2017.txt") # COCO dataset + nc = 1 if single_cls else int(data["nc"]) # number of classes + iouv = torch.linspace(0.5, 0.95, 10, device=device) # iou vector for mAP@0.5:0.95 + niou = iouv.numel() + + # Dataloader + if not training: + if pt and not single_cls: # check --weights are trained on --data + ncm = model.model.nc + assert ncm == nc, ( + f"{weights} ({ncm} classes) trained on different --data than what you passed ({nc} " + f"classes). Pass correct combination of --weights and --data that are trained together." + ) + model.warmup(imgsz=(1 if pt else batch_size, 3, imgsz, imgsz)) # warmup + pad, rect = (0.0, False) if task == "speed" else (0.5, pt) # square inference for benchmarks + task = task if task in ("train", "val", "test") else "val" # path to train/val/test images + dataloader = create_dataloader( + data[task], + imgsz, + batch_size, + stride, + single_cls, + pad=pad, + rect=rect, + workers=workers, + prefix=colorstr(f"{task}: "), + overlap_mask=overlap, + mask_downsample_ratio=mask_downsample_ratio, + )[0] + + seen = 0 + confusion_matrix = ConfusionMatrix(nc=nc) + names = model.names if hasattr(model, "names") else model.module.names # get class names + if isinstance(names, (list, tuple)): # old format + names = dict(enumerate(names)) + class_map = coco80_to_coco91_class() if is_coco else list(range(1000)) + s = ("%22s" + "%11s" * 10) % ( + "Class", + "Images", + "Instances", + "Box(P", + "R", + "mAP50", + "mAP50-95)", + "Mask(P", + "R", + "mAP50", + "mAP50-95)", + ) + dt = Profile(), Profile(), Profile() + metrics = Metrics() + loss = torch.zeros(4, device=device) + jdict, stats = [], [] + # callbacks.run('on_val_start') + pbar = tqdm(dataloader, desc=s, bar_format=TQDM_BAR_FORMAT) # progress bar + for batch_i, (im, targets, paths, shapes, masks) in enumerate(pbar): + # callbacks.run('on_val_batch_start') + with dt[0]: + if cuda: + im = im.to(device, non_blocking=True) + targets = targets.to(device) + masks = masks.to(device) + masks = masks.float() + im = im.half() if half else im.float() # uint8 to fp16/32 + im /= 255 # 0 - 255 to 0.0 - 1.0 + nb, _, height, width = im.shape # batch size, channels, height, width + + # Inference + with dt[1]: + preds, protos, train_out = model(im) if compute_loss else (*model(im, augment=augment)[:2], None) + + # Loss + if compute_loss: + loss += compute_loss((train_out, protos), targets, masks)[1] # box, obj, cls + + # NMS + targets[:, 2:] *= torch.tensor((width, height, width, height), device=device) # to pixels + lb = [targets[targets[:, 0] == i, 1:] for i in range(nb)] if save_hybrid else [] # for autolabelling + with dt[2]: + preds = non_max_suppression( + preds, conf_thres, iou_thres, labels=lb, multi_label=True, agnostic=single_cls, max_det=max_det, nm=nm + ) + + # Metrics + plot_masks = [] # masks for plotting + for si, (pred, proto) in enumerate(zip(preds, protos)): + labels = targets[targets[:, 0] == si, 1:] + nl, npr = labels.shape[0], pred.shape[0] # number of labels, predictions + path, shape = Path(paths[si]), shapes[si][0] + correct_masks = torch.zeros(npr, niou, dtype=torch.bool, device=device) # init + correct_bboxes = torch.zeros(npr, niou, dtype=torch.bool, device=device) # init + seen += 1 + + if npr == 0: + if nl: + stats.append((correct_masks, correct_bboxes, *torch.zeros((2, 0), device=device), labels[:, 0])) + if plots: + confusion_matrix.process_batch(detections=None, labels=labels[:, 0]) + continue + + # Masks + midx = [si] if overlap else targets[:, 0] == si + gt_masks = masks[midx] + pred_masks = process(proto, pred[:, 6:], pred[:, :4], shape=im[si].shape[1:]) + + # Predictions + if single_cls: + pred[:, 5] = 0 + predn = pred.clone() + scale_boxes(im[si].shape[1:], predn[:, :4], shape, shapes[si][1]) # native-space pred + + # Evaluate + if nl: + tbox = xywh2xyxy(labels[:, 1:5]) # target boxes + scale_boxes(im[si].shape[1:], tbox, shape, shapes[si][1]) # native-space labels + labelsn = torch.cat((labels[:, 0:1], tbox), 1) # native-space labels + correct_bboxes = process_batch(predn, labelsn, iouv) + correct_masks = process_batch(predn, labelsn, iouv, pred_masks, gt_masks, overlap=overlap, masks=True) + if plots: + confusion_matrix.process_batch(predn, labelsn) + stats.append((correct_masks, correct_bboxes, pred[:, 4], pred[:, 5], labels[:, 0])) # (conf, pcls, tcls) + + pred_masks = torch.as_tensor(pred_masks, dtype=torch.uint8) + if plots and batch_i < 3: + plot_masks.append(pred_masks[:15]) # filter top 15 to plot + + # Save/log + if save_txt: + save_one_txt(predn, save_conf, shape, file=save_dir / "labels" / f"{path.stem}.txt") + if save_json: + pred_masks = scale_image( + im[si].shape[1:], pred_masks.permute(1, 2, 0).contiguous().cpu().numpy(), shape, shapes[si][1] + ) + save_one_json(predn, jdict, path, class_map, pred_masks) # append to COCO-JSON dictionary + # callbacks.run('on_val_image_end', pred, predn, path, names, im[si]) + + # Plot images + if plots and batch_i < 3: + if len(plot_masks): + plot_masks = torch.cat(plot_masks, dim=0) + plot_images_and_masks(im, targets, masks, paths, save_dir / f"val_batch{batch_i}_labels.jpg", names) + plot_images_and_masks( + im, + output_to_target(preds, max_det=15), + plot_masks, + paths, + save_dir / f"val_batch{batch_i}_pred.jpg", + names, + ) # pred + + # callbacks.run('on_val_batch_end') + + # Compute metrics + stats = [torch.cat(x, 0).cpu().numpy() for x in zip(*stats)] # to numpy + if len(stats) and stats[0].any(): + results = ap_per_class_box_and_mask(*stats, plot=plots, save_dir=save_dir, names=names) + metrics.update(results) + nt = np.bincount(stats[4].astype(int), minlength=nc) # number of targets per class + + # Print results + pf = "%22s" + "%11i" * 2 + "%11.3g" * 8 # print format + LOGGER.info(pf % ("all", seen, nt.sum(), *metrics.mean_results())) + if nt.sum() == 0: + LOGGER.warning(f"WARNING ⚠️ no labels found in {task} set, can not compute metrics without labels") + + # Print results per class + if (verbose or (nc < 50 and not training)) and nc > 1 and len(stats): + for i, c in enumerate(metrics.ap_class_index): + LOGGER.info(pf % (names[c], seen, nt[c], *metrics.class_result(i))) + + # Print speeds + t = tuple(x.t / seen * 1e3 for x in dt) # speeds per image + if not training: + shape = (batch_size, 3, imgsz, imgsz) + LOGGER.info(f"Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {shape}" % t) + + # Plots + if plots: + confusion_matrix.plot(save_dir=save_dir, names=list(names.values())) + # callbacks.run('on_val_end') + + mp_bbox, mr_bbox, map50_bbox, map_bbox, mp_mask, mr_mask, map50_mask, map_mask = metrics.mean_results() + + # Save JSON + if save_json and len(jdict): + w = Path(weights[0] if isinstance(weights, list) else weights).stem if weights is not None else "" # weights + anno_json = str(Path("../datasets/coco/annotations/instances_val2017.json")) # annotations + pred_json = str(save_dir / f"{w}_predictions.json") # predictions + LOGGER.info(f"\nEvaluating pycocotools mAP... saving {pred_json}...") + with open(pred_json, "w") as f: + json.dump(jdict, f) + + try: # https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb + from pycocotools.coco import COCO + from pycocotools.cocoeval import COCOeval + + anno = COCO(anno_json) # init annotations api + pred = anno.loadRes(pred_json) # init predictions api + results = [] + for eval in COCOeval(anno, pred, "bbox"), COCOeval(anno, pred, "segm"): + if is_coco: + eval.params.imgIds = [int(Path(x).stem) for x in dataloader.dataset.im_files] # img ID to evaluate + eval.evaluate() + eval.accumulate() + eval.summarize() + results.extend(eval.stats[:2]) # update results (mAP@0.5:0.95, mAP@0.5) + map_bbox, map50_bbox, map_mask, map50_mask = results + except Exception as e: + LOGGER.info(f"pycocotools unable to run: {e}") + + # Return results + model.float() # for training + if not training: + s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else "" + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}") + final_metric = mp_bbox, mr_bbox, map50_bbox, map_bbox, mp_mask, mr_mask, map50_mask, map_mask + return (*final_metric, *(loss.cpu() / len(dataloader)).tolist()), metrics.get_maps(nc), t + + +def parse_opt(): + """Parses and validates command-line arguments for configuring model training or inference.""" + parser = argparse.ArgumentParser() + parser.add_argument("--data", type=str, default=ROOT / "data/coco128-seg.yaml", help="dataset.yaml path") + parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov5s-seg.pt", help="model path(s)") + parser.add_argument("--batch-size", type=int, default=32, help="batch size") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="inference size (pixels)") + parser.add_argument("--conf-thres", type=float, default=0.001, help="confidence threshold") + parser.add_argument("--iou-thres", type=float, default=0.6, help="NMS IoU threshold") + parser.add_argument("--max-det", type=int, default=300, help="maximum detections per image") + parser.add_argument("--task", default="val", help="train, val, test, speed or study") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--single-cls", action="store_true", help="treat as single-class dataset") + parser.add_argument("--augment", action="store_true", help="augmented inference") + parser.add_argument("--verbose", action="store_true", help="report mAP by class") + parser.add_argument("--save-txt", action="store_true", help="save results to *.txt") + parser.add_argument("--save-hybrid", action="store_true", help="save label+prediction hybrid results to *.txt") + parser.add_argument("--save-conf", action="store_true", help="save confidences in --save-txt labels") + parser.add_argument("--save-json", action="store_true", help="save a COCO-JSON results file") + parser.add_argument("--project", default=ROOT / "runs/val-seg", help="save results to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") + opt = parser.parse_args() + opt.data = check_yaml(opt.data) # check YAML + # opt.save_json |= opt.data.endswith('coco.yaml') + opt.save_txt |= opt.save_hybrid + print_args(vars(opt)) + return opt + + +def main(opt): + """Executes the primary function based on task, including training, validation, testing, speed, and study + benchmarks. + """ + check_requirements(ROOT / "requirements.txt", exclude=("tensorboard", "thop")) + + if opt.task in ("train", "val", "test"): # run normally + if opt.conf_thres > 0.001: # https://github.com/ultralytics/yolov5/issues/1466 + LOGGER.warning(f"WARNING ⚠️ confidence threshold {opt.conf_thres} > 0.001 produces invalid results") + if opt.save_hybrid: + LOGGER.warning("WARNING ⚠️ --save-hybrid returns high mAP from hybrid labels, not from predictions alone") + run(**vars(opt)) + + else: + weights = opt.weights if isinstance(opt.weights, list) else [opt.weights] + opt.half = torch.cuda.is_available() and opt.device != "cpu" # FP16 for fastest results + if opt.task == "speed": # speed benchmarks + # python val.py --task speed --data coco.yaml --batch 1 --weights yolov5n.pt yolov5s.pt... + opt.conf_thres, opt.iou_thres, opt.save_json = 0.25, 0.45, False + for opt.weights in weights: + run(**vars(opt), plots=False) + + elif opt.task == "study": # speed vs mAP benchmarks + # python val.py --task study --data coco.yaml --iou 0.7 --weights yolov5n.pt yolov5s.pt... + for opt.weights in weights: + f = f"study_{Path(opt.data).stem}_{Path(opt.weights).stem}.txt" # filename to save to + x, y = list(range(256, 1536 + 128, 128)), [] # x axis (image sizes), y axis + for opt.imgsz in x: # img-size + LOGGER.info(f"\nRunning {f} --imgsz {opt.imgsz}...") + r, _, t = run(**vars(opt), plots=False) + y.append(r + t) # results and times + np.savetxt(f, y, fmt="%10.4g") # save + subprocess.run(["zip", "-r", "study.zip", "study_*.txt"]) + plot_val_study(x=x) # plot + else: + raise NotImplementedError(f'--task {opt.task} not in ("train", "val", "test", "speed", "study")') + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/test.py b/test.py deleted file mode 100644 index 92c6c948bb..0000000000 --- a/test.py +++ /dev/null @@ -1,222 +0,0 @@ -import argparse -import json - -from torch.utils.data import DataLoader - -from models import * -from utils.datasets import * -from utils.utils import * - - -def test(cfg, - data, - weights=None, - batch_size=16, - img_size=416, - iou_thres=0.5, - conf_thres=0.001, - nms_thres=0.5, - save_json=False, - model=None): - # Initialize/load model and set device - if model is None: - device = torch_utils.select_device(opt.device, batch_size=batch_size) - verbose = True - - # Initialize model - model = Darknet(cfg, img_size).to(device) - - # Load weights - attempt_download(weights) - if weights.endswith('.pt'): # pytorch format - model.load_state_dict(torch.load(weights, map_location=device)['model']) - else: # darknet format - _ = load_darknet_weights(model, weights) - - if torch.cuda.device_count() > 1: - model = nn.DataParallel(model) - else: - device = next(model.parameters()).device # get model device - verbose = False - - # Configure run - data = parse_data_cfg(data) - nc = int(data['classes']) # number of classes - test_path = data['valid'] # path to test images - names = load_classes(data['names']) # class names - - # Dataloader - dataset = LoadImagesAndLabels(test_path, img_size, batch_size) - batch_size = min(batch_size, len(dataset)) - dataloader = DataLoader(dataset, - batch_size=batch_size, - num_workers=min([os.cpu_count(), batch_size if batch_size > 1 else 0, 16]), - pin_memory=True, - collate_fn=dataset.collate_fn) - - seen = 0 - model.eval() - coco91class = coco80_to_coco91_class() - s = ('%20s' + '%10s' * 6) % ('Class', 'Images', 'Targets', 'P', 'R', 'mAP@0.5', 'F1') - p, r, f1, mp, mr, map, mf1 = 0., 0., 0., 0., 0., 0., 0. - loss = torch.zeros(3) - jdict, stats, ap, ap_class = [], [], [], [] - for batch_i, (imgs, targets, paths, shapes) in enumerate(tqdm(dataloader, desc=s)): - targets = targets.to(device) - imgs = imgs.to(device) - _, _, height, width = imgs.shape # batch size, channels, height, width - - # Plot images with bounding boxes - if batch_i == 0 and not os.path.exists('test_batch0.jpg'): - plot_images(imgs=imgs, targets=targets, paths=paths, fname='test_batch0.jpg') - - # Run model - inf_out, train_out = model(imgs) # inference and training outputs - - # Compute loss - if hasattr(model, 'hyp'): # if model has loss hyperparameters - loss += compute_loss(train_out, targets, model)[1][:3].cpu() # GIoU, obj, cls - - # Run NMS - output = non_max_suppression(inf_out, conf_thres=conf_thres, nms_thres=nms_thres) - - # Statistics per image - for si, pred in enumerate(output): - labels = targets[targets[:, 0] == si, 1:] - nl = len(labels) - tcls = labels[:, 0].tolist() if nl else [] # target class - seen += 1 - - if pred is None: - if nl: - stats.append(([], torch.Tensor(), torch.Tensor(), tcls)) - continue - - # Append to text file - # with open('test.txt', 'a') as file: - # [file.write('%11.5g' * 7 % tuple(x) + '\n') for x in pred] - - # Append to pycocotools JSON dictionary - if save_json: - # [{"image_id": 42, "category_id": 18, "bbox": [258.15, 41.29, 348.26, 243.78], "score": 0.236}, ... - image_id = int(Path(paths[si]).stem.split('_')[-1]) - box = pred[:, :4].clone() # xyxy - scale_coords(imgs[si].shape[1:], box, shapes[si][0], shapes[si][1]) # to original shape - box = xyxy2xywh(box) # xywh - box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner - for di, d in enumerate(pred): - jdict.append({'image_id': image_id, - 'category_id': coco91class[int(d[6])], - 'bbox': [floatn(x, 3) for x in box[di]], - 'score': floatn(d[4], 5)}) - - # Clip boxes to image bounds - clip_coords(pred, (height, width)) - - # Assign all predictions as incorrect - correct = [0] * len(pred) - if nl: - detected = [] - tcls_tensor = labels[:, 0] - - # target boxes - tbox = xywh2xyxy(labels[:, 1:5]) - tbox[:, [0, 2]] *= width - tbox[:, [1, 3]] *= height - - # Search for correct predictions - for i, (*pbox, pconf, pcls_conf, pcls) in enumerate(pred): - - # Break if all targets already located in image - if len(detected) == nl: - break - - # Continue if predicted class not among image classes - if pcls.item() not in tcls: - continue - - # Best iou, index between pred and targets - m = (pcls == tcls_tensor).nonzero().view(-1) - iou, bi = bbox_iou(pbox, tbox[m]).max(0) - - # If iou > threshold and class is correct mark as correct - if iou > iou_thres and m[bi] not in detected: # and pcls == tcls[bi]: - correct[i] = 1 - detected.append(m[bi]) - - # Append statistics (correct, conf, pcls, tcls) - stats.append((correct, pred[:, 4].cpu(), pred[:, 6].cpu(), tcls)) - - # Compute statistics - stats = [np.concatenate(x, 0) for x in list(zip(*stats))] # to numpy - if len(stats): - p, r, ap, f1, ap_class = ap_per_class(*stats) - mp, mr, map, mf1 = p.mean(), r.mean(), ap.mean(), f1.mean() - nt = np.bincount(stats[3].astype(np.int64), minlength=nc) # number of targets per class - else: - nt = torch.zeros(1) - - # Print results - pf = '%20s' + '%10.3g' * 6 # print format - print(pf % ('all', seen, nt.sum(), mp, mr, map, mf1)) - - # Print results per class - if verbose and nc > 1 and len(stats): - for i, c in enumerate(ap_class): - print(pf % (names[c], seen, nt[c], p[i], r[i], ap[i], f1[i])) - - # Save JSON - if save_json and map and len(jdict): - imgIds = [int(Path(x).stem.split('_')[-1]) for x in dataset.img_files] - with open('results.json', 'w') as file: - json.dump(jdict, file) - - try: - from pycocotools.coco import COCO - from pycocotools.cocoeval import COCOeval - except: - print('WARNING: missing pycocotools package, can not compute official COCO mAP. See requirements.txt.') - - # https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb - cocoGt = COCO('../coco/annotations/instances_val2014.json') # initialize COCO ground truth api - cocoDt = cocoGt.loadRes('results.json') # initialize COCO pred api - - cocoEval = COCOeval(cocoGt, cocoDt, 'bbox') - cocoEval.params.imgIds = imgIds # [:32] # only evaluate these images - cocoEval.evaluate() - cocoEval.accumulate() - cocoEval.summarize() - map = cocoEval.stats[1] # update mAP to pycocotools mAP - - # Return results - maps = np.zeros(nc) + map - for i, c in enumerate(ap_class): - maps[c] = ap[i] - return (mp, mr, map, mf1, *(loss / len(dataloader)).tolist()), maps - - -if __name__ == '__main__': - parser = argparse.ArgumentParser(prog='test.py') - parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path') - parser.add_argument('--data', type=str, default='data/coco.data', help='coco.data file path') - parser.add_argument('--weights', type=str, default='weights/yolov3-spp.weights', help='path to weights file') - parser.add_argument('--batch-size', type=int, default=16, help='size of each image batch') - parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)') - parser.add_argument('--iou-thres', type=float, default=0.5, help='iou threshold required to qualify as detected') - parser.add_argument('--conf-thres', type=float, default=0.001, help='object confidence threshold') - parser.add_argument('--nms-thres', type=float, default=0.5, help='iou threshold for non-maximum suppression') - parser.add_argument('--save-json', action='store_true', help='save a cocoapi-compatible JSON results file') - parser.add_argument('--device', default='', help='device id (i.e. 0 or 0,1) or cpu') - opt = parser.parse_args() - print(opt) - - with torch.no_grad(): - test(opt.cfg, - opt.data, - opt.weights, - opt.batch_size, - opt.img_size, - opt.iou_thres, - opt.conf_thres, - opt.nms_thres, - opt.save_json or (opt.data == 'data/coco.data')) diff --git a/train.py b/train.py index ad3286560e..620c1e3af7 100644 --- a/train.py +++ b/train.py @@ -1,493 +1,873 @@ -import argparse +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Train a YOLOv3 model on a custom dataset. Models and datasets download automatically from the latest YOLOv3 release. + +Usage - Single-GPU training: + $ python train.py --data coco128.yaml --weights yolov5s.pt --img 640 # from pretrained (recommended) + $ python train.py --data coco128.yaml --weights '' --cfg yolov5s.yaml --img 640 # from scratch + +Usage - Multi-GPU DDP training: + $ python -m torch.distributed.run --nproc_per_node 4 --master_port 1 train.py --data coco128.yaml --weights yolov5s.pt --img 640 --device 0,1,2,3 + +Models: https://github.com/ultralytics/yolov5/tree/master/models +Datasets: https://github.com/ultralytics/yolov5/tree/master/data +Tutorial: https://docs.ultralytics.com/yolov5/tutorials/train_custom_data +""" +import argparse +import math +import os +import random +import subprocess +import sys +import time +from copy import deepcopy +from datetime import datetime +from pathlib import Path + +try: + import comet_ml # must be imported before torch (if installed) +except ImportError: + comet_ml = None + +import numpy as np +import torch import torch.distributed as dist -import torch.optim as optim -import torch.optim.lr_scheduler as lr_scheduler - -import test # import test.py to get mAP after each epoch -from models import * -from utils.datasets import * -from utils.utils import * - -mixed_precision = True -try: # Mixed precision training https://github.com/NVIDIA/apex - from apex import amp -except: - mixed_precision = False # not installed - -wdir = 'weights' + os.sep # weights dir -last = wdir + 'last.pt' -best = wdir + 'best.pt' -results_file = 'results.txt' - -# Hyperparameters (k-series, 57.7 mAP yolov3-spp-416) https://github.com/ultralytics/yolov3/issues/310 -hyp = {'giou': 3.31, # giou loss gain - 'cls': 42.4, # cls loss gain - 'cls_pw': 1.0, # cls BCELoss positive_weight - 'obj': 52.0, # obj loss gain (*=img_size/320 if img_size != 320) - 'obj_pw': 1.0, # obj BCELoss positive_weight - 'iou_t': 0.213, # iou training threshold - 'lr0': 0.00261, # initial learning rate (SGD=1E-3, Adam=9E-5) - 'lrf': -4., # final LambdaLR learning rate = lr0 * (10 ** lrf) - 'momentum': 0.949, # SGD momentum - 'weight_decay': 0.000489, # optimizer weight decay - 'fl_gamma': 0.5, # focal loss gamma - 'hsv_h': 0.0103, # image HSV-Hue augmentation (fraction) - 'hsv_s': 0.691, # image HSV-Saturation augmentation (fraction) - 'hsv_v': 0.433, # image HSV-Value augmentation (fraction) - 'degrees': 1.43, # image rotation (+/- deg) - 'translate': 0.0663, # image translation (+/- fraction) - 'scale': 0.11, # image scale (+/- gain) - 'shear': 0.384} # image shear (+/- deg) - -# Overwrite hyp with hyp*.txt (optional) -f = glob.glob('hyp*.txt') -if f: - for k, v in zip(hyp.keys(), np.loadtxt(f[0])): - hyp[k] = v - - -def train(): - cfg = opt.cfg - data = opt.data - img_size = opt.img_size - epochs = 1 if opt.prebias else opt.epochs # 500200 batches at bs 64, 117263 images = 273 epochs - batch_size = opt.batch_size - accumulate = opt.accumulate # effective bs = batch_size * accumulate = 16 * 4 = 64 - weights = opt.weights # initial training weights - - if 'pw' not in opt.arc: # remove BCELoss positive weights - hyp['cls_pw'] = 1. - hyp['obj_pw'] = 1. - - # Initialize - init_seeds() - if opt.multi_scale: - img_sz_min = round(img_size / 32 / 1.5) - img_sz_max = round(img_size / 32 * 1.5) - img_size = img_sz_max * 32 # initiate with maximum multi_scale size - print('Using multi-scale %g - %g' % (img_sz_min * 32, img_size)) - - # Configure run - data_dict = parse_data_cfg(data) - train_path = data_dict['train'] - nc = int(data_dict['classes']) # number of classes - - # Remove previous results - for f in glob.glob('*_batch*.jpg') + glob.glob(results_file): - os.remove(f) - - # Initialize model - model = Darknet(cfg, arc=opt.arc).to(device) +import torch.nn as nn +import yaml +from torch.optim import lr_scheduler +from tqdm import tqdm + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[0] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from ultralytics.utils.patches import torch_load + +import val as validate # for end-of-epoch mAP +from models.experimental import attempt_load +from models.yolo import Model +from utils.autoanchor import check_anchors +from utils.autobatch import check_train_batch_size +from utils.callbacks import Callbacks +from utils.dataloaders import create_dataloader +from utils.downloads import attempt_download, is_url +from utils.general import ( + LOGGER, + TQDM_BAR_FORMAT, + check_amp, + check_dataset, + check_file, + check_git_info, + check_git_status, + check_img_size, + check_requirements, + check_suffix, + check_yaml, + colorstr, + get_latest_run, + increment_path, + init_seeds, + intersect_dicts, + labels_to_class_weights, + labels_to_image_weights, + methods, + one_cycle, + print_args, + print_mutation, + strip_optimizer, + yaml_save, +) +from utils.loggers import Loggers +from utils.loggers.comet.comet_utils import check_comet_resume +from utils.loss import ComputeLoss +from utils.metrics import fitness +from utils.plots import plot_evolve +from utils.torch_utils import ( + EarlyStopping, + ModelEMA, + de_parallel, + select_device, + smart_DDP, + smart_optimizer, + smart_resume, + torch_distributed_zero_first, +) + +LOCAL_RANK = int(os.getenv("LOCAL_RANK", -1)) # https://pytorch.org/docs/stable/elastic/run.html +RANK = int(os.getenv("RANK", -1)) +WORLD_SIZE = int(os.getenv("WORLD_SIZE", 1)) +GIT_INFO = check_git_info() + + +def train(hyp, opt, device, callbacks): # hyp is path/to/hyp.yaml or hyp dictionary + """Train a YOLOv3 model on a custom dataset and manage the training process. + + Args: + hyp (str | dict): Path to hyperparameters yaml file or hyperparameters dictionary. + opt (argparse.Namespace): Parsed command line arguments containing training options. + device (torch.device): Device to load and train the model on. + callbacks (Callbacks): Callbacks to handle various stages of the training lifecycle. + + Returns: + None + Usage - Single-GPU training: + $ python train.py --data coco128.yaml --weights yolov5s.pt --img 640 # from pretrained (recommended) + $ python train.py --data coco128.yaml --weights '' --cfg yolov5s.yaml --img 640 # from scratch + Usage - Multi-GPU DDP training: + $ python -m torch.distributed.run --nproc_per_node 4 --master_port 1 train.py --data coco128.yaml --weights + yolov5s.pt --img 640 --device 0,1,2,3 + Models: https://github.com/ultralytics/yolov5/tree/master/models + Datasets: https://github.com/ultralytics/yolov5/tree/master/data + Tutorial: https://docs.ultralytics.com/yolov5/tutorials/train_custom_data + + Examples: + ```python + from ultralytics import train + import argparse + import torch + from utils.callbacks import Callbacks + + # Example usage + args = argparse.Namespace( + data='coco128.yaml', + weights='yolov5s.pt', + cfg='yolov5s.yaml', + img_size=640, + epochs=50, + batch_size=16, + device='0' + ) + + device = torch.device(f'cuda:{args.device}' if torch.cuda.is_available() else 'cpu') + callbacks = Callbacks() + + train(hyp='hyp.scratch.yaml', opt=args, device=device, callbacks=callbacks) + ``` + """ + save_dir, epochs, batch_size, weights, single_cls, evolve, data, cfg, resume, noval, nosave, workers, freeze = ( + Path(opt.save_dir), + opt.epochs, + opt.batch_size, + opt.weights, + opt.single_cls, + opt.evolve, + opt.data, + opt.cfg, + opt.resume, + opt.noval, + opt.nosave, + opt.workers, + opt.freeze, + ) + callbacks.run("on_pretrain_routine_start") + + # Directories + w = save_dir / "weights" # weights dir + (w.parent if evolve else w).mkdir(parents=True, exist_ok=True) # make dir + last, best = w / "last.pt", w / "best.pt" + + # Hyperparameters + if isinstance(hyp, str): + with open(hyp, errors="ignore") as f: + hyp = yaml.safe_load(f) # load hyps dict + LOGGER.info(colorstr("hyperparameters: ") + ", ".join(f"{k}={v}" for k, v in hyp.items())) + opt.hyp = hyp.copy() # for saving hyps to checkpoints + + # Save run settings + if not evolve: + yaml_save(save_dir / "hyp.yaml", hyp) + yaml_save(save_dir / "opt.yaml", vars(opt)) + + # Loggers + data_dict = None + if RANK in {-1, 0}: + loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance + + # Register actions + for k in methods(loggers): + callbacks.register_action(k, callback=getattr(loggers, k)) + + # Process custom dataset artifact link + data_dict = loggers.remote_dataset + if resume: # If resuming runs from remote artifact + weights, epochs, hyp, batch_size = opt.weights, opt.epochs, opt.hyp, opt.batch_size + + # Config + plots = not evolve and not opt.noplots # create plots + cuda = device.type != "cpu" + init_seeds(opt.seed + 1 + RANK, deterministic=True) + with torch_distributed_zero_first(LOCAL_RANK): + data_dict = data_dict or check_dataset(data) # check if None + train_path, val_path = data_dict["train"], data_dict["val"] + nc = 1 if single_cls else int(data_dict["nc"]) # number of classes + names = {0: "item"} if single_cls and len(data_dict["names"]) != 1 else data_dict["names"] # class names + is_coco = isinstance(val_path, str) and val_path.endswith("coco/val2017.txt") # COCO dataset + + # Model + check_suffix(weights, ".pt") # check weights + pretrained = weights.endswith(".pt") + if pretrained: + with torch_distributed_zero_first(LOCAL_RANK): + weights = attempt_download(weights) # download if not found locally + ckpt = torch_load(weights, map_location="cpu") # load checkpoint to CPU to avoid CUDA memory leak + model = Model(cfg or ckpt["model"].yaml, ch=3, nc=nc, anchors=hyp.get("anchors")).to(device) # create + exclude = ["anchor"] if (cfg or hyp.get("anchors")) and not resume else [] # exclude keys + csd = ckpt["model"].float().state_dict() # checkpoint state_dict as FP32 + csd = intersect_dicts(csd, model.state_dict(), exclude=exclude) # intersect + model.load_state_dict(csd, strict=False) # load + LOGGER.info(f"Transferred {len(csd)}/{len(model.state_dict())} items from {weights}") # report + else: + model = Model(cfg, ch=3, nc=nc, anchors=hyp.get("anchors")).to(device) # create + amp = check_amp(model) # check AMP + + # Freeze + freeze = [f"model.{x}." for x in (freeze if len(freeze) > 1 else range(freeze[0]))] # layers to freeze + for k, v in model.named_parameters(): + v.requires_grad = True # train all layers + # v.register_hook(lambda x: torch.nan_to_num(x)) # NaN to 0 (commented for erratic training results) + if any(x in k for x in freeze): + LOGGER.info(f"freezing {k}") + v.requires_grad = False + + # Image size + gs = max(int(model.stride.max()), 32) # grid size (max stride) + imgsz = check_img_size(opt.imgsz, gs, floor=gs * 2) # verify imgsz is gs-multiple + + # Batch size + if RANK == -1 and batch_size == -1: # single-GPU only, estimate best batch size + batch_size = check_train_batch_size(model, imgsz, amp) + loggers.on_params_update({"batch_size": batch_size}) # Optimizer - pg0, pg1 = [], [] # optimizer parameter groups - for k, v in dict(model.named_parameters()).items(): - if 'Conv2d.weight' in k: - pg1 += [v] # parameter group 1 (apply weight_decay) - else: - pg0 += [v] # parameter group 0 - - if opt.adam: - optimizer = optim.Adam(pg0, lr=hyp['lr0']) - # optimizer = AdaBound(pg0, lr=hyp['lr0'], final_lr=0.1) + nbs = 64 # nominal batch size + accumulate = max(round(nbs / batch_size), 1) # accumulate loss before optimizing + hyp["weight_decay"] *= batch_size * accumulate / nbs # scale weight_decay + optimizer = smart_optimizer(model, opt.optimizer, hyp["lr0"], hyp["momentum"], hyp["weight_decay"]) + + # Scheduler + if opt.cos_lr: + lf = one_cycle(1, hyp["lrf"], epochs) # cosine 1->hyp['lrf'] else: - optimizer = optim.SGD(pg0, lr=hyp['lr0'], momentum=hyp['momentum'], nesterov=True) - optimizer.add_param_group({'params': pg1, 'weight_decay': hyp['weight_decay']}) # add pg1 with weight_decay - del pg0, pg1 - - # https://github.com/alphadl/lookahead.pytorch - # optimizer = torch_utils.Lookahead(optimizer, k=5, alpha=0.5) - - cutoff = -1 # backbone reaches to cutoff layer - start_epoch = 0 - best_fitness = float('inf') - attempt_download(weights) - if weights.endswith('.pt'): # pytorch format - # possible weights are '*.pt', 'yolov3-spp.pt', 'yolov3-tiny.pt' etc. - chkpt = torch.load(weights, map_location=device) - - # load model - try: - chkpt['model'] = {k: v for k, v in chkpt['model'].items() if model.state_dict()[k].numel() == v.numel()} - model.load_state_dict(chkpt['model'], strict=False) - # model.load_state_dict(chkpt['model']) - except KeyError as e: - s = "%s is not compatible with %s. Specify --weights '' or specify a --cfg compatible with %s. " \ - "See https://github.com/ultralytics/yolov3/issues/657" % (opt.weights, opt.cfg, opt.weights) - raise KeyError(s) from e - - # load optimizer - if chkpt['optimizer'] is not None: - optimizer.load_state_dict(chkpt['optimizer']) - best_fitness = chkpt['best_fitness'] - - # load results - if chkpt.get('training_results') is not None: - with open(results_file, 'w') as file: - file.write(chkpt['training_results']) # write results.txt - - start_epoch = chkpt['epoch'] + 1 - del chkpt - - elif len(weights) > 0: # darknet format - # possible weights are '*.weights', 'yolov3-tiny.conv.15', 'darknet53.conv.74' etc. - cutoff = load_darknet_weights(model, weights) - - if opt.transfer or opt.prebias: # transfer learning edge (yolo) layers - nf = int(model.module_defs[model.yolo_layers[0] - 1]['filters']) # yolo layer size (i.e. 255) - - if opt.prebias: - for p in optimizer.param_groups: - # lower param count allows more aggressive training settings: i.e. SGD ~0.1 lr0, ~0.9 momentum - p['lr'] *= 100 # lr gain - if p.get('momentum') is not None: # for SGD but not Adam - p['momentum'] *= 0.9 - - for p in model.parameters(): - if opt.prebias and p.numel() == nf: # train (yolo biases) - p.requires_grad = True - elif opt.transfer and p.shape[0] == nf: # train (yolo biases+weights) - p.requires_grad = True - else: # freeze layer - p.requires_grad = False - - # Scheduler https://github.com/ultralytics/yolov3/issues/238 - # lf = lambda x: 1 - x / epochs # linear ramp to zero - # lf = lambda x: 10 ** (hyp['lrf'] * x / epochs) # exp ramp - # lf = lambda x: 1 - 10 ** (hyp['lrf'] * (1 - x / epochs)) # inverse exp ramp - # scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) - # scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=range(59, 70, 1), gamma=0.8) # gradual fall to 0.1*lr0 - scheduler = lr_scheduler.MultiStepLR(optimizer, milestones=[round(opt.epochs * x) for x in [0.8, 0.9]], gamma=0.1) - scheduler.last_epoch = start_epoch - 1 - - # # Plot lr schedule - # y = [] - # for _ in range(epochs): - # scheduler.step() - # y.append(optimizer.param_groups[0]['lr']) - # plt.plot(y, label='LambdaLR') - # plt.xlabel('epoch') - # plt.ylabel('LR') - # plt.tight_layout() - # plt.savefig('LR.png', dpi=300) - - # Mixed precision training https://github.com/NVIDIA/apex - if mixed_precision: - model, optimizer = amp.initialize(model, optimizer, opt_level='O1', verbosity=0) - - # Initialize distributed training - if device.type != 'cpu' and torch.cuda.device_count() > 1: - dist.init_process_group(backend='nccl', # 'distributed backend' - init_method='tcp://127.0.0.1:9999', # distributed training init method - world_size=1, # number of nodes for distributed training - rank=0) # distributed training node rank - model = torch.nn.parallel.DistributedDataParallel(model, find_unused_parameters=True) - model.yolo_layers = model.module.yolo_layers # move yolo layer indices to top level - - # Dataset - dataset = LoadImagesAndLabels(train_path, - img_size, - batch_size, - augment=True, - hyp=hyp, # augmentation hyperparameters - rect=opt.rect, # rectangular training - image_weights=opt.img_weights, - cache_labels=True if epochs > 10 else False, - cache_images=False if opt.prebias else opt.cache_images) - - # Dataloader - batch_size = min(batch_size, len(dataset)) - dataloader = torch.utils.data.DataLoader(dataset, - batch_size=batch_size, - num_workers=min([os.cpu_count(), batch_size if batch_size > 1 else 0, 16]), - shuffle=not opt.rect, # Shuffle=True unless rectangular training is used - pin_memory=True, - collate_fn=dataset.collate_fn) - # Start training + def lf(x): + """Linear learning rate scheduler function with decay calculated by epoch proportion.""" + return (1 - x / epochs) * (1.0 - hyp["lrf"]) + hyp["lrf"] # linear + + scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf) # plot_lr_scheduler(optimizer, scheduler, epochs) + + # EMA + ema = ModelEMA(model) if RANK in {-1, 0} else None + + # Resume + best_fitness, start_epoch = 0.0, 0 + if pretrained: + if resume: + best_fitness, start_epoch, epochs = smart_resume(ckpt, optimizer, ema, weights, epochs, resume) + del ckpt, csd + + # DP mode + if cuda and RANK == -1 and torch.cuda.device_count() > 1: + LOGGER.warning( + "WARNING ⚠️ DP not recommended, use torch.distributed.run for best DDP Multi-GPU results.\n" + "See Multi-GPU Tutorial at https://docs.ultralytics.com/yolov5/tutorials/multi_gpu_training to get started." + ) + model = torch.nn.DataParallel(model) + + # SyncBatchNorm + if opt.sync_bn and cuda and RANK != -1: + model = torch.nn.SyncBatchNorm.convert_sync_batchnorm(model).to(device) + LOGGER.info("Using SyncBatchNorm()") + + # Trainloader + train_loader, dataset = create_dataloader( + train_path, + imgsz, + batch_size // WORLD_SIZE, + gs, + single_cls, + hyp=hyp, + augment=True, + cache=None if opt.cache == "val" else opt.cache, + rect=opt.rect, + rank=LOCAL_RANK, + workers=workers, + image_weights=opt.image_weights, + quad=opt.quad, + prefix=colorstr("train: "), + shuffle=True, + seed=opt.seed, + ) + labels = np.concatenate(dataset.labels, 0) + mlc = int(labels[:, 0].max()) # max label class + assert mlc < nc, f"Label class {mlc} exceeds nc={nc} in {data}. Possible class labels are 0-{nc - 1}" + + # Process 0 + if RANK in {-1, 0}: + val_loader = create_dataloader( + val_path, + imgsz, + batch_size // WORLD_SIZE * 2, + gs, + single_cls, + hyp=hyp, + cache=None if noval else opt.cache, + rect=True, + rank=-1, + workers=workers * 2, + pad=0.5, + prefix=colorstr("val: "), + )[0] + + if not resume: + if not opt.noautoanchor: + check_anchors(dataset, model=model, thr=hyp["anchor_t"], imgsz=imgsz) # run AutoAnchor + model.half().float() # pre-reduce anchor precision + + callbacks.run("on_pretrain_routine_end", labels, names) + + # DDP mode + if cuda and RANK != -1: + model = smart_DDP(model) + + # Model attributes + nl = de_parallel(model).model[-1].nl # number of detection layers (to scale hyps) + hyp["box"] *= 3 / nl # scale to layers + hyp["cls"] *= nc / 80 * 3 / nl # scale to classes and layers + hyp["obj"] *= (imgsz / 640) ** 2 * 3 / nl # scale to image size and layers + hyp["label_smoothing"] = opt.label_smoothing model.nc = nc # attach number of classes to model - model.arc = opt.arc # attach yolo architecture model.hyp = hyp # attach hyperparameters to model - model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) # attach class weights - torch_utils.model_info(model, report='summary') # 'full' or 'summary' - nb = len(dataloader) - maps = np.zeros(nc) # mAP per class - # torch.autograd.set_detect_anomaly(True) - results = (0, 0, 0, 0, 0, 0, 0) # 'P', 'R', 'mAP', 'F1', 'val GIoU', 'val Objectness', 'val Classification' + model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) * nc # attach class weights + model.names = names + + # Start training t0 = time.time() - print('Starting %s for %g epochs...' % ('prebias' if opt.prebias else 'training', epochs)) + nb = len(train_loader) # number of batches + nw = max(round(hyp["warmup_epochs"] * nb), 100) # number of warmup iterations, max(3 epochs, 100 iterations) + # nw = min(nw, (epochs - start_epoch) / 2 * nb) # limit warmup to < 1/2 of training + last_opt_step = -1 + maps = np.zeros(nc) # mAP per class + results = (0, 0, 0, 0, 0, 0, 0) # P, R, mAP@.5, mAP@.5-.95, val_loss(box, obj, cls) + scheduler.last_epoch = start_epoch - 1 # do not move + scaler = torch.cuda.amp.GradScaler(enabled=amp) + stopper, stop = EarlyStopping(patience=opt.patience), False + compute_loss = ComputeLoss(model) # init loss class + callbacks.run("on_train_start") + LOGGER.info( + f"Image sizes {imgsz} train, {imgsz} val\n" + f"Using {train_loader.num_workers * WORLD_SIZE} dataloader workers\n" + f"Logging results to {colorstr('bold', save_dir)}\n" + f"Starting training for {epochs} epochs..." + ) for epoch in range(start_epoch, epochs): # epoch ------------------------------------------------------------------ + callbacks.run("on_train_epoch_start") model.train() - print(('\n' + '%10s' * 8) % ('Epoch', 'gpu_mem', 'GIoU', 'obj', 'cls', 'total', 'targets', 'img_size')) - - # Freeze backbone at epoch 0, unfreeze at epoch 1 (optional) - freeze_backbone = False - if freeze_backbone and epoch < 2: - for name, p in model.named_parameters(): - if int(name.split('.')[1]) < cutoff: # if layer < 75 - p.requires_grad = False if epoch == 0 else True - - # Update image weights (optional) - if dataset.image_weights: - w = model.class_weights.cpu().numpy() * (1 - maps) ** 2 # class weights - image_weights = labels_to_image_weights(dataset.labels, nc=nc, class_weights=w) - dataset.indices = random.choices(range(dataset.n), weights=image_weights, k=dataset.n) # rand weighted idx - - mloss = torch.zeros(4).to(device) # mean losses - pbar = tqdm(enumerate(dataloader), total=nb) # progress bar + + # Update image weights (optional, single-GPU only) + if opt.image_weights: + cw = model.class_weights.cpu().numpy() * (1 - maps) ** 2 / nc # class weights + iw = labels_to_image_weights(dataset.labels, nc=nc, class_weights=cw) # image weights + dataset.indices = random.choices(range(dataset.n), weights=iw, k=dataset.n) # rand weighted idx + + # Update mosaic border (optional) + # b = int(random.uniform(0.25 * imgsz, 0.75 * imgsz + gs) // gs * gs) + # dataset.mosaic_border = [b - imgsz, -b] # height, width borders + + mloss = torch.zeros(3, device=device) # mean losses + if RANK != -1: + train_loader.sampler.set_epoch(epoch) + pbar = enumerate(train_loader) + LOGGER.info(("\n" + "%11s" * 7) % ("Epoch", "GPU_mem", "box_loss", "obj_loss", "cls_loss", "Instances", "Size")) + if RANK in {-1, 0}: + pbar = tqdm(pbar, total=nb, bar_format=TQDM_BAR_FORMAT) # progress bar + optimizer.zero_grad() for i, (imgs, targets, paths, _) in pbar: # batch ------------------------------------------------------------- + callbacks.run("on_train_batch_start") ni = i + nb * epoch # number integrated batches (since train start) - imgs = imgs.to(device) - targets = targets.to(device) - - # Multi-Scale training + imgs = imgs.to(device, non_blocking=True).float() / 255 # uint8 to float32, 0-255 to 0.0-1.0 + + # Warmup + if ni <= nw: + xi = [0, nw] # x interp + # compute_loss.gr = np.interp(ni, xi, [0.0, 1.0]) # iou loss ratio (obj_loss = 1.0 or iou) + accumulate = max(1, np.interp(ni, xi, [1, nbs / batch_size]).round()) + for j, x in enumerate(optimizer.param_groups): + # bias lr falls from 0.1 to lr0, all other lrs rise from 0.0 to lr0 + x["lr"] = np.interp(ni, xi, [hyp["warmup_bias_lr"] if j == 0 else 0.0, x["initial_lr"] * lf(epoch)]) + if "momentum" in x: + x["momentum"] = np.interp(ni, xi, [hyp["warmup_momentum"], hyp["momentum"]]) + + # Multi-scale if opt.multi_scale: - if ni / accumulate % 10 == 0: #  adjust (67% - 150%) every 10 batches - img_size = random.randrange(img_sz_min, img_sz_max + 1) * 32 - sf = img_size / max(imgs.shape[2:]) # scale factor + sz = random.randrange(int(imgsz * 0.5), int(imgsz * 1.5) + gs) // gs * gs # size + sf = sz / max(imgs.shape[2:]) # scale factor if sf != 1: - ns = [math.ceil(x * sf / 32.) * 32 for x in imgs.shape[2:]] # new shape (stretched to 32-multiple) - imgs = F.interpolate(imgs, size=ns, mode='bilinear', align_corners=False) - - # Plot images with bounding boxes - if ni == 0: - fname = 'train_batch%g.jpg' % i - plot_images(imgs=imgs, targets=targets, paths=paths, fname=fname) - if tb_writer: - tb_writer.add_image(fname, cv2.imread(fname)[:, :, ::-1], dataformats='HWC') - - # Hyperparameter burn-in - # n_burn = nb - 1 # min(nb // 5 + 1, 1000) # number of burn-in batches - # if ni <= n_burn: - # for m in model.named_modules(): - # if m[0].endswith('BatchNorm2d'): - # m[1].momentum = 1 - i / n_burn * 0.99 # BatchNorm2d momentum falls from 1 - 0.01 - # g = (i / n_burn) ** 4 # gain rises from 0 - 1 - # for x in optimizer.param_groups: - # x['lr'] = hyp['lr0'] * g - # x['weight_decay'] = hyp['weight_decay'] * g - - # Run model - pred = model(imgs) - - # Compute loss - loss, loss_items = compute_loss(pred, targets, model) - if not torch.isfinite(loss): - print('WARNING: non-finite loss, ending training ', loss_items) - return results - - # Scale loss by nominal batch_size of 64 - loss *= batch_size / 64 - - # Compute gradient - if mixed_precision: - with amp.scale_loss(loss, optimizer) as scaled_loss: - scaled_loss.backward() - else: - loss.backward() - - # Accumulate gradient for x batches before optimizing - if ni % accumulate == 0: - optimizer.step() + ns = [math.ceil(x * sf / gs) * gs for x in imgs.shape[2:]] # new shape (stretched to gs-multiple) + imgs = nn.functional.interpolate(imgs, size=ns, mode="bilinear", align_corners=False) + + # Forward + with torch.cuda.amp.autocast(amp): + pred = model(imgs) # forward + loss, loss_items = compute_loss(pred, targets.to(device)) # loss scaled by batch_size + if RANK != -1: + loss *= WORLD_SIZE # gradient averaged between devices in DDP mode + if opt.quad: + loss *= 4.0 + + # Backward + scaler.scale(loss).backward() + + # Optimize - https://pytorch.org/docs/master/notes/amp_examples.html + if ni - last_opt_step >= accumulate: + scaler.unscale_(optimizer) # unscale gradients + torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=10.0) # clip gradients + scaler.step(optimizer) # optimizer.step + scaler.update() optimizer.zero_grad() - - # Print batch results - mloss = (mloss * i + loss_items) / (i + 1) # update mean losses - mem = torch.cuda.memory_cached() / 1E9 if torch.cuda.is_available() else 0 # (GB) - s = ('%10s' * 2 + '%10.3g' * 6) % ( - '%g/%g' % (epoch, epochs - 1), '%.3gG' % mem, *mloss, len(targets), img_size) - pbar.set_description(s) - + if ema: + ema.update(model) + last_opt_step = ni + + # Log + if RANK in {-1, 0}: + mloss = (mloss * i + loss_items) / (i + 1) # update mean losses + mem = f"{torch.cuda.memory_reserved() / 1e9 if torch.cuda.is_available() else 0:.3g}G" # (GB) + pbar.set_description( + ("%11s" * 2 + "%11.4g" * 5) + % (f"{epoch}/{epochs - 1}", mem, *mloss, targets.shape[0], imgs.shape[-1]) + ) + callbacks.run("on_train_batch_end", model, ni, imgs, targets, paths, list(mloss)) + if callbacks.stop_training: + return # end batch ------------------------------------------------------------------------------------------------ - # Update scheduler + # Scheduler + lr = [x["lr"] for x in optimizer.param_groups] # for loggers scheduler.step() - # Process epoch results - final_epoch = epoch + 1 == epochs - if opt.prebias: - print_model_biases(model) - else: - # Calculate mAP (always test final epoch, skip first 10 if opt.nosave) - if not (opt.notest or (opt.nosave and epoch < 10)) or final_epoch: - with torch.no_grad(): - results, maps = test.test(cfg, - data, - batch_size=batch_size, - img_size=opt.img_size, - model=model, - conf_thres=0.001 if final_epoch and epoch > 0 else 0.1, # 0.1 for speed - save_json=final_epoch and epoch > 0 and 'coco.data' in data) - - # Write epoch results - with open(results_file, 'a') as f: - f.write(s + '%10.3g' * 7 % results + '\n') # P, R, mAP, F1, test_losses=(GIoU, obj, cls) - if len(opt.name) and opt.bucket and not opt.prebias: - os.system('gsutil cp results.txt gs://%s/results%s.txt' % (opt.bucket, opt.name)) - - # Write Tensorboard results - if tb_writer: - x = list(mloss) + list(results) - titles = ['GIoU', 'Objectness', 'Classification', 'Train loss', - 'Precision', 'Recall', 'mAP', 'F1', 'val GIoU', 'val Objectness', 'val Classification'] - for xi, title in zip(x, titles): - tb_writer.add_scalar(title, xi, epoch) - - # Update best mAP - fitness = sum(results[4:]) # total loss - if fitness < best_fitness: - best_fitness = fitness - - # Save training results - save = (not opt.nosave) or (final_epoch and not opt.evolve) or opt.prebias - if save: - with open(results_file, 'r') as f: - # Create checkpoint - chkpt = {'epoch': epoch, - 'best_fitness': best_fitness, - 'training_results': f.read(), - 'model': model.module.state_dict() if type( - model) is nn.parallel.DistributedDataParallel else model.state_dict(), - 'optimizer': None if final_epoch else optimizer.state_dict()} - - # Save last checkpoint - torch.save(chkpt, last) - - # Save best checkpoint - if best_fitness == fitness: - torch.save(chkpt, best) - - # Save backup every 10 epochs (optional) - if epoch > 0 and epoch % 10 == 0: - torch.save(chkpt, wdir + 'backup%g.pt' % epoch) - - # Delete checkpoint - del chkpt + if RANK in {-1, 0}: + # mAP + callbacks.run("on_train_epoch_end", epoch=epoch) + ema.update_attr(model, include=["yaml", "nc", "hyp", "names", "stride", "class_weights"]) + final_epoch = (epoch + 1 == epochs) or stopper.possible_stop + if not noval or final_epoch: # Calculate mAP + results, maps, _ = validate.run( + data_dict, + batch_size=batch_size // WORLD_SIZE * 2, + imgsz=imgsz, + half=amp, + model=ema.ema, + single_cls=single_cls, + dataloader=val_loader, + save_dir=save_dir, + plots=False, + callbacks=callbacks, + compute_loss=compute_loss, + ) + + # Update best mAP + fi = fitness(np.array(results).reshape(1, -1)) # weighted combination of [P, R, mAP@.5, mAP@.5-.95] + stop = stopper(epoch=epoch, fitness=fi) # early stop check + if fi > best_fitness: + best_fitness = fi + log_vals = list(mloss) + list(results) + lr + callbacks.run("on_fit_epoch_end", log_vals, epoch, best_fitness, fi) + + # Save model + if (not nosave) or (final_epoch and not evolve): # if save + ckpt = { + "epoch": epoch, + "best_fitness": best_fitness, + "model": deepcopy(de_parallel(model)).half(), + "ema": deepcopy(ema.ema).half(), + "updates": ema.updates, + "optimizer": optimizer.state_dict(), + "opt": vars(opt), + "git": GIT_INFO, # {remote, branch, commit} if a git repo + "date": datetime.now().isoformat(), + } + + # Save last, best and delete + torch.save(ckpt, last) + if best_fitness == fi: + torch.save(ckpt, best) + if opt.save_period > 0 and epoch % opt.save_period == 0: + torch.save(ckpt, w / f"epoch{epoch}.pt") + del ckpt + callbacks.run("on_model_save", last, epoch, final_epoch, best_fitness, fi) + + # EarlyStopping + if RANK != -1: # if DDP training + broadcast_list = [stop if RANK == 0 else None] + dist.broadcast_object_list(broadcast_list, 0) # broadcast 'stop' to all ranks + if RANK != 0: + stop = broadcast_list[0] + if stop: + break # must break all DDP ranks # end epoch ---------------------------------------------------------------------------------------------------- + # end training ----------------------------------------------------------------------------------------------------- + if RANK in {-1, 0}: + LOGGER.info(f"\n{epoch - start_epoch + 1} epochs completed in {(time.time() - t0) / 3600:.3f} hours.") + for f in last, best: + if f.exists(): + strip_optimizer(f) # strip optimizers + if f is best: + LOGGER.info(f"\nValidating {f}...") + results, _, _ = validate.run( + data_dict, + batch_size=batch_size // WORLD_SIZE * 2, + imgsz=imgsz, + model=attempt_load(f, device).half(), + iou_thres=0.65 if is_coco else 0.60, # best pycocotools at iou 0.65 + single_cls=single_cls, + dataloader=val_loader, + save_dir=save_dir, + save_json=is_coco, + verbose=True, + plots=plots, + callbacks=callbacks, + compute_loss=compute_loss, + ) # val best model with plots + if is_coco: + callbacks.run("on_fit_epoch_end", list(mloss) + list(results) + lr, epoch, best_fitness, fi) + + callbacks.run("on_train_end", last, best, epoch, results) - # end training - if len(opt.name) and not opt.prebias: - fresults, flast, fbest = 'results%s.txt' % opt.name, 'last%s.pt' % opt.name, 'best%s.pt' % opt.name - os.rename('results.txt', fresults) - os.rename(wdir + 'last.pt', wdir + flast) if os.path.exists(wdir + 'last.pt') else None - os.rename(wdir + 'best.pt', wdir + fbest) if os.path.exists(wdir + 'best.pt') else None - - # save to cloud - if opt.bucket: - os.system('gsutil cp %s %s gs://%s' % (fresults, wdir + flast, opt.bucket)) - - plot_results() # save as results.png - print('%g epochs completed in %.3f hours.\n' % (epoch - start_epoch + 1, (time.time() - t0) / 3600)) - dist.destroy_process_group() if torch.cuda.device_count() > 1 else None torch.cuda.empty_cache() - return results -def prebias(): - # trains output bias layers for 1 epoch and creates new backbone - if opt.prebias: - a = opt.img_weights # save settings - opt.img_weights = False # disable settings +def parse_opt(known=False): + """Parse command line arguments for configuring the training of a YOLO model. - train() # transfer-learn yolo biases for 1 epoch - create_backbone(last) # saved results as backbone.pt + Args: + known (bool): Flag to parse known arguments only, defaults to False. - opt.weights = wdir + 'backbone.pt' # assign backbone - opt.prebias = False # disable prebias - opt.img_weights = a # reset settings + Returns: + (argparse.Namespace): Parsed command line arguments. + Examples: + ```python + options = parse_opt() + print(options.weights) + ``` -if __name__ == '__main__': + Notes: + * The default weights path is 'yolov3-tiny.pt'. + * Set `known` to True for parsing only the known arguments, useful for partial arguments. + + References: + * Models: https://github.com/ultralytics/yolov5/tree/master/models + * Datasets: https://github.com/ultralytics/yolov5/tree/master/data + * Training Tutorial: https://docs.ultralytics.com/yolov5/tutorials/train_custom_data + """ parser = argparse.ArgumentParser() - parser.add_argument('--epochs', type=int, default=273) # 500200 batches at bs 16, 117263 images = 273 epochs - parser.add_argument('--batch-size', type=int, default=32) # effective bs = batch_size * accumulate = 16 * 4 = 64 - parser.add_argument('--accumulate', type=int, default=2, help='batches to accumulate before optimizing') - parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path') - parser.add_argument('--data', type=str, default='data/coco.data', help='*.data file path') - parser.add_argument('--multi-scale', action='store_true', help='adjust (67% - 150%) img_size every 10 batches') - parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)') - parser.add_argument('--rect', action='store_true', help='rectangular training') - parser.add_argument('--resume', action='store_true', help='resume training from last.pt') - parser.add_argument('--transfer', action='store_true', help='transfer learning') - parser.add_argument('--nosave', action='store_true', help='only save final checkpoint') - parser.add_argument('--notest', action='store_true', help='only test final epoch') - parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters') - parser.add_argument('--bucket', type=str, default='', help='gsutil bucket') - parser.add_argument('--img-weights', action='store_true', help='select training images by weight') - parser.add_argument('--cache-images', action='store_true', help='cache images for faster training') - parser.add_argument('--weights', type=str, default='weights/ultralytics49.pt', help='initial weights') - parser.add_argument('--arc', type=str, default='default', help='yolo architecture') # defaultpw, uCE, uBCE - parser.add_argument('--prebias', action='store_true', help='transfer-learn yolo biases prior to training') - parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied') - parser.add_argument('--device', default='', help='device id (i.e. 0 or 0,1 or cpu)') - parser.add_argument('--adam', action='store_true', help='use adam optimizer') - parser.add_argument('--var', type=float, help='debug variable') - opt = parser.parse_args() - opt.weights = last if opt.resume else opt.weights - print(opt) - device = torch_utils.select_device(opt.device, apex=mixed_precision, batch_size=opt.batch_size) - if device.type == 'cpu': - mixed_precision = False - - # scale hyp['obj'] by img_size (evolved at 416) - hyp['obj'] *= opt.img_size / 416. - - tb_writer = None - if not opt.evolve: # Train normally - try: - # Start Tensorboard with "tensorboard --logdir=runs", view at http://localhost:6006/ - from torch.utils.tensorboard import SummaryWriter - - tb_writer = SummaryWriter() - except: - pass - - prebias() # optional - train() # train normally - - else: # Evolve hyperparameters (optional) - opt.notest = True # only test final epoch - opt.nosave = True # only save final checkpoint + parser.add_argument("--weights", type=str, default=ROOT / "yolov3-tiny.pt", help="initial weights path") + parser.add_argument("--cfg", type=str, default="", help="model.yaml path") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path") + parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/hyp.scratch-low.yaml", help="hyperparameters path") + parser.add_argument("--epochs", type=int, default=100, help="total training epochs") + parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)") + parser.add_argument("--rect", action="store_true", help="rectangular training") + parser.add_argument("--resume", nargs="?", const=True, default=False, help="resume most recent training") + parser.add_argument("--nosave", action="store_true", help="only save final checkpoint") + parser.add_argument("--noval", action="store_true", help="only validate final epoch") + parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor") + parser.add_argument("--noplots", action="store_true", help="save no plot files") + parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations") + parser.add_argument("--bucket", type=str, default="", help="gsutil bucket") + parser.add_argument("--cache", type=str, nargs="?", const="ram", help="image --cache ram/disk") + parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%") + parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class") + parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer") + parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--project", default=ROOT / "runs/train", help="save to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--quad", action="store_true", help="quad dataloader") + parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler") + parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon") + parser.add_argument("--patience", type=int, default=100, help="EarlyStopping patience (epochs without improvement)") + parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2") + parser.add_argument("--save-period", type=int, default=-1, help="Save checkpoint every x epochs (disabled if < 1)") + parser.add_argument("--seed", type=int, default=0, help="Global training seed") + parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify") + + # Logger arguments + parser.add_argument("--entity", default=None, help="Entity") + parser.add_argument("--upload_dataset", nargs="?", const=True, default=False, help='Upload data, "val" option') + parser.add_argument("--bbox_interval", type=int, default=-1, help="Set bounding-box image logging interval") + parser.add_argument("--artifact_alias", type=str, default="latest", help="Version of dataset artifact to use") + + return parser.parse_known_args()[0] if known else parser.parse_args() + + +def main(opt, callbacks=Callbacks()): + """Main training/evolution script handling model checks, DDP setup, training, and hyperparameter evolution. + + Args: + opt (argparse.Namespace): Parsed command-line options. + callbacks (Callbacks, optional): Callback object for handling training events. Defaults to Callbacks(). + + Returns: + None + + Raises: + AssertionError: If certain constraints are violated (e.g., when specific options are incompatible with DDP + training). + + Examples: + Single-GPU training: + ```python + $ python train.py --data coco128.yaml --weights yolov5s.pt --img 640 # from pretrained (recommended) + $ python train.py --data coco128.yaml --weights '' --cfg yolov5s.yaml --img 640 # from scratch + ``` + + Multi-GPU DDP training: + ```python + $ python -m torch.distributed.run --nproc_per_node 4 --master_port 1 train.py --data coco128.yaml --weights yolov5s.pt --img 640 --device 0,1,2,3 + ``` + + Models: https://github.com/ultralytics/yolov5/tree/master/models + Datasets: https://github.com/ultralytics/yolov5/tree/master/data + Tutorial: https://docs.ultralytics.com/yolov5/tutorials/train_custom_data + + Notes: + - For a tutorial on using Multi-GPU with DDP: https://docs.ultralytics.com/yolov5/tutorials/multi_gpu_training + """ + if RANK in {-1, 0}: + print_args(vars(opt)) + check_git_status() + check_requirements(ROOT / "requirements.txt") + + # Resume (from specified or most recent last.pt) + if opt.resume and not check_comet_resume(opt) and not opt.evolve: + last = Path(check_file(opt.resume) if isinstance(opt.resume, str) else get_latest_run()) + opt_yaml = last.parent.parent / "opt.yaml" # train options yaml + opt_data = opt.data # original dataset + if opt_yaml.is_file(): + with open(opt_yaml, errors="ignore") as f: + d = yaml.safe_load(f) + else: + d = torch_load(last, map_location="cpu")["opt"] + opt = argparse.Namespace(**d) # replace + opt.cfg, opt.weights, opt.resume = "", str(last), True # reinstate + if is_url(opt_data): + opt.data = check_file(opt_data) # avoid HUB resume auth timeout + else: + opt.data, opt.cfg, opt.hyp, opt.weights, opt.project = ( + check_file(opt.data), + check_yaml(opt.cfg), + check_yaml(opt.hyp), + str(opt.weights), + str(opt.project), + ) # checks + assert len(opt.cfg) or len(opt.weights), "either --cfg or --weights must be specified" + if opt.evolve: + if opt.project == str(ROOT / "runs/train"): # if default project name, rename to runs/evolve + opt.project = str(ROOT / "runs/evolve") + opt.exist_ok, opt.resume = opt.resume, False # pass resume to exist_ok and disable resume + if opt.name == "cfg": + opt.name = Path(opt.cfg).stem # use model.yaml as name + opt.save_dir = str(increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok)) + + # DDP mode + device = select_device(opt.device, batch_size=opt.batch_size) + if LOCAL_RANK != -1: + msg = "is not compatible with YOLOv3 Multi-GPU DDP training" + assert not opt.image_weights, f"--image-weights {msg}" + assert not opt.evolve, f"--evolve {msg}" + assert opt.batch_size != -1, f"AutoBatch with --batch-size -1 {msg}, please pass a valid --batch-size" + assert opt.batch_size % WORLD_SIZE == 0, f"--batch-size {opt.batch_size} must be multiple of WORLD_SIZE" + assert torch.cuda.device_count() > LOCAL_RANK, "insufficient CUDA devices for DDP command" + torch.cuda.set_device(LOCAL_RANK) + device = torch.device("cuda", LOCAL_RANK) + dist.init_process_group(backend="nccl" if dist.is_nccl_available() else "gloo") + + # Train + if not opt.evolve: + train(opt.hyp, opt, device, callbacks) + + # Evolve hyperparameters (optional) + else: + # Hyperparameter evolution metadata (mutation scale 0-1, lower_limit, upper_limit) + meta = { + "lr0": (1, 1e-5, 1e-1), # initial learning rate (SGD=1E-2, Adam=1E-3) + "lrf": (1, 0.01, 1.0), # final OneCycleLR learning rate (lr0 * lrf) + "momentum": (0.3, 0.6, 0.98), # SGD momentum/Adam beta1 + "weight_decay": (1, 0.0, 0.001), # optimizer weight decay + "warmup_epochs": (1, 0.0, 5.0), # warmup epochs (fractions ok) + "warmup_momentum": (1, 0.0, 0.95), # warmup initial momentum + "warmup_bias_lr": (1, 0.0, 0.2), # warmup initial bias lr + "box": (1, 0.02, 0.2), # box loss gain + "cls": (1, 0.2, 4.0), # cls loss gain + "cls_pw": (1, 0.5, 2.0), # cls BCELoss positive_weight + "obj": (1, 0.2, 4.0), # obj loss gain (scale with pixels) + "obj_pw": (1, 0.5, 2.0), # obj BCELoss positive_weight + "iou_t": (0, 0.1, 0.7), # IoU training threshold + "anchor_t": (1, 2.0, 8.0), # anchor-multiple threshold + "anchors": (2, 2.0, 10.0), # anchors per output grid (0 to ignore) + "fl_gamma": (0, 0.0, 2.0), # focal loss gamma (efficientDet default gamma=1.5) + "hsv_h": (1, 0.0, 0.1), # image HSV-Hue augmentation (fraction) + "hsv_s": (1, 0.0, 0.9), # image HSV-Saturation augmentation (fraction) + "hsv_v": (1, 0.0, 0.9), # image HSV-Value augmentation (fraction) + "degrees": (1, 0.0, 45.0), # image rotation (+/- deg) + "translate": (1, 0.0, 0.9), # image translation (+/- fraction) + "scale": (1, 0.0, 0.9), # image scale (+/- gain) + "shear": (1, 0.0, 10.0), # image shear (+/- deg) + "perspective": (0, 0.0, 0.001), # image perspective (+/- fraction), range 0-0.001 + "flipud": (1, 0.0, 1.0), # image flip up-down (probability) + "fliplr": (0, 0.0, 1.0), # image flip left-right (probability) + "mosaic": (1, 0.0, 1.0), # image mixup (probability) + "mixup": (1, 0.0, 1.0), # image mixup (probability) + "copy_paste": (1, 0.0, 1.0), + } # segment copy-paste (probability) + + with open(opt.hyp, errors="ignore") as f: + hyp = yaml.safe_load(f) # load hyps dict + if "anchors" not in hyp: # anchors commented in hyp.yaml + hyp["anchors"] = 3 + if opt.noautoanchor: + del hyp["anchors"], meta["anchors"] + opt.noval, opt.nosave, save_dir = True, True, Path(opt.save_dir) # only val/save final epoch + # ei = [isinstance(x, (int, float)) for x in hyp.values()] # evolvable indices + evolve_yaml, evolve_csv = save_dir / "hyp_evolve.yaml", save_dir / "evolve.csv" if opt.bucket: - os.system('gsutil cp gs://%s/evolve.txt .' % opt.bucket) # download evolve.txt if exists - - for _ in range(1): # generations to evolve - if os.path.exists('evolve.txt'): # if evolve.txt exists: select best hyps and mutate + # download evolve.csv if exists + subprocess.run( + [ + "gsutil", + "cp", + f"gs://{opt.bucket}/evolve.csv", + str(evolve_csv), + ] + ) + + for _ in range(opt.evolve): # generations to evolve + if evolve_csv.exists(): # if evolve.csv exists: select best hyps and mutate # Select parent(s) - x = np.loadtxt('evolve.txt', ndmin=2) - parent = 'weighted' # parent selection method: 'single' or 'weighted' - if parent == 'single' or len(x) == 1: - x = x[fitness(x).argmax()] - elif parent == 'weighted': # weighted combination - n = min(10, x.shape[0]) # number to merge - x = x[np.argsort(-fitness(x))][:n] # top n mutations - w = fitness(x) - fitness(x).min() # weights - x = (x[:n] * w.reshape(n, 1)).sum(0) / w.sum() # new parent - for i, k in enumerate(hyp.keys()): - hyp[k] = x[i + 7] + parent = "single" # parent selection method: 'single' or 'weighted' + x = np.loadtxt(evolve_csv, ndmin=2, delimiter=",", skiprows=1) + n = min(5, len(x)) # number of previous results to consider + x = x[np.argsort(-fitness(x))][:n] # top n mutations + w = fitness(x) - fitness(x).min() + 1e-6 # weights (sum > 0) + if parent == "single" or len(x) == 1: + # x = x[random.randint(0, n - 1)] # random selection + x = x[random.choices(range(n), weights=w)[0]] # weighted selection + elif parent == "weighted": + x = (x * w.reshape(n, 1)).sum(0) / w.sum() # weighted combination # Mutate - np.random.seed(int(time.time())) - s = [.2, .2, .2, .2, .2, .2, .2, .0, .02, .2, .2, .2, .2, .2, .2, .2, .2, .2] # sigmas - for i, k in enumerate(hyp.keys()): - x = (np.random.randn(1) * s[i] + 1) ** 2.0 # plt.hist(x.ravel(), 300) - hyp[k] *= float(x) # vary by sigmas - - # Clip to limits - keys = ['lr0', 'iou_t', 'momentum', 'weight_decay', 'hsv_s', 'hsv_v', 'translate', 'scale', 'fl_gamma'] - limits = [(1e-5, 1e-2), (0.00, 0.70), (0.60, 0.98), (0, 0.001), (0, .9), (0, .9), (0, .9), (0, .9), (0, 3)] - for k, v in zip(keys, limits): - hyp[k] = np.clip(hyp[k], v[0], v[1]) + mp, s = 0.8, 0.2 # mutation probability, sigma + npr = np.random + npr.seed(int(time.time())) + g = np.array([meta[k][0] for k in hyp.keys()]) # gains 0-1 + ng = len(meta) + v = np.ones(ng) + while all(v == 1): # mutate until a change occurs (prevent duplicates) + v = (g * (npr.random(ng) < mp) * npr.randn(ng) * npr.random() * s + 1).clip(0.3, 3.0) + for i, k in enumerate(hyp.keys()): # plt.hist(v.ravel(), 300) + hyp[k] = float(x[i + 7] * v[i]) # mutate + + # Constrain to limits + for k, v in meta.items(): + hyp[k] = max(hyp[k], v[1]) # lower limit + hyp[k] = min(hyp[k], v[2]) # upper limit + hyp[k] = round(hyp[k], 5) # significant digits # Train mutation - prebias() - results = train() - + results = train(hyp.copy(), opt, device, callbacks) + callbacks = Callbacks() # Write mutation results - print_mutation(hyp, results, opt.bucket) - - # Plot results - # plot_evolution_results(hyp) + keys = ( + "metrics/precision", + "metrics/recall", + "metrics/mAP_0.5", + "metrics/mAP_0.5:0.95", + "val/box_loss", + "val/obj_loss", + "val/cls_loss", + ) + print_mutation(keys, results, hyp.copy(), save_dir, opt.bucket) + + # Plot results + plot_evolve(evolve_csv) + LOGGER.info( + f"Hyperparameter evolution finished {opt.evolve} generations\n" + f"Results saved to {colorstr('bold', save_dir)}\n" + f"Usage example: $ python train.py --hyp {evolve_yaml}" + ) + + +def run(**kwargs): + """Run the training process for a YOLOv3 model with the specified configurations. + + Args: + data (str): Path to the dataset YAML file. + weights (str): Path to the pre-trained weights file or '' to train from scratch. + cfg (str): Path to the model configuration file. + hyp (str): Path to the hyperparameters YAML file. + epochs (int): Total number of training epochs. + batch_size (int): Total batch size across all GPUs. + imgsz (int): Image size for training and validation (in pixels). + rect (bool): Use rectangular training for better aspect ratio preservation. + resume (bool | str): Resume most recent training if True, or resume training from a specific checkpoint if a + string. + nosave (bool): Only save the final checkpoint and not the intermediate ones. + noval (bool): Only validate model performance in the final epoch. + noautoanchor (bool): Disable automatic anchor generation. + noplots (bool): Do not save any plots. + evolve (int): Number of generations for hyperparameters evolution. + bucket (str): Google Cloud Storage bucket name for saving run artifacts. + cache (str | None): Cache images for faster training ('ram' or 'disk'). + image_weights (bool): Use weighted image selection for training. + device (str): Device to use for training, e.g., '0' for first GPU or 'cpu' for CPU. + multi_scale (bool): Use multi-scale training. + single_cls (bool): Train a multi-class dataset as a single-class. + optimizer (str): Optimizer to use ('SGD', 'Adam', or 'AdamW'). + sync_bn (bool): Use synchronized batch normalization (only in DDP mode). + workers (int): Maximum number of dataloader workers (per rank in DDP mode). + project (str): Location of the output directory. + name (str): Unique name for the run. + exist_ok (bool): Allow existing output directory. + quad (bool): Use quad dataloader. + cos_lr (bool): Use cosine learning rate scheduler. + label_smoothing (float): Label smoothing epsilon. + patience (int): EarlyStopping patience (epochs without improvement). + freeze (list[int]): List of layers to freeze, e.g., [0] to freeze only the first layer. + save_period (int): Save checkpoint every 'save_period' epochs (disabled if less than 1). + seed (int): Global training seed for reproducibility. + local_rank (int): For automatic DDP Multi-GPU argument parsing, do not modify. + + Returns: + None + + Examples: + ```python + from ultralytics import run + run(data='coco128.yaml', weights='yolov5m.pt', imgsz=320, epochs=100, batch_size=16) + ``` + + Notes: + - Ensure the dataset YAML file and initial weights are accessible. + - Refer to the [Ultralytics YOLOv5 repository](https://github.com/ultralytics/yolov5) for model and data configurations. + - Use the [Training Tutorial](https://docs.ultralytics.com/yolov5/tutorials/train_custom_data/) for custom dataset training. + """ + opt = parse_opt(True) + for k, v in kwargs.items(): + setattr(opt, k, v) + main(opt) + return opt + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/tutorial.ipynb b/tutorial.ipynb new file mode 100644 index 0000000000..ddc4ee767d --- /dev/null +++ b/tutorial.ipynb @@ -0,0 +1,628 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "YOLOv5 Tutorial", + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "t6MPjfT5NrKQ" + }, + "source": [ + "
\n", + " \n", + " \n", + " \n", + "\n", + " [中文](https://docs.ultralytics.com/zh/) | [한국어](https://docs.ultralytics.com/ko/) | [日本語](https://docs.ultralytics.com/ja/) | [Русский](https://docs.ultralytics.com/ru/) | [Deutsch](https://docs.ultralytics.com/de/) | [Français](https://docs.ultralytics.com/fr/) | [Español](https://docs.ultralytics.com/es/) | [Português](https://docs.ultralytics.com/pt/) | [Türkçe](https://docs.ultralytics.com/tr/) | [Tiếng Việt](https://docs.ultralytics.com/vi/) | [العربية](https://docs.ultralytics.com/ar/)\n", + "\n", + " \"Ultralytics\n", + " \"Run\n", + " \"Open\n", + " \"Open\n", + "\n", + " \"Discord\"\n", + " \"Ultralytics\n", + " \"Ultralytics\n", + "
\n", + "\n", + "This **Ultralytics YOLOv5 Colab Notebook** is the easiest way to get started with [YOLO models](https://www.ultralytics.com/yolo)—no installation needed. Built by [Ultralytics](https://www.ultralytics.com/), the creators of YOLO, this notebook walks you through running **state-of-the-art** models directly in your browser.\n", + "\n", + "Ultralytics models are constantly updated for performance and flexibility. They're **fast**, **accurate**, and **easy to use**, and they excel at [object detection](https://docs.ultralytics.com/tasks/detect/), [tracking](https://docs.ultralytics.com/modes/track/), [instance segmentation](https://docs.ultralytics.com/tasks/segment/), [image classification](https://docs.ultralytics.com/tasks/classify/), and [pose estimation](https://docs.ultralytics.com/tasks/pose/).\n", + "\n", + "Find detailed documentation in the [Ultralytics Docs](https://docs.ultralytics.com/). Get support via [GitHub Issues](https://github.com/ultralytics/ultralytics/issues/new/choose). Join discussions on [Discord](https://discord.com/invite/ultralytics), [Reddit](https://www.reddit.com/r/ultralytics/), and the [Ultralytics Community Forums](https://community.ultralytics.com/)!\n", + "\n", + "Request an Enterprise License for commercial use at [Ultralytics Licensing](https://www.ultralytics.com/license).\n", + "\n", + "
\n", + "
\n", + " \n", + " \"Ultralytics\n", + " \n", + "\n", + "

\n", + " Watch: How to Train\n", + " Ultralytics\n", + " YOLO11 Model on Custom Dataset using Google Colab Notebook 🚀\n", + "

\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7mGmQbAO5pQb" + }, + "source": [ + "# Setup\n", + "\n", + "Clone GitHub [repository](https://github.com/ultralytics/yolov5), install [dependencies](https://github.com/ultralytics/yolov5/blob/master/requirements.txt) and check PyTorch and GPU." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "wbvMlHd_QwMG", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "e8225db4-e61d-4640-8b1f-8bfce3331cea" + }, + "source": [ + "!git clone https://github.com/ultralytics/yolov5 # clone\n", + "%cd yolov5\n", + "%pip install -qr requirements.txt comet_ml # install\n", + "\n", + "import torch\n", + "import utils\n", + "display = utils.notebook_init() # checks" + ], + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "YOLOv5 🚀 v7.0-136-g71244ae Python-3.9.16 torch-2.0.0+cu118 CUDA:0 (Tesla T4, 15102MiB)\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Setup complete ✅ (2 CPUs, 12.7 GB RAM, 23.3/166.8 GB disk)\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4JnkELT0cIJg" + }, + "source": [ + "# 1. Detect\n", + "\n", + "`detect.py` runs YOLOv5 inference on a variety of sources, downloading models automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases), and saving results to `runs/detect`. Example inference sources are:\n", + "\n", + "```shell\n", + "python detect.py --source 0 # webcam\n", + " img.jpg # image \n", + " vid.mp4 # video\n", + " screen # screenshot\n", + " path/ # directory\n", + " 'path/*.jpg' # glob\n", + " 'https://youtu.be/LNwODJXcvt4' # YouTube\n", + " 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream\n", + "```" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "zR9ZbuQCH7FX", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "284ef04b-1596-412f-88f6-948828dd2b49" + }, + "source": [ + "!python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images\n", + "# display.Image(filename='runs/detect/exp/zidane.jpg', width=600)" + ], + "execution_count": 13, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001B[34m\u001B[1mdetect: \u001B[0mweights=['yolov5s.pt'], source=data/images, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1\n", + "YOLOv5 🚀 v7.0-136-g71244ae Python-3.9.16 torch-2.0.0+cu118 CUDA:0 (Tesla T4, 15102MiB)\n", + "\n", + "Downloading https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt to yolov5s.pt...\n", + "100% 14.1M/14.1M [00:00<00:00, 24.5MB/s]\n", + "\n", + "Fusing layers... \n", + "YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n", + "image 1/2 /content/yolov5/data/images/bus.jpg: 640x480 4 persons, 1 bus, 41.5ms\n", + "image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 2 persons, 2 ties, 60.0ms\n", + "Speed: 0.5ms pre-process, 50.8ms inference, 37.7ms NMS per image at shape (1, 3, 640, 640)\n", + "Results saved to \u001B[1mruns/detect/exp\u001B[0m\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hkAzDWJ7cWTr" + }, + "source": [ + "        \n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0eq1SMWl6Sfn" + }, + "source": [ + "# 2. Validate\n", + "Validate a model's accuracy on the [COCO](https://cocodataset.org/#home) dataset's `val` or `test` splits. Models are downloaded automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases). To show results by class use the `--verbose` flag." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "WQPtK1QYVaD_", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "cf7d52f0-281c-4c96-a488-79f5908f8426" + }, + "source": [ + "# Download COCO val\n", + "torch.hub.download_url_to_file('https://github.com/ultralytics/assets/releases/download/v0.0.0/coco2017val.zip', 'tmp.zip') # download (780M - 5000 images)\n", + "!unzip -q tmp.zip -d ../datasets && rm tmp.zip # unzip" + ], + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "100%|██████████| 780M/780M [00:12<00:00, 66.6MB/s]\n" + ] + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "X58w8JLpMnjH", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "3e234e05-ee8b-4ad1-b1a4-f6a55d5e4f3d" + }, + "source": [ + "# Validate YOLOv5s on COCO val\n", + "!python val.py --weights yolov5s.pt --data coco.yaml --img 640 --half" + ], + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001B[34m\u001B[1mval: \u001B[0mdata=/content/yolov5/data/coco.yaml, weights=['yolov5s.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, max_det=300, task=val, device=, workers=8, single_cls=False, augment=False, verbose=False, save_txt=False, save_hybrid=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True, dnn=False\n", + "YOLOv5 🚀 v7.0-136-g71244ae Python-3.9.16 torch-2.0.0+cu118 CUDA:0 (Tesla T4, 15102MiB)\n", + "\n", + "Fusing layers... \n", + "YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients\n", + "\u001B[34m\u001B[1mval: \u001B[0mScanning /content/datasets/coco/val2017... 4952 images, 48 backgrounds, 0 corrupt: 100% 5000/5000 [00:02<00:00, 2024.59it/s]\n", + "\u001B[34m\u001B[1mval: \u001B[0mNew cache created: /content/datasets/coco/val2017.cache\n", + " Class Images Instances P R mAP50 mAP50-95: 100% 157/157 [01:25<00:00, 1.84it/s]\n", + " all 5000 36335 0.671 0.519 0.566 0.371\n", + "Speed: 0.1ms pre-process, 3.1ms inference, 2.3ms NMS per image at shape (32, 3, 640, 640)\n", + "\n", + "Evaluating pycocotools mAP... saving runs/val/exp/yolov5s_predictions.json...\n", + "loading annotations into memory...\n", + "Done (t=0.43s)\n", + "creating index...\n", + "index created!\n", + "Loading and preparing results...\n", + "DONE (t=5.32s)\n", + "creating index...\n", + "index created!\n", + "Running per image evaluation...\n", + "Evaluate annotation type *bbox*\n", + "DONE (t=78.89s).\n", + "Accumulating evaluation results...\n", + "DONE (t=14.51s).\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.374\n", + " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.572\n", + " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.402\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.211\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.423\n", + " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.489\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.311\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.516\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.566\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.378\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.625\n", + " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.722\n", + "Results saved to \u001B[1mruns/val/exp\u001B[0m\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZY2VXXXu74w5" + }, + "source": [ + "# 3. Train\n", + "\n", + "\n", + " \"Ultralytics\n", + "\n", + "

\n", + "\n", + "Train a YOLOv5s model on the [COCO128](https://www.kaggle.com/datasets/ultralytics/coco128) dataset with `--data coco128.yaml`, starting from pretrained `--weights yolov5s.pt`, or from randomly initialized `--weights '' --cfg yolov5s.yaml`.\n", + "\n", + "- **Pretrained [Models](https://github.com/ultralytics/yolov5/tree/master/models)** are downloaded\n", + "automatically from the [latest YOLOv5 release](https://github.com/ultralytics/yolov5/releases)\n", + "- **[Datasets](https://github.com/ultralytics/yolov5/tree/master/data)** available for autodownload include: [COCO](https://github.com/ultralytics/yolov5/blob/master/data/coco.yaml), [COCO128](https://github.com/ultralytics/yolov5/blob/master/data/coco128.yaml), [VOC](https://github.com/ultralytics/yolov5/blob/master/data/VOC.yaml), [Argoverse](https://github.com/ultralytics/yolov5/blob/master/data/Argoverse.yaml), [VisDrone](https://github.com/ultralytics/yolov5/blob/master/data/VisDrone.yaml), [GlobalWheat](https://github.com/ultralytics/yolov5/blob/master/data/GlobalWheat2020.yaml), [xView](https://github.com/ultralytics/yolov5/blob/master/data/xView.yaml), [Objects365](https://github.com/ultralytics/yolov5/blob/master/data/Objects365.yaml), [SKU-110K](https://github.com/ultralytics/yolov5/blob/master/data/SKU-110K.yaml).\n", + "- **Training Results** are saved to `runs/train/` with incrementing run directories, i.e. `runs/train/exp2`, `runs/train/exp3` etc.\n", + "
\n", + "\n", + "A **Mosaic Dataloader** is used for training which combines 4 images into 1 mosaic.\n", + "\n", + "## Label a dataset on Roboflow (optional)\n", + "\n", + "[Roboflow](https://roboflow.com/?ref=ultralytics) enables you to easily **organize, label, and prepare** a high quality dataset with your own custom data. Roboflow also makes it easy to establish an active learning pipeline, collaborate with your team on dataset improvement, and integrate directly into your model building workflow with the `roboflow` pip package." + ] + }, + { + "cell_type": "code", + "source": [ + "#@title Select YOLOv5 🚀 logger {run: 'auto'}\n", + "logger = 'Comet' #@param ['Comet', 'ClearML', 'TensorBoard']\n", + "\n", + "if logger == 'Comet':\n", + " %pip install -q comet_ml\n", + " import comet_ml; comet_ml.init()\n", + "elif logger == 'ClearML':\n", + " %pip install -q clearml\n", + " import clearml; clearml.browser_login()\n", + "elif logger == 'TensorBoard':\n", + " %load_ext tensorboard\n", + " %tensorboard --logdir runs/train" + ], + "metadata": { + "id": "i3oKtE4g-aNn" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "1NcFxRcFdJ_O", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "bbeeea2b-04fc-4185-aa64-258690495b5a" + }, + "source": [ + "# Train YOLOv5s on COCO128 for 3 epochs\n", + "!python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache" + ], + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "2023-04-09 14:11:38.063605: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2023-04-09 14:11:39.026661: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mweights=yolov5s.pt, cfg=, data=coco128.yaml, hyp=data/hyps/hyp.scratch-low.yaml, epochs=3, batch_size=16, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, noplots=False, evolve=None, bucket=, cache=ram, image_weights=False, device=, multi_scale=False, single_cls=False, optimizer=SGD, sync_bn=False, workers=8, project=runs/train, name=exp, exist_ok=False, quad=False, cos_lr=False, label_smoothing=0.0, patience=100, freeze=[0], save_period=-1, seed=0, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest\n", + "\u001B[34m\u001B[1mgithub: \u001B[0mup to date with https://github.com/ultralytics/yolov5 ✅\n", + "YOLOv5 🚀 v7.0-136-g71244ae Python-3.9.16 torch-2.0.0+cu118 CUDA:0 (Tesla T4, 15102MiB)\n", + "\n", + "\u001B[34m\u001B[1mhyperparameters: \u001B[0mlr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0\n", + "\u001B[34m\u001B[1mClearML: \u001B[0mrun 'pip install clearml' to automatically track, visualize and remotely train YOLOv5 🚀 in ClearML\n", + "\u001B[34m\u001B[1mComet: \u001B[0mrun 'pip install comet_ml' to automatically track and visualize YOLOv5 🚀 runs in Comet\n", + "\u001B[34m\u001B[1mTensorBoard: \u001B[0mStart with 'tensorboard --logdir runs/train', view at http://localhost:6006/\n", + "\n", + "Dataset not found ⚠️, missing paths ['/content/datasets/coco128/images/train2017']\n", + "Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.zip to coco128.zip...\n", + "100% 6.66M/6.66M [00:00<00:00, 75.6MB/s]\n", + "Dataset download success ✅ (0.6s), saved to \u001B[1m/content/datasets\u001B[0m\n", + "\n", + " from n params module arguments \n", + " 0 -1 1 3520 models.common.Conv [3, 32, 6, 2, 2] \n", + " 1 -1 1 18560 models.common.Conv [32, 64, 3, 2] \n", + " 2 -1 1 18816 models.common.C3 [64, 64, 1] \n", + " 3 -1 1 73984 models.common.Conv [64, 128, 3, 2] \n", + " 4 -1 2 115712 models.common.C3 [128, 128, 2] \n", + " 5 -1 1 295424 models.common.Conv [128, 256, 3, 2] \n", + " 6 -1 3 625152 models.common.C3 [256, 256, 3] \n", + " 7 -1 1 1180672 models.common.Conv [256, 512, 3, 2] \n", + " 8 -1 1 1182720 models.common.C3 [512, 512, 1] \n", + " 9 -1 1 656896 models.common.SPPF [512, 512, 5] \n", + " 10 -1 1 131584 models.common.Conv [512, 256, 1, 1] \n", + " 11 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] \n", + " 12 [-1, 6] 1 0 models.common.Concat [1] \n", + " 13 -1 1 361984 models.common.C3 [512, 256, 1, False] \n", + " 14 -1 1 33024 models.common.Conv [256, 128, 1, 1] \n", + " 15 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] \n", + " 16 [-1, 4] 1 0 models.common.Concat [1] \n", + " 17 -1 1 90880 models.common.C3 [256, 128, 1, False] \n", + " 18 -1 1 147712 models.common.Conv [128, 128, 3, 2] \n", + " 19 [-1, 14] 1 0 models.common.Concat [1] \n", + " 20 -1 1 296448 models.common.C3 [256, 256, 1, False] \n", + " 21 -1 1 590336 models.common.Conv [256, 256, 3, 2] \n", + " 22 [-1, 10] 1 0 models.common.Concat [1] \n", + " 23 -1 1 1182720 models.common.C3 [512, 512, 1, False] \n", + " 24 [17, 20, 23] 1 229245 models.yolo.Detect [80, [[10, 13, 16, 30, 33, 23], [30, 61, 62, 45, 59, 119], [116, 90, 156, 198, 373, 326]], [128, 256, 512]]\n", + "Model summary: 214 layers, 7235389 parameters, 7235389 gradients, 16.6 GFLOPs\n", + "\n", + "Transferred 349/349 items from yolov5s.pt\n", + "\u001B[34m\u001B[1mAMP: \u001B[0mchecks passed ✅\n", + "\u001B[34m\u001B[1moptimizer:\u001B[0m SGD(lr=0.01) with parameter groups 57 weight(decay=0.0), 60 weight(decay=0.0005), 60 bias\n", + "\u001B[34m\u001B[1malbumentations: \u001B[0mBlur(p=0.01, blur_limit=(3, 7)), MedianBlur(p=0.01, blur_limit=(3, 7)), ToGray(p=0.01), CLAHE(p=0.01, clip_limit=(1, 4.0), tile_grid_size=(8, 8))\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mScanning /content/datasets/coco128/labels/train2017... 126 images, 2 backgrounds, 0 corrupt: 100% 128/128 [00:00<00:00, 1709.36it/s]\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mNew cache created: /content/datasets/coco128/labels/train2017.cache\n", + "\u001B[34m\u001B[1mtrain: \u001B[0mCaching images (0.1GB ram): 100% 128/128 [00:00<00:00, 264.35it/s]\n", + "\u001B[34m\u001B[1mval: \u001B[0mScanning /content/datasets/coco128/labels/train2017.cache... 126 images, 2 backgrounds, 0 corrupt: 100% 128/128 [00:00 # 2. paste API key\n", + "python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. train\n", + "```\n", + "To learn more about all of the supported Comet features for this integration, check out the [Comet Tutorial](https://docs.ultralytics.com/yolov5/tutorials/comet_logging_integration). If you'd like to learn more about Comet, head over to our [documentation](https://www.comet.com/docs/v2/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=yolov5_colab). Get started by trying out the Comet Colab Notebook:\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1RG0WOQyxlDlo5Km8GogJpIEJlg_5lyYO?usp=sharing)\n", + "\n", + "\n", + "\"Comet" + ], + "metadata": { + "id": "nWOsI5wJR1o3" + } + }, + { + "cell_type": "markdown", + "source": [ + "## ClearML Logging and Automation 🌟 NEW\n", + "\n", + "[ClearML](https://cutt.ly/yolov5-notebook-clearml) is completely integrated into YOLOv5 to track your experimentation, manage dataset versions and even remotely execute training runs. To enable ClearML (check cells above):\n", + "\n", + "- `pip install clearml`\n", + "- run `clearml-init` to connect to a ClearML server (**deploy your own [open-source server](https://github.com/allegroai/clearml-server)**, or use our [free hosted server](https://cutt.ly/yolov5-notebook-clearml))\n", + "\n", + "You'll get all the great expected features from an experiment manager: live updates, model upload, experiment comparison etc. but ClearML also tracks uncommitted changes and installed packages for example. Thanks to that ClearML Tasks (which is what we call experiments) are also reproducible on different machines! With only 1 extra line, we can schedule a YOLOv5 training task on a queue to be executed by any number of ClearML Agents (workers).\n", + "\n", + "You can use ClearML Data to version your dataset and then pass it to YOLOv5 simply using its unique ID. This will help you keep track of your data without adding extra hassle. Explore the [ClearML Tutorial](https://docs.ultralytics.com/yolov5/tutorials/clearml_logging_integration) for details!\n", + "\n", + "\n", + "\"ClearML" + ], + "metadata": { + "id": "Lay2WsTjNJzP" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-WPvRbS5Swl6" + }, + "source": [ + "## Local Logging\n", + "\n", + "Training results are automatically logged with [Tensorboard](https://www.tensorflow.org/tensorboard) and [CSV](https://github.com/ultralytics/yolov5/pull/4148) loggers to `runs/train`, with a new experiment directory created for each new training as `runs/train/exp2`, `runs/train/exp3`, etc.\n", + "\n", + "This directory contains train and val statistics, mosaics, labels, predictions and augmentated mosaics, as well as metrics and charts including precision-recall (PR) curves and confusion matrices. \n", + "\n", + "\"Local\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Zelyeqbyt3GD" + }, + "source": [ + "# Environments\n", + "\n", + "YOLOv5 may be run in any of the following up-to-date verified environments (with all dependencies including [CUDA](https://developer.nvidia.com/cuda)/[CUDNN](https://developer.nvidia.com/cudnn), [Python](https://www.python.org/) and [PyTorch](https://pytorch.org/) preinstalled):\n", + "\n", + "- **Notebooks** with free GPU: \"Run \"Open \"Open\n", + "- **Google Cloud** Deep Learning VM. See [GCP Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/google_cloud_quickstart_tutorial/)\n", + "- **Amazon** Deep Learning AMI. See [AWS Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/aws_quickstart_tutorial/)\n", + "- **Docker Image**. See [Docker Quickstart Guide](https://docs.ultralytics.com/yolov5/environments/docker_image_quickstart_tutorial/) \"Docker\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6Qu7Iesl0p54" + }, + "source": [ + "# Status\n", + "\n", + "![YOLOv5 CI](https://github.com/ultralytics/yolov3/actions/workflows/ci-testing.yml/badge.svg)\n", + "\n", + "If this badge is green, all [YOLOv3 GitHub Actions](https://github.com/ultralytics/yolov3/actions) Continuous Integration (CI) tests are currently passing. CI tests verify correct operation of YOLOv5 training ([train.py](https://github.com/ultralytics/yolov5/blob/master/train.py)), testing ([val.py](https://github.com/ultralytics/yolov5/blob/master/val.py)), inference ([detect.py](https://github.com/ultralytics/yolov5/blob/master/detect.py)) and export ([export.py](https://github.com/ultralytics/yolov5/blob/master/export.py)) on macOS, Windows, and Ubuntu every 24 hours and on every commit.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IEijrePND_2I" + }, + "source": [ + "# Appendix\n", + "\n", + "Additional content below." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "GMusP4OAxFu6" + }, + "source": [ + "# YOLOv5 PyTorch HUB Inference (DetectionModels only)\n", + "import torch\n", + "\n", + "model = torch.hub.load('ultralytics/yolov5', 'yolov5s', force_reload=True) # yolov5n - yolov5x6 or custom\n", + "im = 'https://ultralytics.com/images/zidane.jpg' # file, Path, PIL.Image, OpenCV, nparray, list\n", + "results = model(im) # inference\n", + "results.print() # or .show(), .save(), .crop(), .pandas(), etc." + ], + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/utils/__init__.py b/utils/__init__.py index e69de29bb2..1d0b1c6bc3 100644 --- a/utils/__init__.py +++ b/utils/__init__.py @@ -0,0 +1,103 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""utils/initialization.""" + +import contextlib +import platform +import threading + + +def emojis(str=""): + """Returns platform-dependent emoji-safe version of str; ignores emojis on Windows, else returns original str.""" + return str.encode().decode("ascii", "ignore") if platform.system() == "Windows" else str + + +class TryExcept(contextlib.ContextDecorator): + """A context manager and decorator for handling exceptions with optional custom messages.""" + + def __init__(self, msg=""): + """Initializes TryExcept with optional custom message, used as decorator or context manager for exception + handling. + """ + self.msg = msg + + def __enter__(self): + """Begin exception-handling block, optionally customizing exception message when used with TryExcept context + manager. + """ + pass + + def __exit__(self, exc_type, value, traceback): + """Ends exception-handling block, optionally prints custom message with exception, suppressing exceptions within + context. + """ + if value: + print(emojis(f"{self.msg}{': ' if self.msg else ''}{value}")) + return True + + +def threaded(func): + """Decorates a function to run in a separate thread, returning the thread object. + + Usage: @threaded. + """ + + def wrapper(*args, **kwargs): + """Runs the decorated function in a separate thread and returns the thread object. + + Usage: @threaded. + """ + thread = threading.Thread(target=func, args=args, kwargs=kwargs, daemon=True) + thread.start() + return thread + + return wrapper + + +def join_threads(verbose=False): + """Joins all daemon threads, excluding the main thread, with an optional verbose flag for logging.""" + main_thread = threading.current_thread() + for t in threading.enumerate(): + if t is not main_thread: + if verbose: + print(f"Joining thread {t.name}") + t.join() + + +def notebook_init(verbose=True): + """Initializes notebook environment by checking hardware, software requirements, and cleaning up if in Colab.""" + print("Checking setup...") + + import os + import shutil + + from ultralytics.utils.checks import check_requirements + + from utils.general import check_font, is_colab + from utils.torch_utils import select_device # imports + + check_font() + + import psutil + + if check_requirements("wandb", install=False): + os.system("pip uninstall -y wandb") # eliminate unexpected account creation prompt with infinite hang + if is_colab(): + shutil.rmtree("/content/sample_data", ignore_errors=True) # remove colab /sample_data directory + + # System info + display = None + if verbose: + gb = 1 << 30 # bytes to GiB (1024 ** 3) + ram = psutil.virtual_memory().total + total, _used, free = shutil.disk_usage("/") + with contextlib.suppress(Exception): # clear display if ipython is installed + from IPython import display + + display.clear_output() + s = f"({os.cpu_count()} CPUs, {ram / gb:.1f} GB RAM, {(total - free) / gb:.1f}/{total / gb:.1f} GB disk)" + else: + s = "" + + select_device(newline=False) + print(emojis(f"Setup complete ✅ {s}")) + return display diff --git a/utils/activations.py b/utils/activations.py new file mode 100644 index 0000000000..ca785bec79 --- /dev/null +++ b/utils/activations.py @@ -0,0 +1,135 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Activation functions.""" + +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class SiLU(nn.Module): + """Applies the SiLU activation function to the input tensor as described in https://arxiv.org/pdf/1606.08415.pdf.""" + + @staticmethod + def forward(x): + """Applies the SiLU activation function, as detailed in https://arxiv.org/pdf/1606.08415.pdf, on input tensor + `x`. + """ + return x * torch.sigmoid(x) + + +class Hardswish(nn.Module): + """Applies the Hardswish activation function to the input tensor `x`.""" + + @staticmethod + def forward(x): + """Applies Hardswish activation, suitable for TorchScript, CoreML, ONNX, modifying input `x` as per Hard-SiLU + definition. + """ + return x * F.hardtanh(x + 3, 0.0, 6.0) / 6.0 # for TorchScript, CoreML and ONNX + + +class Mish(nn.Module): + """Applies the Mish activation function to improve model performance; see https://github.com/digantamisra98/Mish.""" + + @staticmethod + def forward(x): + """Applies the Mish activation function, enhancing model performance and convergence. + + Reference: https://github.com/digantamisra98/Mish + """ + return x * F.softplus(x).tanh() + + +class MemoryEfficientMish(nn.Module): + """Applies the memory-efficient Mish activation function for improved model performance and reduced memory usage.""" + + class F(torch.autograd.Function): + """Memory-efficient implementation of the Mish activation function for enhanced model performance.""" + + @staticmethod + def forward(ctx, x): + """Applies the Mish activation function in a memory-efficient manner, useful for enhancing model + performance. + """ + ctx.save_for_backward(x) + return x.mul(torch.tanh(F.softplus(x))) # x * tanh(ln(1 + exp(x))) + + @staticmethod + def backward(ctx, grad_output): + """Computes gradient of the Mish activation function for backpropagation, returning the derivative with + respect to the input. + """ + x = ctx.saved_tensors[0] + sx = torch.sigmoid(x) + fx = F.softplus(x).tanh() + return grad_output * (fx + x * sx * (1 - fx * fx)) + + def forward(self, x): + """Applies Mish activation function, useful in neural networks for nonlinear transformation of inputs.""" + return self.F.apply(x) + + +class FReLU(nn.Module): + """Implements the FReLU activation, combining ReLU and convolution from https://arxiv.org/abs/2007.11824.""" + + def __init__(self, c1, k=3): # ch_in, kernel + """Initializes FReLU with specified channel size and kernel, implementing activation from + https://arxiv.org/abs/2007.11824. + """ + super().__init__() + self.conv = nn.Conv2d(c1, c1, k, 1, 1, groups=c1, bias=False) + self.bn = nn.BatchNorm2d(c1) + + def forward(self, x): + """Performs FReLU activation on input, returning the max of input and its 2D convolution.""" + return torch.max(x, self.bn(self.conv(x))) + + +class AconC(nn.Module): + r"""ACON activation (activate or not) AconC: (p1*x-p2*x) * sigmoid(beta*(p1*x-p2*x)) + p2*x, beta is a learnable + parameter according to "Activate or Not: Learning Customized Activation" . + """ + + def __init__(self, c1): + """Initializes ACON activation with learnable parameters p1, p2, and beta as per + https://arxiv.org/pdf/2009.04759.pdf. + """ + super().__init__() + self.p1 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.p2 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.beta = nn.Parameter(torch.ones(1, c1, 1, 1)) + + def forward(self, x): + """Applies a parametric activation function to tensor x; see https://arxiv.org/pdf/2009.04759.pdf for details. + """ + dpx = (self.p1 - self.p2) * x + return dpx * torch.sigmoid(self.beta * dpx) + self.p2 * x + + +class MetaAconC(nn.Module): + r"""ACON activation (activate or not) MetaAconC: (p1*x-p2*x) * sigmoid(beta*(p1*x-p2*x)) + p2*x, beta is generated + by a small network according to "Activate or Not: Learning Customized + Activation" . + """ + + def __init__(self, c1, k=1, s=1, r=16): # ch_in, kernel, stride, r + """Initializes MetaAconC activation with params c1, optional k (kernel=1), s (stride=1), r (16), defining + activation dynamics. + """ + super().__init__() + c2 = max(r, c1 // r) + self.p1 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.p2 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.fc1 = nn.Conv2d(c1, c2, k, s, bias=True) + self.fc2 = nn.Conv2d(c2, c1, k, s, bias=True) + # self.bn1 = nn.BatchNorm2d(c2) + # self.bn2 = nn.BatchNorm2d(c1) + + def forward(self, x): + """Applies a forward pass transforming input `x` using parametric operations and returns the modified tensor.""" + y = x.mean(dim=2, keepdims=True).mean(dim=3, keepdims=True) + # batch-size 1 bug/instabilities https://github.com/ultralytics/yolov5/issues/2891 + # beta = torch.sigmoid(self.bn2(self.fc2(self.bn1(self.fc1(y))))) # bug/unstable + beta = torch.sigmoid(self.fc2(self.fc1(y))) # bug patch BN layers removed + dpx = (self.p1 - self.p2) * x + return dpx * torch.sigmoid(beta * dpx) + self.p2 * x diff --git a/utils/adabound.py b/utils/adabound.py deleted file mode 100644 index 142b12625d..0000000000 --- a/utils/adabound.py +++ /dev/null @@ -1,236 +0,0 @@ -import math - -import torch -from torch.optim import Optimizer - - -class AdaBound(Optimizer): - """Implements AdaBound algorithm. - It has been proposed in `Adaptive Gradient Methods with Dynamic Bound of Learning Rate`_. - Arguments: - params (iterable): iterable of parameters to optimize or dicts defining - parameter groups - lr (float, optional): Adam learning rate (default: 1e-3) - betas (Tuple[float, float], optional): coefficients used for computing - running averages of gradient and its square (default: (0.9, 0.999)) - final_lr (float, optional): final (SGD) learning rate (default: 0.1) - gamma (float, optional): convergence speed of the bound functions (default: 1e-3) - eps (float, optional): term added to the denominator to improve - numerical stability (default: 1e-8) - weight_decay (float, optional): weight decay (L2 penalty) (default: 0) - amsbound (boolean, optional): whether to use the AMSBound variant of this algorithm - .. Adaptive Gradient Methods with Dynamic Bound of Learning Rate: - https://openreview.net/forum?id=Bkg3g2R9FX - """ - - def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), final_lr=0.1, gamma=1e-3, - eps=1e-8, weight_decay=0, amsbound=False): - if not 0.0 <= lr: - raise ValueError("Invalid learning rate: {}".format(lr)) - if not 0.0 <= eps: - raise ValueError("Invalid epsilon value: {}".format(eps)) - if not 0.0 <= betas[0] < 1.0: - raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0])) - if not 0.0 <= betas[1] < 1.0: - raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1])) - if not 0.0 <= final_lr: - raise ValueError("Invalid final learning rate: {}".format(final_lr)) - if not 0.0 <= gamma < 1.0: - raise ValueError("Invalid gamma parameter: {}".format(gamma)) - defaults = dict(lr=lr, betas=betas, final_lr=final_lr, gamma=gamma, eps=eps, - weight_decay=weight_decay, amsbound=amsbound) - super(AdaBound, self).__init__(params, defaults) - - self.base_lrs = list(map(lambda group: group['lr'], self.param_groups)) - - def __setstate__(self, state): - super(AdaBound, self).__setstate__(state) - for group in self.param_groups: - group.setdefault('amsbound', False) - - def step(self, closure=None): - """Performs a single optimization step. - Arguments: - closure (callable, optional): A closure that reevaluates the model - and returns the loss. - """ - loss = None - if closure is not None: - loss = closure() - - for group, base_lr in zip(self.param_groups, self.base_lrs): - for p in group['params']: - if p.grad is None: - continue - grad = p.grad.data - if grad.is_sparse: - raise RuntimeError( - 'Adam does not support sparse gradients, please consider SparseAdam instead') - amsbound = group['amsbound'] - - state = self.state[p] - - # State initialization - if len(state) == 0: - state['step'] = 0 - # Exponential moving average of gradient values - state['exp_avg'] = torch.zeros_like(p.data) - # Exponential moving average of squared gradient values - state['exp_avg_sq'] = torch.zeros_like(p.data) - if amsbound: - # Maintains max of all exp. moving avg. of sq. grad. values - state['max_exp_avg_sq'] = torch.zeros_like(p.data) - - exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq'] - if amsbound: - max_exp_avg_sq = state['max_exp_avg_sq'] - beta1, beta2 = group['betas'] - - state['step'] += 1 - - if group['weight_decay'] != 0: - grad = grad.add(group['weight_decay'], p.data) - - # Decay the first and second moment running average coefficient - exp_avg.mul_(beta1).add_(1 - beta1, grad) - exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad) - if amsbound: - # Maintains the maximum of all 2nd moment running avg. till now - torch.max(max_exp_avg_sq, exp_avg_sq, out=max_exp_avg_sq) - # Use the max. for normalizing running avg. of gradient - denom = max_exp_avg_sq.sqrt().add_(group['eps']) - else: - denom = exp_avg_sq.sqrt().add_(group['eps']) - - bias_correction1 = 1 - beta1 ** state['step'] - bias_correction2 = 1 - beta2 ** state['step'] - step_size = group['lr'] * math.sqrt(bias_correction2) / bias_correction1 - - # Applies bounds on actual learning rate - # lr_scheduler cannot affect final_lr, this is a workaround to apply lr decay - final_lr = group['final_lr'] * group['lr'] / base_lr - lower_bound = final_lr * (1 - 1 / (group['gamma'] * state['step'] + 1)) - upper_bound = final_lr * (1 + 1 / (group['gamma'] * state['step'])) - step_size = torch.full_like(denom, step_size) - step_size.div_(denom).clamp_(lower_bound, upper_bound).mul_(exp_avg) - - p.data.add_(-step_size) - - return loss - - -class AdaBoundW(Optimizer): - """Implements AdaBound algorithm with Decoupled Weight Decay (arxiv.org/abs/1711.05101) - It has been proposed in `Adaptive Gradient Methods with Dynamic Bound of Learning Rate`_. - Arguments: - params (iterable): iterable of parameters to optimize or dicts defining - parameter groups - lr (float, optional): Adam learning rate (default: 1e-3) - betas (Tuple[float, float], optional): coefficients used for computing - running averages of gradient and its square (default: (0.9, 0.999)) - final_lr (float, optional): final (SGD) learning rate (default: 0.1) - gamma (float, optional): convergence speed of the bound functions (default: 1e-3) - eps (float, optional): term added to the denominator to improve - numerical stability (default: 1e-8) - weight_decay (float, optional): weight decay (L2 penalty) (default: 0) - amsbound (boolean, optional): whether to use the AMSBound variant of this algorithm - .. Adaptive Gradient Methods with Dynamic Bound of Learning Rate: - https://openreview.net/forum?id=Bkg3g2R9FX - """ - - def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), final_lr=0.1, gamma=1e-3, - eps=1e-8, weight_decay=0, amsbound=False): - if not 0.0 <= lr: - raise ValueError("Invalid learning rate: {}".format(lr)) - if not 0.0 <= eps: - raise ValueError("Invalid epsilon value: {}".format(eps)) - if not 0.0 <= betas[0] < 1.0: - raise ValueError("Invalid beta parameter at index 0: {}".format(betas[0])) - if not 0.0 <= betas[1] < 1.0: - raise ValueError("Invalid beta parameter at index 1: {}".format(betas[1])) - if not 0.0 <= final_lr: - raise ValueError("Invalid final learning rate: {}".format(final_lr)) - if not 0.0 <= gamma < 1.0: - raise ValueError("Invalid gamma parameter: {}".format(gamma)) - defaults = dict(lr=lr, betas=betas, final_lr=final_lr, gamma=gamma, eps=eps, - weight_decay=weight_decay, amsbound=amsbound) - super(AdaBoundW, self).__init__(params, defaults) - - self.base_lrs = list(map(lambda group: group['lr'], self.param_groups)) - - def __setstate__(self, state): - super(AdaBoundW, self).__setstate__(state) - for group in self.param_groups: - group.setdefault('amsbound', False) - - def step(self, closure=None): - """Performs a single optimization step. - Arguments: - closure (callable, optional): A closure that reevaluates the model - and returns the loss. - """ - loss = None - if closure is not None: - loss = closure() - - for group, base_lr in zip(self.param_groups, self.base_lrs): - for p in group['params']: - if p.grad is None: - continue - grad = p.grad.data - if grad.is_sparse: - raise RuntimeError( - 'Adam does not support sparse gradients, please consider SparseAdam instead') - amsbound = group['amsbound'] - - state = self.state[p] - - # State initialization - if len(state) == 0: - state['step'] = 0 - # Exponential moving average of gradient values - state['exp_avg'] = torch.zeros_like(p.data) - # Exponential moving average of squared gradient values - state['exp_avg_sq'] = torch.zeros_like(p.data) - if amsbound: - # Maintains max of all exp. moving avg. of sq. grad. values - state['max_exp_avg_sq'] = torch.zeros_like(p.data) - - exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq'] - if amsbound: - max_exp_avg_sq = state['max_exp_avg_sq'] - beta1, beta2 = group['betas'] - - state['step'] += 1 - - # Decay the first and second moment running average coefficient - exp_avg.mul_(beta1).add_(1 - beta1, grad) - exp_avg_sq.mul_(beta2).addcmul_(1 - beta2, grad, grad) - if amsbound: - # Maintains the maximum of all 2nd moment running avg. till now - torch.max(max_exp_avg_sq, exp_avg_sq, out=max_exp_avg_sq) - # Use the max. for normalizing running avg. of gradient - denom = max_exp_avg_sq.sqrt().add_(group['eps']) - else: - denom = exp_avg_sq.sqrt().add_(group['eps']) - - bias_correction1 = 1 - beta1 ** state['step'] - bias_correction2 = 1 - beta2 ** state['step'] - step_size = group['lr'] * math.sqrt(bias_correction2) / bias_correction1 - - # Applies bounds on actual learning rate - # lr_scheduler cannot affect final_lr, this is a workaround to apply lr decay - final_lr = group['final_lr'] * group['lr'] / base_lr - lower_bound = final_lr * (1 - 1 / (group['gamma'] * state['step'] + 1)) - upper_bound = final_lr * (1 + 1 / (group['gamma'] * state['step'])) - step_size = torch.full_like(denom, step_size) - step_size.div_(denom).clamp_(lower_bound, upper_bound).mul_(exp_avg) - - if group['weight_decay'] != 0: - decayed_weights = torch.mul(p.data, group['weight_decay']) - p.data.add_(-step_size) - p.data.sub_(decayed_weights) - else: - p.data.add_(-step_size) - - return loss diff --git a/utils/augmentations.py b/utils/augmentations.py new file mode 100644 index 0000000000..3365bebb00 --- /dev/null +++ b/utils/augmentations.py @@ -0,0 +1,415 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Image augmentation functions.""" + +import math +import random + +import cv2 +import numpy as np +import torch +import torchvision.transforms as T +import torchvision.transforms.functional as TF + +from utils.general import LOGGER, check_version, colorstr, resample_segments, segment2box, xywhn2xyxy +from utils.metrics import bbox_ioa + +IMAGENET_MEAN = 0.485, 0.456, 0.406 # RGB mean +IMAGENET_STD = 0.229, 0.224, 0.225 # RGB standard deviation + + +class Albumentations: + """Provides optional image augmentation for YOLOv3 using the Albumentations library if installed.""" + + def __init__(self, size=640): + """Initializes Albumentations class for optional YOLOv3 data augmentation with default size 640.""" + self.transform = None + prefix = colorstr("albumentations: ") + try: + import albumentations as A + + check_version(A.__version__, "1.0.3", hard=True) # version requirement + + T = [ + A.RandomResizedCrop(height=size, width=size, scale=(0.8, 1.0), ratio=(0.9, 1.11), p=0.0), + A.Blur(p=0.01), + A.MedianBlur(p=0.01), + A.ToGray(p=0.01), + A.CLAHE(p=0.01), + A.RandomBrightnessContrast(p=0.0), + A.RandomGamma(p=0.0), + A.ImageCompression(quality_lower=75, p=0.0), + ] # transforms + self.transform = A.Compose(T, bbox_params=A.BboxParams(format="yolo", label_fields=["class_labels"])) + + LOGGER.info(prefix + ", ".join(f"{x}".replace("always_apply=False, ", "") for x in T if x.p)) + except ImportError: # package not installed, skip + pass + except Exception as e: + LOGGER.info(f"{prefix}{e}") + + def __call__(self, im, labels, p=1.0): + """Applies transformations to an image and its bounding boxes with a probability `p`.""" + if self.transform and random.random() < p: + new = self.transform(image=im, bboxes=labels[:, 1:], class_labels=labels[:, 0]) # transformed + im, labels = new["image"], np.array([[c, *b] for c, b in zip(new["class_labels"], new["bboxes"])]) + return im, labels + + +def normalize(x, mean=IMAGENET_MEAN, std=IMAGENET_STD, inplace=False): + """Normalizes RGB images in BCHW format using ImageNet stats; use `inplace=True` for in-place normalization.""" + return TF.normalize(x, mean, std, inplace=inplace) + + +def denormalize(x, mean=IMAGENET_MEAN, std=IMAGENET_STD): + """Converts normalized images back to original form using ImageNet stats; inputs in BCHW format. + + Example: `denormalize(tensor)`. + """ + for i in range(3): + x[:, i] = x[:, i] * std[i] + mean[i] + return x + + +def augment_hsv(im, hgain=0.5, sgain=0.5, vgain=0.5): + """Applies HSV color-space augmentation with optional gains; expects BGR image input. + + Example: `augment_hsv(image)`. + """ + if hgain or sgain or vgain: + r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains + hue, sat, val = cv2.split(cv2.cvtColor(im, cv2.COLOR_BGR2HSV)) + dtype = im.dtype # uint8 + + x = np.arange(0, 256, dtype=r.dtype) + lut_hue = ((x * r[0]) % 180).astype(dtype) + lut_sat = np.clip(x * r[1], 0, 255).astype(dtype) + lut_val = np.clip(x * r[2], 0, 255).astype(dtype) + + im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))) + cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=im) # no return needed + + +def hist_equalize(im, clahe=True, bgr=False): + """Equalizes histogram of BGR/RGB image `im` with shape (n,m,3), optionally using CLAHE; returns equalized image.""" + yuv = cv2.cvtColor(im, cv2.COLOR_BGR2YUV if bgr else cv2.COLOR_RGB2YUV) + if clahe: + c = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) + yuv[:, :, 0] = c.apply(yuv[:, :, 0]) + else: + yuv[:, :, 0] = cv2.equalizeHist(yuv[:, :, 0]) # equalize Y channel histogram + return cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR if bgr else cv2.COLOR_YUV2RGB) # convert YUV image to RGB + + +def replicate(im, labels): + """Duplicates half of the smallest bounding boxes in an image to augment dataset; update labels accordingly.""" + h, w = im.shape[:2] + boxes = labels[:, 1:].astype(int) + x1, y1, x2, y2 = boxes.T + s = ((x2 - x1) + (y2 - y1)) / 2 # side length (pixels) + for i in s.argsort()[: round(s.size * 0.5)]: # smallest indices + x1b, y1b, x2b, y2b = boxes[i] + bh, bw = y2b - y1b, x2b - x1b + yc, xc = int(random.uniform(0, h - bh)), int(random.uniform(0, w - bw)) # offset x, y + x1a, y1a, x2a, y2a = [xc, yc, xc + bw, yc + bh] + im[y1a:y2a, x1a:x2a] = im[y1b:y2b, x1b:x2b] # im4[ymin:ymax, xmin:xmax] + labels = np.append(labels, [[labels[i, 0], x1a, y1a, x2a, y2a]], axis=0) + + return im, labels + + +def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32): + """Resizes and pads an image to a new shape with optional scaling, filling, and stride-multiple constraints.""" + shape = im.shape[:2] # current shape [height, width] + if isinstance(new_shape, int): + new_shape = (new_shape, new_shape) + + # Scale ratio (new / old) + r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) + if not scaleup: # only scale down, do not scale up (for better val mAP) + r = min(r, 1.0) + + # Compute padding + ratio = r, r # width, height ratios + new_unpad = round(shape[1] * r), round(shape[0] * r) + dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding + if auto: # minimum rectangle + dw, dh = np.mod(dw, stride), np.mod(dh, stride) # wh padding + elif scaleFill: # stretch + dw, dh = 0.0, 0.0 + new_unpad = (new_shape[1], new_shape[0]) + ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios + + dw /= 2 # divide padding into 2 sides + dh /= 2 + + if shape[::-1] != new_unpad: # resize + im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR) + top, bottom = round(dh - 0.1), round(dh + 0.1) + left, right = round(dw - 0.1), round(dw + 0.1) + im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # add border + return im, ratio, (dw, dh) + + +def random_perspective( + im, targets=(), segments=(), degrees=10, translate=0.1, scale=0.1, shear=10, perspective=0.0, border=(0, 0) +): + # torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(0.1, 0.1), scale=(0.9, 1.1), shear=(-10, 10)) + # targets = [cls, xyxy] + """Applies a random perspective transformation to an image and its bounding boxes for data augmentation.""" + height = im.shape[0] + border[0] * 2 # shape(h,w,c) + width = im.shape[1] + border[1] * 2 + + # Center + C = np.eye(3) + C[0, 2] = -im.shape[1] / 2 # x translation (pixels) + C[1, 2] = -im.shape[0] / 2 # y translation (pixels) + + # Perspective + P = np.eye(3) + P[2, 0] = random.uniform(-perspective, perspective) # x perspective (about y) + P[2, 1] = random.uniform(-perspective, perspective) # y perspective (about x) + + # Rotation and Scale + R = np.eye(3) + a = random.uniform(-degrees, degrees) + # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations + s = random.uniform(1 - scale, 1 + scale) + # s = 2 ** random.uniform(-scale, scale) + R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s) + + # Shear + S = np.eye(3) + S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # x shear (deg) + S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # y shear (deg) + + # Translation + T = np.eye(3) + T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * width # x translation (pixels) + T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * height # y translation (pixels) + + # Combined rotation matrix + M = T @ S @ R @ P @ C # order of operations (right to left) is IMPORTANT + if (border[0] != 0) or (border[1] != 0) or (M != np.eye(3)).any(): # image changed + if perspective: + im = cv2.warpPerspective(im, M, dsize=(width, height), borderValue=(114, 114, 114)) + else: # affine + im = cv2.warpAffine(im, M[:2], dsize=(width, height), borderValue=(114, 114, 114)) + + if n := len(targets): + use_segments = any(x.any() for x in segments) and len(segments) == n + new = np.zeros((n, 4)) + if use_segments: # warp segments + segments = resample_segments(segments) # upsample + for i, segment in enumerate(segments): + xy = np.ones((len(segment), 3)) + xy[:, :2] = segment + xy = xy @ M.T # transform + xy = xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2] # perspective rescale or affine + + # clip + new[i] = segment2box(xy, width, height) + + else: # warp boxes + xy = np.ones((n * 4, 3)) + xy[:, :2] = targets[:, [1, 2, 3, 4, 1, 4, 3, 2]].reshape(n * 4, 2) # x1y1, x2y2, x1y2, x2y1 + xy = xy @ M.T # transform + xy = (xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2]).reshape(n, 8) # perspective rescale or affine + + # create new boxes + x = xy[:, [0, 2, 4, 6]] + y = xy[:, [1, 3, 5, 7]] + new = np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T + + # clip + new[:, [0, 2]] = new[:, [0, 2]].clip(0, width) + new[:, [1, 3]] = new[:, [1, 3]].clip(0, height) + + # filter candidates + i = box_candidates(box1=targets[:, 1:5].T * s, box2=new.T, area_thr=0.01 if use_segments else 0.10) + targets = targets[i] + targets[:, 1:5] = new[i] + + return im, targets + + +def copy_paste(im, labels, segments, p=0.5): + """Applies Copy-Paste augmentation (https://arxiv.org/abs/2012.07177) on image, labels (nx5 np.array(cls, xyxy)), + and segments. + """ + n = len(segments) + if p and n: + _h, w, _c = im.shape # height, width, channels + im_new = np.zeros(im.shape, np.uint8) + for j in random.sample(range(n), k=round(p * n)): + l, s = labels[j], segments[j] + box = w - l[3], l[2], w - l[1], l[4] + ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area + if (ioa < 0.30).all(): # allow 30% obscuration of existing labels + labels = np.concatenate((labels, [[l[0], *box]]), 0) + segments.append(np.concatenate((w - s[:, 0:1], s[:, 1:2]), 1)) + cv2.drawContours(im_new, [segments[j].astype(np.int32)], -1, (1, 1, 1), cv2.FILLED) + + result = cv2.flip(im, 1) # augment segments (flip left-right) + i = cv2.flip(im_new, 1).astype(bool) + im[i] = result[i] # cv2.imwrite('debug.jpg', im) # debug + + return im, labels, segments + + +def cutout(im, labels, p=0.5): + """Applies cutout augmentation, potentially removing >60% obscured labels; see https://arxiv.org/abs/1708.04552.""" + if random.random() < p: + h, w = im.shape[:2] + scales = [0.5] * 1 + [0.25] * 2 + [0.125] * 4 + [0.0625] * 8 + [0.03125] * 16 # image size fraction + for s in scales: + mask_h = random.randint(1, int(h * s)) # create random masks + mask_w = random.randint(1, int(w * s)) + + # box + xmin = max(0, random.randint(0, w) - mask_w // 2) + ymin = max(0, random.randint(0, h) - mask_h // 2) + xmax = min(w, xmin + mask_w) + ymax = min(h, ymin + mask_h) + + # apply random color mask + im[ymin:ymax, xmin:xmax] = [random.randint(64, 191) for _ in range(3)] + + # return unobscured labels + if len(labels) and s > 0.03: + box = np.array([xmin, ymin, xmax, ymax], dtype=np.float32) + ioa = bbox_ioa(box, xywhn2xyxy(labels[:, 1:5], w, h)) # intersection over area + labels = labels[ioa < 0.60] # remove >60% obscured labels + + return labels + + +def mixup(im, labels, im2, labels2): + """Applies MixUp augmentation by blending images and labels; see https://arxiv.org/pdf/1710.09412.pdf for details. + """ + r = np.random.beta(32.0, 32.0) # mixup ratio, alpha=beta=32.0 + im = (im * r + im2 * (1 - r)).astype(np.uint8) + labels = np.concatenate((labels, labels2), 0) + return im, labels + + +def box_candidates(box1, box2, wh_thr=2, ar_thr=100, area_thr=0.1, eps=1e-16): # box1(4,n), box2(4,n) + """Evaluates candidate boxes based on width, height, aspect ratio, and area thresholds.""" + w1, h1 = box1[2] - box1[0], box1[3] - box1[1] + w2, h2 = box2[2] - box2[0], box2[3] - box2[1] + ar = np.maximum(w2 / (h2 + eps), h2 / (w2 + eps)) # aspect ratio + return (w2 > wh_thr) & (h2 > wh_thr) & (w2 * h2 / (w1 * h1 + eps) > area_thr) & (ar < ar_thr) # candidates + + +def classify_albumentations( + augment=True, + size=224, + scale=(0.08, 1.0), + ratio=(0.75, 1.0 / 0.75), # 0.75, 1.33 + hflip=0.5, + vflip=0.0, + jitter=0.4, + mean=IMAGENET_MEAN, + std=IMAGENET_STD, + auto_aug=False, +): + # YOLOv3 classification Albumentations (optional, only used if package is installed) + """Generates an Albumentations transform pipeline for image classification with optional augmentations.""" + prefix = colorstr("albumentations: ") + try: + import albumentations as A + from albumentations.pytorch import ToTensorV2 + + check_version(A.__version__, "1.0.3", hard=True) # version requirement + if augment: # Resize and crop + T = [A.RandomResizedCrop(height=size, width=size, scale=scale, ratio=ratio)] + if auto_aug: + # TODO: implement AugMix, AutoAug & RandAug in albumentation + LOGGER.info(f"{prefix}auto augmentations are currently not supported") + else: + if hflip > 0: + T += [A.HorizontalFlip(p=hflip)] + if vflip > 0: + T += [A.VerticalFlip(p=vflip)] + if jitter > 0: + color_jitter = (float(jitter),) * 3 # repeat value for brightness, contrast, satuaration, 0 hue + T += [A.ColorJitter(*color_jitter, 0)] + else: # Use fixed crop for eval set (reproducibility) + T = [A.SmallestMaxSize(max_size=size), A.CenterCrop(height=size, width=size)] + T += [A.Normalize(mean=mean, std=std), ToTensorV2()] # Normalize and convert to Tensor + LOGGER.info(prefix + ", ".join(f"{x}".replace("always_apply=False, ", "") for x in T if x.p)) + return A.Compose(T) + + except ImportError: # package not installed, skip + LOGGER.warning(f"{prefix}⚠️ not found, install with `pip install albumentations` (recommended)") + except Exception as e: + LOGGER.info(f"{prefix}{e}") + + +def classify_transforms(size=224): + """Applies classification transforms including center cropping, tensor conversion, and normalization.""" + assert isinstance(size, int), f"ERROR: classify_transforms size {size} must be integer, not (list, tuple)" + # T.Compose([T.ToTensor(), T.Resize(size), T.CenterCrop(size), T.Normalize(IMAGENET_MEAN, IMAGENET_STD)]) + return T.Compose([CenterCrop(size), ToTensor(), T.Normalize(IMAGENET_MEAN, IMAGENET_STD)]) + + +class LetterBox: + """Resizes and pads images to a specified size while maintaining aspect ratio.""" + + def __init__(self, size=(640, 640), auto=False, stride=32): + """Initializes LetterBox for YOLOv3 image preprocessing with optional auto-sizing and stride; `size` can be int + or tuple. + """ + super().__init__() + self.h, self.w = (size, size) if isinstance(size, int) else size + self.auto = auto # pass max size integer, automatically solve for short side using stride + self.stride = stride # used with auto + + def __call__(self, im): # im = np.array HWC + """Resizes and pads image `im` (np.array HWC) to specified `size` and `stride`, possibly autosizing for the + short side. + """ + imh, imw = im.shape[:2] + r = min(self.h / imh, self.w / imw) # ratio of new/old + h, w = round(imh * r), round(imw * r) # resized image + hs, ws = (math.ceil(x / self.stride) * self.stride for x in (h, w)) if self.auto else self.h, self.w + top, left = round((hs - h) / 2 - 0.1), round((ws - w) / 2 - 0.1) + im_out = np.full((self.h, self.w, 3), 114, dtype=im.dtype) + im_out[top : top + h, left : left + w] = cv2.resize(im, (w, h), interpolation=cv2.INTER_LINEAR) + return im_out + + +class CenterCrop: + """Crops the center of an image to a specified size, maintaining aspect ratio.""" + + def __init__(self, size=640): + """Initializes a CenterCrop object for YOLOv3, to crop images to a specified size, with default 640x640.""" + super().__init__() + self.h, self.w = (size, size) if isinstance(size, int) else size + + def __call__(self, im): # im = np.array HWC + """Crops and resizes an image to specified dimensions, defaulting to 640x640, maintaining aspect ratio.""" + imh, imw = im.shape[:2] + m = min(imh, imw) # min dimension + top, left = (imh - m) // 2, (imw - m) // 2 + return cv2.resize(im[top : top + m, left : left + m], (self.w, self.h), interpolation=cv2.INTER_LINEAR) + + +class ToTensor: + """Converts a BGR image in numpy format to a PyTorch tensor in RGB format, with optional half precision.""" + + def __init__(self, half=False): + """Initializes ToTensor class for YOLOv3 image preprocessing to convert images to PyTorch tensors, optionally in + half precision. + """ + super().__init__() + self.half = half + + def __call__(self, im): # im = np.array HWC in BGR order + """Converts a BGR image in numpy format to a PyTorch tensor in RGB format, with options for half precision and + normalization. + """ + im = np.ascontiguousarray(im.transpose((2, 0, 1))[::-1]) # HWC to CHW -> BGR to RGB -> contiguous + im = torch.from_numpy(im) # to torch + im = im.half() if self.half else im.float() # uint8 to fp16/32 + im /= 255.0 # 0-255 to 0.0-1.0 + return im diff --git a/utils/autoanchor.py b/utils/autoanchor.py new file mode 100644 index 0000000000..e6dd98e543 --- /dev/null +++ b/utils/autoanchor.py @@ -0,0 +1,175 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""AutoAnchor utils.""" + +import random + +import numpy as np +import torch +import yaml +from tqdm import tqdm + +from utils import TryExcept +from utils.general import LOGGER, TQDM_BAR_FORMAT, colorstr + +PREFIX = colorstr("AutoAnchor: ") + + +def check_anchor_order(m): + """Checks and corrects anchor order in YOLOv3's Detect() module if mismatched with stride order.""" + a = m.anchors.prod(-1).mean(-1).view(-1) # mean anchor area per output layer + da = a[-1] - a[0] # delta a + ds = m.stride[-1] - m.stride[0] # delta s + if da and (da.sign() != ds.sign()): # same order + LOGGER.info(f"{PREFIX}Reversing anchor order") + m.anchors[:] = m.anchors.flip(0) + + +@TryExcept(f"{PREFIX}ERROR") +def check_anchors(dataset, model, thr=4.0, imgsz=640): + """Evaluates anchor fit to dataset and recomputes if below a threshold, enhancing model performance.""" + m = model.module.model[-1] if hasattr(model, "module") else model.model[-1] # Detect() + shapes = imgsz * dataset.shapes / dataset.shapes.max(1, keepdims=True) + scale = np.random.uniform(0.9, 1.1, size=(shapes.shape[0], 1)) # augment scale + wh = torch.tensor(np.concatenate([l[:, 3:5] * s for s, l in zip(shapes * scale, dataset.labels)])).float() # wh + + def metric(k): # compute metric + """Computes and returns best possible recall (bpr) and anchors above threshold (aat) metrics for given anchors. + """ + r = wh[:, None] / k[None] + x = torch.min(r, 1 / r).min(2)[0] # ratio metric + best = x.max(1)[0] # best_x + aat = (x > 1 / thr).float().sum(1).mean() # anchors above threshold + bpr = (best > 1 / thr).float().mean() # best possible recall + return bpr, aat + + stride = m.stride.to(m.anchors.device).view(-1, 1, 1) # model strides + anchors = m.anchors.clone() * stride # current anchors + bpr, aat = metric(anchors.cpu().view(-1, 2)) + s = f"\n{PREFIX}{aat:.2f} anchors/target, {bpr:.3f} Best Possible Recall (BPR). " + if bpr > 0.98: # threshold to recompute + LOGGER.info(f"{s}Current anchors are a good fit to dataset ✅") + else: + LOGGER.info(f"{s}Anchors are a poor fit to dataset ⚠️, attempting to improve...") + na = m.anchors.numel() // 2 # number of anchors + anchors = kmean_anchors(dataset, n=na, img_size=imgsz, thr=thr, gen=1000, verbose=False) + new_bpr = metric(anchors)[0] + if new_bpr > bpr: # replace anchors + anchors = torch.tensor(anchors, device=m.anchors.device).type_as(m.anchors) + m.anchors[:] = anchors.clone().view_as(m.anchors) + check_anchor_order(m) # must be in pixel-space (not grid-space) + m.anchors /= stride + s = f"{PREFIX}Done ✅ (optional: update model *.yaml to use these anchors in the future)" + else: + s = f"{PREFIX}Done ⚠️ (original anchors better than new anchors, proceeding with original anchors)" + LOGGER.info(s) + + +def kmean_anchors(dataset="./data/coco128.yaml", n=9, img_size=640, thr=4.0, gen=1000, verbose=True): + """Creates kmeans-evolved anchors from training dataset. + + Args: + dataset: path to data.yaml, or a loaded dataset + n: number of anchors + img_size: image size used for training + thr: anchor-label wh ratio threshold hyperparameter hyp['anchor_t'] used for training, default=4.0 + gen: generations to evolve anchors using genetic algorithm + verbose: print all results + + Returns: + k: kmeans evolved anchors + + Examples: + from utils.autoanchor import *; _ = kmean_anchors() + """ + from scipy.cluster.vq import kmeans + + npr = np.random + thr = 1 / thr + + def metric(k, wh): # compute metrics + """Computes best possible recall (BPR) and anchors above threshold (AAT) metrics for given anchor boxes.""" + r = wh[:, None] / k[None] + x = torch.min(r, 1 / r).min(2)[0] # ratio metric + # x = wh_iou(wh, torch.tensor(k)) # iou metric + return x, x.max(1)[0] # x, best_x + + def anchor_fitness(k): # mutation fitness + """Evaluates the fitness of anchor boxes by computing mean recall weighted by an activation threshold.""" + _, best = metric(torch.tensor(k, dtype=torch.float32), wh) + return (best * (best > thr).float()).mean() # fitness + + def print_results(k, verbose=True): + """Displays sorted anchors and their metrics including best possible recall and anchors above threshold.""" + k = k[np.argsort(k.prod(1))] # sort small to large + x, best = metric(k, wh0) + bpr, aat = (best > thr).float().mean(), (x > thr).float().mean() * n # best possible recall, anch > thr + s = ( + f"{PREFIX}thr={thr:.2f}: {bpr:.4f} best possible recall, {aat:.2f} anchors past thr\n" + f"{PREFIX}n={n}, img_size={img_size}, metric_all={x.mean():.3f}/{best.mean():.3f}-mean/best, " + f"past_thr={x[x > thr].mean():.3f}-mean: " + ) + for x in k: + s += "%i,%i, " % (round(x[0]), round(x[1])) + if verbose: + LOGGER.info(s[:-2]) + return k + + if isinstance(dataset, str): # *.yaml file + with open(dataset, errors="ignore") as f: + data_dict = yaml.safe_load(f) # model dict + from utils.dataloaders import LoadImagesAndLabels + + dataset = LoadImagesAndLabels(data_dict["train"], augment=True, rect=True) + + # Get label wh + shapes = img_size * dataset.shapes / dataset.shapes.max(1, keepdims=True) + wh0 = np.concatenate([l[:, 3:5] * s for s, l in zip(shapes, dataset.labels)]) # wh + + # Filter + i = (wh0 < 3.0).any(1).sum() + if i: + LOGGER.info(f"{PREFIX}WARNING ⚠️ Extremely small objects found: {i} of {len(wh0)} labels are <3 pixels in size") + wh = wh0[(wh0 >= 2.0).any(1)].astype(np.float32) # filter > 2 pixels + # wh = wh * (npr.rand(wh.shape[0], 1) * 0.9 + 0.1) # multiply by random scale 0-1 + + # Kmeans init + try: + LOGGER.info(f"{PREFIX}Running kmeans for {n} anchors on {len(wh)} points...") + assert n <= len(wh) # apply overdetermined constraint + s = wh.std(0) # sigmas for whitening + k = kmeans(wh / s, n, iter=30)[0] * s # points + assert n == len(k) # kmeans may return fewer points than requested if wh is insufficient or too similar + except Exception: + LOGGER.warning(f"{PREFIX}WARNING ⚠️ switching strategies from kmeans to random init") + k = np.sort(npr.rand(n * 2)).reshape(n, 2) * img_size # random init + wh, wh0 = (torch.tensor(x, dtype=torch.float32) for x in (wh, wh0)) + k = print_results(k, verbose=False) + + # Plot + # k, d = [None] * 20, [None] * 20 + # for i in tqdm(range(1, 21)): + # k[i-1], d[i-1] = kmeans(wh / s, i) # points, mean distance + # fig, ax = plt.subplots(1, 2, figsize=(14, 7), tight_layout=True) + # ax = ax.ravel() + # ax[0].plot(np.arange(1, 21), np.array(d) ** 2, marker='.') + # fig, ax = plt.subplots(1, 2, figsize=(14, 7)) # plot wh + # ax[0].hist(wh[wh[:, 0]<100, 0],400) + # ax[1].hist(wh[wh[:, 1]<100, 1],400) + # fig.savefig('wh.png', dpi=200) + + # Evolve + f, sh, mp, s = anchor_fitness(k), k.shape, 0.9, 0.1 # fitness, generations, mutation prob, sigma + pbar = tqdm(range(gen), bar_format=TQDM_BAR_FORMAT) # progress bar + for _ in pbar: + v = np.ones(sh) + while (v == 1).all(): # mutate until a change occurs (prevent duplicates) + v = ((npr.random(sh) < mp) * random.random() * npr.randn(*sh) * s + 1).clip(0.3, 3.0) + kg = (k.copy() * v).clip(min=2.0) + fg = anchor_fitness(kg) + if fg > f: + f, k = fg, kg.copy() + pbar.desc = f"{PREFIX}Evolving anchors with Genetic Algorithm: fitness = {f:.4f}" + if verbose: + print_results(k, verbose) + + return print_results(k).astype(np.float32) diff --git a/utils/autobatch.py b/utils/autobatch.py new file mode 100644 index 0000000000..915ba35575 --- /dev/null +++ b/utils/autobatch.py @@ -0,0 +1,72 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Auto-batch utils.""" + +from copy import deepcopy + +import numpy as np +import torch + +from utils.general import LOGGER, colorstr +from utils.torch_utils import profile + + +def check_train_batch_size(model, imgsz=640, amp=True): + """Checks and computes the optimal training batch size for YOLOv3, given model and image size.""" + with torch.cuda.amp.autocast(amp): + return autobatch(deepcopy(model).train(), imgsz) # compute optimal batch size + + +def autobatch(model, imgsz=640, fraction=0.8, batch_size=16): + """Estimates optimal YOLOv3 batch size using available CUDA memory; imgsz:int=640, fraction:float=0.8, + batch_size:int=16. + """ + # Usage: + # import torch + # from utils.autobatch import autobatch + # model = torch.hub.load('ultralytics/yolov5', 'yolov5s', autoshape=False) + # print(autobatch(model)) + + # Check device + prefix = colorstr("AutoBatch: ") + LOGGER.info(f"{prefix}Computing optimal batch size for --imgsz {imgsz}") + device = next(model.parameters()).device # get model device + if device.type == "cpu": + LOGGER.info(f"{prefix}CUDA not detected, using default CPU batch-size {batch_size}") + return batch_size + if torch.backends.cudnn.benchmark: + LOGGER.info(f"{prefix} ⚠️ Requires torch.backends.cudnn.benchmark=False, using default batch-size {batch_size}") + return batch_size + + # Inspect CUDA memory + gb = 1 << 30 # bytes to GiB (1024 ** 3) + d = str(device).upper() # 'CUDA:0' + properties = torch.cuda.get_device_properties(device) # device properties + t = properties.total_memory / gb # GiB total + r = torch.cuda.memory_reserved(device) / gb # GiB reserved + a = torch.cuda.memory_allocated(device) / gb # GiB allocated + f = t - (r + a) # GiB free + LOGGER.info(f"{prefix}{d} ({properties.name}) {t:.2f}G total, {r:.2f}G reserved, {a:.2f}G allocated, {f:.2f}G free") + + # Profile batch sizes + batch_sizes = [1, 2, 4, 8, 16] + try: + img = [torch.empty(b, 3, imgsz, imgsz) for b in batch_sizes] + results = profile(img, model, n=3, device=device) + except Exception as e: + LOGGER.warning(f"{prefix}{e}") + + # Fit a solution + y = [x[2] for x in results if x] # memory [2] + p = np.polyfit(batch_sizes[: len(y)], y, deg=1) # first degree polynomial fit + b = int((f * fraction - p[1]) / p[0]) # y intercept (optimal batch size) + if None in results: # some sizes failed + i = results.index(None) # first fail index + if b >= batch_sizes[i]: # y intercept above failure point + b = batch_sizes[max(i - 1, 0)] # select prior safe point + if b < 1 or b > 1024: # b outside of safe range + b = batch_size + LOGGER.warning(f"{prefix}WARNING ⚠️ CUDA anomaly detected, recommend restart environment and retry command.") + + fraction = (np.polyval(p, b) + r + a) / t # actual fraction predicted + LOGGER.info(f"{prefix}Using batch-size {b} for {d} {t * fraction:.2f}G/{t:.2f}G ({fraction * 100:.0f}%) ✅") + return b diff --git a/utils/aws/__init__.py b/utils/aws/__init__.py new file mode 100644 index 0000000000..77a19dcf0f --- /dev/null +++ b/utils/aws/__init__.py @@ -0,0 +1 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license diff --git a/utils/aws/mime.sh b/utils/aws/mime.sh new file mode 100644 index 0000000000..721ad44cad --- /dev/null +++ b/utils/aws/mime.sh @@ -0,0 +1,33 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# AWS EC2 instance startup 'MIME' script https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/ +# This script will run on every instance restart, not only on first start +# --- DO NOT COPY ABOVE COMMENTS WHEN PASTING INTO USERDATA --- + +Content-Type: multipart/mixed +boundary="//" +MIME-Version: 1.0 + +--// +Content-Type: text/cloud-config +charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment +filename="cloud-config.txt" + +#cloud-config +cloud_final_modules: +- [scripts-user, always] + +--// +Content-Type: text/x-shellscript +charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment +filename="userdata.txt" + +#!/bin/bash +# --- paste contents of userdata.sh here --- +--// diff --git a/utils/aws/resume.py b/utils/aws/resume.py new file mode 100644 index 0000000000..805dadf4d5 --- /dev/null +++ b/utils/aws/resume.py @@ -0,0 +1,43 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Resume all interrupted trainings in yolov5/ dir including DDP trainings +# Usage: $ python utils/aws/resume.py + +import os +import sys +from pathlib import Path + +import torch +import yaml +from ultralytics.utils.patches import torch_load + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[2] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH + +port = 0 # --master_port +path = Path("").resolve() +for last in path.rglob("*/**/last.pt"): + ckpt = torch_load(last) + if ckpt["optimizer"] is None: + continue + + # Load opt.yaml + with open(last.parent.parent / "opt.yaml", errors="ignore") as f: + opt = yaml.safe_load(f) + + # Get device count + d = opt["device"].split(",") # devices + nd = len(d) # number of devices + ddp = nd > 1 or (nd == 0 and torch.cuda.device_count() > 1) # distributed data parallel + + if ddp: # multi-GPU + port += 1 + cmd = f"python -m torch.distributed.run --nproc_per_node {nd} --master_port {port} train.py --resume {last}" + else: # single-GPU + cmd = f"python train.py --resume {last}" + + cmd += " > /dev/null 2>&1 &" # redirect output to dev/null and run in daemon thread + print(cmd) + os.system(cmd) diff --git a/utils/aws/userdata.sh b/utils/aws/userdata.sh new file mode 100644 index 0000000000..93ed3b612b --- /dev/null +++ b/utils/aws/userdata.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# AWS EC2 instance startup script https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html +# This script will run only once on first instance start (for a re-start script see mime.sh) +# /home/ubuntu (ubuntu) or /home/ec2-user (amazon-linux) is working dir +# Use >300 GB SSD + +cd home/ubuntu +if [ ! -d yolov5 ]; then + echo "Running first-time script." # install dependencies, download COCO, pull Docker + git clone https://github.com/ultralytics/yolov5 -b master && sudo chmod -R 777 yolov5 + cd yolov5 + bash data/scripts/get_coco.sh && echo "COCO done." & + sudo docker pull ultralytics/yolov5:latest && echo "Docker done." & + python -m pip install --upgrade pip && pip install -r requirements.txt && python detect.py && echo "Requirements done." & + wait && echo "All tasks done." # finish background tasks +else + echo "Running re-start script." # resume interrupted runs + i=0 + list=$(sudo docker ps -qa) # container list i.e. $'one\ntwo\nthree\nfour' + while IFS= read -r id; do + ((i++)) + echo "restarting container $i: $id" + sudo docker start $id + # sudo docker exec -it $id python train.py --resume # single-GPU + sudo docker exec -d $id python utils/aws/resume.py # multi-scenario + done <<< "$list" +fi diff --git a/utils/callbacks.py b/utils/callbacks.py new file mode 100644 index 0000000000..80cfe740de --- /dev/null +++ b/utils/callbacks.py @@ -0,0 +1,69 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Callback utils.""" + +import threading + + +class Callbacks: + """Handles all registered callbacks for YOLOv3 Hooks.""" + + def __init__(self): + """Initializes a Callbacks object to manage YOLOv3 training hooks with various event triggers.""" + self._callbacks = { + "on_pretrain_routine_start": [], + "on_pretrain_routine_end": [], + "on_train_start": [], + "on_train_epoch_start": [], + "on_train_batch_start": [], + "optimizer_step": [], + "on_before_zero_grad": [], + "on_train_batch_end": [], + "on_train_epoch_end": [], + "on_val_start": [], + "on_val_batch_start": [], + "on_val_image_end": [], + "on_val_batch_end": [], + "on_val_end": [], + "on_fit_epoch_end": [], # fit = train + val + "on_model_save": [], + "on_train_end": [], + "on_params_update": [], + "teardown": [], + } + self.stop_training = False # set True to interrupt training + + def register_action(self, hook, name="", callback=None): + """Register a new action to a callback hook. + + Args: + hook: The callback hook name to register the action to + name: The name of the action for later reference + callback: The callback to fire + """ + assert hook in self._callbacks, f"hook '{hook}' not found in callbacks {self._callbacks}" + assert callable(callback), f"callback '{callback}' is not callable" + self._callbacks[hook].append({"name": name, "callback": callback}) + + def get_registered_actions(self, hook=None): + """" Returns all the registered actions by callback hook. + + Args: + hook: The name of the hook to check, defaults to all + """ + return self._callbacks[hook] if hook else self._callbacks + + def run(self, hook, *args, thread=False, **kwargs): + """Loop through the registered actions and fire all callbacks on main thread. + + Args: + hook: The name of the hook to check, defaults to all + args: Arguments to receive from YOLOv3 + thread: (boolean) Run callbacks in daemon thread + kwargs: Keyword Arguments to receive from YOLOv3 + """ + assert hook in self._callbacks, f"hook '{hook}' not found in callbacks {self._callbacks}" + for logger in self._callbacks[hook]: + if thread: + threading.Thread(target=logger["callback"], args=args, kwargs=kwargs, daemon=True).start() + else: + logger["callback"](*args, **kwargs) diff --git a/utils/dataloaders.py b/utils/dataloaders.py new file mode 100644 index 0000000000..766984aeee --- /dev/null +++ b/utils/dataloaders.py @@ -0,0 +1,1323 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Dataloaders and dataset utils.""" + +import contextlib +import glob +import hashlib +import json +import math +import os +import random +import shutil +import time +from itertools import repeat +from multiprocessing.pool import Pool, ThreadPool +from pathlib import Path +from threading import Thread +from urllib.parse import urlparse + +import numpy as np +import psutil +import torch +import torch.nn.functional as F +import torchvision +import yaml +from PIL import ExifTags, Image, ImageOps +from torch.utils.data import DataLoader, Dataset, dataloader, distributed +from tqdm import tqdm + +from utils.augmentations import ( + Albumentations, + augment_hsv, + classify_albumentations, + classify_transforms, + copy_paste, + letterbox, + mixup, + random_perspective, +) +from utils.general import ( + DATASETS_DIR, + LOGGER, + NUM_THREADS, + TQDM_BAR_FORMAT, + check_dataset, + check_requirements, + check_yaml, + clean_str, + cv2, + is_colab, + is_kaggle, + segments2boxes, + unzip_file, + xyn2xy, + xywh2xyxy, + xywhn2xyxy, + xyxy2xywhn, +) +from utils.torch_utils import torch_distributed_zero_first + +# Parameters +HELP_URL = "See https://docs.ultralytics.com/yolov5/tutorials/train_custom_data" +IMG_FORMATS = "bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm" # include image suffixes +VID_FORMATS = "asf", "avi", "gif", "m4v", "mkv", "mov", "mp4", "mpeg", "mpg", "ts", "wmv" # include video suffixes +LOCAL_RANK = int(os.getenv("LOCAL_RANK", -1)) # https://pytorch.org/docs/stable/elastic/run.html +RANK = int(os.getenv("RANK", -1)) +PIN_MEMORY = str(os.getenv("PIN_MEMORY", True)).lower() == "true" # global pin_memory for dataloaders + +# Get orientation exif tag +for orientation in ExifTags.TAGS.keys(): + if ExifTags.TAGS[orientation] == "Orientation": + break + + +def get_hash(paths): + """Calculates a SHA256 hash for a list of file or directory paths, combining their total size and path strings.""" + size = sum(os.path.getsize(p) for p in paths if os.path.exists(p)) # sizes + h = hashlib.sha256(str(size).encode()) # hash sizes + h.update("".join(paths).encode()) # hash paths + return h.hexdigest() # return hash + + +def exif_size(img): + """Returns corrected image size (width, height) considering EXIF rotation metadata.""" + s = img.size # (width, height) + with contextlib.suppress(Exception): + rotation = dict(img._getexif().items())[orientation] + if rotation in [6, 8]: # rotation 270 or 90 + s = (s[1], s[0]) + return s + + +def exif_transpose(image): + """ + Transpose a PIL image accordingly if it has an EXIF Orientation tag. + Inplace version of https://github.com/python-pillow/Pillow/blob/master/src/PIL/ImageOps.py exif_transpose(). + + :param image: The image to transpose. + :return: An image. + """ + exif = image.getexif() + orientation = exif.get(0x0112, 1) # default 1 + if orientation > 1: + method = { + 2: Image.FLIP_LEFT_RIGHT, + 3: Image.ROTATE_180, + 4: Image.FLIP_TOP_BOTTOM, + 5: Image.TRANSPOSE, + 6: Image.ROTATE_270, + 7: Image.TRANSVERSE, + 8: Image.ROTATE_90, + }.get(orientation) + if method is not None: + image = image.transpose(method) + del exif[0x0112] + image.info["exif"] = exif.tobytes() + return image + + +def seed_worker(worker_id): + """Sets the seed for a DataLoader worker to ensure reproducibility.""" + worker_seed = torch.initial_seed() % 2**32 + np.random.seed(worker_seed) + random.seed(worker_seed) + + +def create_dataloader( + path, + imgsz, + batch_size, + stride, + single_cls=False, + hyp=None, + augment=False, + cache=False, + pad=0.0, + rect=False, + rank=-1, + workers=8, + image_weights=False, + quad=False, + prefix="", + shuffle=False, + seed=0, +): + """Creates a DataLoader for training, with options for augmentation, caching, and parallelization.""" + if rect and shuffle: + LOGGER.warning("WARNING ⚠️ --rect is incompatible with DataLoader shuffle, setting shuffle=False") + shuffle = False + with torch_distributed_zero_first(rank): # init dataset *.cache only once if DDP + dataset = LoadImagesAndLabels( + path, + imgsz, + batch_size, + augment=augment, # augmentation + hyp=hyp, # hyperparameters + rect=rect, # rectangular batches + cache_images=cache, + single_cls=single_cls, + stride=int(stride), + pad=pad, + image_weights=image_weights, + prefix=prefix, + ) + + batch_size = min(batch_size, len(dataset)) + nd = torch.cuda.device_count() # number of CUDA devices + nw = min([os.cpu_count() // max(nd, 1), batch_size if batch_size > 1 else 0, workers]) # number of workers + sampler = None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle) + loader = DataLoader if image_weights else InfiniteDataLoader # only DataLoader allows for attribute updates + generator = torch.Generator() + generator.manual_seed(6148914691236517205 + seed + RANK) + return loader( + dataset, + batch_size=batch_size, + shuffle=shuffle and sampler is None, + num_workers=nw, + sampler=sampler, + pin_memory=PIN_MEMORY, + collate_fn=LoadImagesAndLabels.collate_fn4 if quad else LoadImagesAndLabels.collate_fn, + worker_init_fn=seed_worker, + generator=generator, + ), dataset + + +class InfiniteDataLoader(dataloader.DataLoader): + """Dataloader that reuses workers. + + Uses same syntax as vanilla DataLoader + """ + + def __init__(self, *args, **kwargs): + """Initializes an InfiniteDataLoader that reuses workers with standard DataLoader syntax and a repeating + sampler. + """ + super().__init__(*args, **kwargs) + object.__setattr__(self, "batch_sampler", _RepeatSampler(self.batch_sampler)) + self.iterator = super().__iter__() + + def __len__(self): + """Returns the length of the batch sampler's sampler.""" + return len(self.batch_sampler.sampler) + + def __iter__(self): + """Iterates over the dataset indefinitely, yielding batches from the batch_sampler.""" + for _ in range(len(self)): + yield next(self.iterator) + + +class _RepeatSampler: + """Sampler that repeats forever. + + Args: + sampler (Sampler) + """ + + def __init__(self, sampler): + """Initializes an infinitely repeating sampler with a provided `sampler` object.""" + self.sampler = sampler + + def __iter__(self): + """Provides an iterator that infinitely repeats over a given `sampler` object.""" + while True: + yield from iter(self.sampler) + + +class LoadScreenshots: + """Loads screenshots as input data for YOLOv3, capturing screen regions specified by coordinates and dimensions.""" + + def __init__(self, source, img_size=640, stride=32, auto=True, transforms=None): + """Initializes a screenshot dataloader for YOLOv3; source format: [screen_number left top width height], default + img_size=640, stride=32. + """ + check_requirements("mss") + import mss + + source, *params = source.split() + self.screen, left, top, width, height = 0, None, None, None, None # default to full screen 0 + if len(params) == 1: + self.screen = int(params[0]) + elif len(params) == 4: + left, top, width, height = (int(x) for x in params) + elif len(params) == 5: + self.screen, left, top, width, height = (int(x) for x in params) + self.img_size = img_size + self.stride = stride + self.transforms = transforms + self.auto = auto + self.mode = "stream" + self.frame = 0 + self.sct = mss.mss() + + # Parse monitor shape + monitor = self.sct.monitors[self.screen] + self.top = monitor["top"] if top is None else (monitor["top"] + top) + self.left = monitor["left"] if left is None else (monitor["left"] + left) + self.width = width or monitor["width"] + self.height = height or monitor["height"] + self.monitor = {"left": self.left, "top": self.top, "width": self.width, "height": self.height} + + def __iter__(self): + """Iterates over itself, effectively making the object its own iterator.""" + return self + + def __next__(self): + """Captures and returns the next screen image as a NumPy array in BGR format, excluding alpha channel.""" + im0 = np.array(self.sct.grab(self.monitor))[:, :, :3] # [:, :, :3] BGRA to BGR + s = f"screen {self.screen} (LTWH): {self.left},{self.top},{self.width},{self.height}: " + + if self.transforms: + im = self.transforms(im0) # transforms + else: + im = letterbox(im0, self.img_size, stride=self.stride, auto=self.auto)[0] # padded resize + im = im.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB + im = np.ascontiguousarray(im) # contiguous + self.frame += 1 + return str(self.screen), im, im0, None, s # screen, img, original img, im0s, s + + +class LoadImages: + """Loads images and videos for YOLOv3 from various sources, including directories and '*.txt' path lists.""" + + def __init__(self, path, img_size=640, stride=32, auto=True, transforms=None, vid_stride=1): + """Initializes the data loader for YOLOv3, supporting image, video, directory, and '*.txt' path lists with + customizable image sizing. + """ + if isinstance(path, str) and Path(path).suffix == ".txt": # *.txt file with img/vid/dir on each line + path = Path(path).read_text().rsplit() + files = [] + for p in sorted(path) if isinstance(path, (list, tuple)) else [path]: + p = str(Path(p).resolve()) + if "*" in p: + files.extend(sorted(glob.glob(p, recursive=True))) # glob + elif os.path.isdir(p): + files.extend(sorted(glob.glob(os.path.join(p, "*.*")))) # dir + elif os.path.isfile(p): + files.append(p) # files + else: + raise FileNotFoundError(f"{p} does not exist") + + images = [x for x in files if x.split(".")[-1].lower() in IMG_FORMATS] + videos = [x for x in files if x.split(".")[-1].lower() in VID_FORMATS] + ni, nv = len(images), len(videos) + + self.img_size = img_size + self.stride = stride + self.files = images + videos + self.nf = ni + nv # number of files + self.video_flag = [False] * ni + [True] * nv + self.mode = "image" + self.auto = auto + self.transforms = transforms # optional + self.vid_stride = vid_stride # video frame-rate stride + if any(videos): + self._new_video(videos[0]) # new video + else: + self.cap = None + assert self.nf > 0, ( + f"No images or videos found in {p}. Supported formats are:\nimages: {IMG_FORMATS}\nvideos: {VID_FORMATS}" + ) + + def __iter__(self): + """Initializes the iterator by resetting count to zero and returning the iterator instance itself.""" + self.count = 0 + return self + + def __next__(self): + """Advances to the next file in the dataset, raising StopIteration when all files are processed.""" + if self.count == self.nf: + raise StopIteration + path = self.files[self.count] + + if self.video_flag[self.count]: + # Read video + self.mode = "video" + for _ in range(self.vid_stride): + self.cap.grab() + ret_val, im0 = self.cap.retrieve() + while not ret_val: + self.count += 1 + self.cap.release() + if self.count == self.nf: # last video + raise StopIteration + path = self.files[self.count] + self._new_video(path) + ret_val, im0 = self.cap.read() + + self.frame += 1 + # im0 = self._cv2_rotate(im0) # for use if cv2 autorotation is False + s = f"video {self.count + 1}/{self.nf} ({self.frame}/{self.frames}) {path}: " + + else: + # Read image + self.count += 1 + im0 = cv2.imread(path) # BGR + assert im0 is not None, f"Image Not Found {path}" + s = f"image {self.count}/{self.nf} {path}: " + + if self.transforms: + im = self.transforms(im0) # transforms + else: + im = letterbox(im0, self.img_size, stride=self.stride, auto=self.auto)[0] # padded resize + im = im.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB + im = np.ascontiguousarray(im) # contiguous + + return path, im, im0, self.cap, s + + def _new_video(self, path): + """Initializes a video capture object with frame counting and orientation from a given path.""" + self.frame = 0 + self.cap = cv2.VideoCapture(path) + self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT) / self.vid_stride) + self.orientation = int(self.cap.get(cv2.CAP_PROP_ORIENTATION_META)) # rotation degrees + # self.cap.set(cv2.CAP_PROP_ORIENTATION_AUTO, 0) # disable https://github.com/ultralytics/yolov5/issues/8493 + + def _cv2_rotate(self, im): + """Rotates a cv2 image based on the video's metadata orientation; returns the rotated image.""" + if self.orientation == 0: + return cv2.rotate(im, cv2.ROTATE_90_CLOCKWISE) + elif self.orientation == 180: + return cv2.rotate(im, cv2.ROTATE_90_COUNTERCLOCKWISE) + elif self.orientation == 90: + return cv2.rotate(im, cv2.ROTATE_180) + return im + + def __len__(self): + """Returns the number of files in the dataset.""" + return self.nf # number of files + + +class LoadStreams: + """Loads video streams for YOLOv3 inference, supporting multiple sources and customizable frame sizes.""" + + def __init__(self, sources="file.streams", img_size=640, stride=32, auto=True, transforms=None, vid_stride=1): + """Initializes a stream loader for YOLOv3, handling video sources or files with customizable frame sizes and + intervals. + """ + torch.backends.cudnn.benchmark = True # faster for fixed-size inference + self.mode = "stream" + self.img_size = img_size + self.stride = stride + self.vid_stride = vid_stride # video frame-rate stride + sources = Path(sources).read_text().rsplit() if os.path.isfile(sources) else [sources] + n = len(sources) + self.sources = [clean_str(x) for x in sources] # clean source names for later + self.imgs, self.fps, self.frames, self.threads = [None] * n, [0] * n, [0] * n, [None] * n + for i, s in enumerate(sources): # index, source + # Start thread to read frames from video stream + st = f"{i + 1}/{n}: {s}... " + if urlparse(s).hostname in ("www.youtube.com", "youtube.com", "youtu.be"): # if source is YouTube video + # YouTube format i.e. 'https://www.youtube.com/watch?v=Zgi9g1ksQHc' or 'https://youtu.be/LNwODJXcvt4' + check_requirements(("pafy", "youtube_dl==2020.12.2")) + import pafy + + s = pafy.new(s).getbest(preftype="mp4").url # YouTube URL + s = eval(s) if s.isnumeric() else s # i.e. s = '0' local webcam + if s == 0: + assert not is_colab(), "--source 0 webcam unsupported on Colab. Rerun command in a local environment." + assert not is_kaggle(), "--source 0 webcam unsupported on Kaggle. Rerun command in a local environment." + cap = cv2.VideoCapture(s) + assert cap.isOpened(), f"{st}Failed to open {s}" + w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + fps = cap.get(cv2.CAP_PROP_FPS) # warning: may return 0 or nan + self.frames[i] = max(int(cap.get(cv2.CAP_PROP_FRAME_COUNT)), 0) or float("inf") # infinite stream fallback + self.fps[i] = max((fps if math.isfinite(fps) else 0) % 100, 0) or 30 # 30 FPS fallback + + _, self.imgs[i] = cap.read() # guarantee first frame + self.threads[i] = Thread(target=self.update, args=([i, cap, s]), daemon=True) + LOGGER.info(f"{st} Success ({self.frames[i]} frames {w}x{h} at {self.fps[i]:.2f} FPS)") + self.threads[i].start() + LOGGER.info("") # newline + + # check for common shapes + s = np.stack([letterbox(x, img_size, stride=stride, auto=auto)[0].shape for x in self.imgs]) + self.rect = np.unique(s, axis=0).shape[0] == 1 # rect inference if all shapes equal + self.auto = auto and self.rect + self.transforms = transforms # optional + if not self.rect: + LOGGER.warning("WARNING ⚠️ Stream shapes differ. For optimal performance supply similarly-shaped streams.") + + def update(self, i, cap, stream): + """Reads frames from stream `i` into `self.imgs` at intervals defined by `self.vid_stride`, handling + reconnection if needed. + """ + n, f = 0, self.frames[i] # frame number, frame array + while cap.isOpened() and n < f: + n += 1 + cap.grab() # .read() = .grab() followed by .retrieve() + if n % self.vid_stride == 0: + success, im = cap.retrieve() + if success: + self.imgs[i] = im + else: + LOGGER.warning("WARNING ⚠️ Video stream unresponsive, please check your IP camera connection.") + self.imgs[i] = np.zeros_like(self.imgs[i]) + cap.open(stream) # re-open stream if signal was lost + time.sleep(0.0) # wait time + + def __iter__(self): + """Resets and returns an iterator of the current object for iterating through video frames or images.""" + self.count = -1 + return self + + def __next__(self): + """Iterates video frames or images; halts if all threads are dead or 'q' is pressed.""" + self.count += 1 + if not all(x.is_alive() for x in self.threads) or cv2.waitKey(1) == ord("q"): # q to quit + cv2.destroyAllWindows() + raise StopIteration + + im0 = self.imgs.copy() + if self.transforms: + im = np.stack([self.transforms(x) for x in im0]) # transforms + else: + im = np.stack([letterbox(x, self.img_size, stride=self.stride, auto=self.auto)[0] for x in im0]) # resize + im = im[..., ::-1].transpose((0, 3, 1, 2)) # BGR to RGB, BHWC to BCHW + im = np.ascontiguousarray(im) # contiguous + + return self.sources, im, im0, None, "" + + def __len__(self): + """Returns the number of sources in the dataset, supporting up to 1E12 frames across streams and scenarios.""" + return len(self.sources) # 1E12 frames = 32 streams at 30 FPS for 30 years + + +def img2label_paths(img_paths): + """Converts image paths to corresponding label paths by replacing `/images/` with `/labels/` and `.jpg` with `.txt`. + """ + sa, sb = f"{os.sep}images{os.sep}", f"{os.sep}labels{os.sep}" # /images/, /labels/ substrings + return [sb.join(x.rsplit(sa, 1)).rsplit(".", 1)[0] + ".txt" for x in img_paths] + + +class LoadImagesAndLabels(Dataset): + """Loads images and labels for YOLOv3 training and validation with support for augmentations and caching.""" + + cache_version = 0.6 # dataset labels *.cache version + rand_interp_methods = [cv2.INTER_NEAREST, cv2.INTER_LINEAR, cv2.INTER_CUBIC, cv2.INTER_AREA, cv2.INTER_LANCZOS4] + + def __init__( + self, + path, + img_size=640, + batch_size=16, + augment=False, + hyp=None, + rect=False, + image_weights=False, + cache_images=False, + single_cls=False, + stride=32, + pad=0.0, + min_items=0, + prefix="", + ): + """Initializes a dataset with images and labels for YOLOv3 training and validation.""" + self.img_size = img_size + self.augment = augment + self.hyp = hyp + self.image_weights = image_weights + self.rect = False if image_weights else rect + self.mosaic = self.augment and not self.rect # load 4 images at a time into a mosaic (only during training) + self.mosaic_border = [-img_size // 2, -img_size // 2] + self.stride = stride + self.path = path + self.albumentations = Albumentations(size=img_size) if augment else None + + try: + f = [] # image files + for p in path if isinstance(path, list) else [path]: + p = Path(p) # os-agnostic + if p.is_dir(): # dir + f += glob.glob(str(p / "**" / "*.*"), recursive=True) + # f = list(p.rglob('*.*')) # pathlib + elif p.is_file(): # file + with open(p) as t: + t = t.read().strip().splitlines() + parent = str(p.parent) + os.sep + f += [x.replace("./", parent, 1) if x.startswith("./") else x for x in t] # to global path + # f += [p.parent / x.lstrip(os.sep) for x in t] # to global path (pathlib) + else: + raise FileNotFoundError(f"{prefix}{p} does not exist") + self.im_files = sorted(x.replace("/", os.sep) for x in f if x.split(".")[-1].lower() in IMG_FORMATS) + # self.img_files = sorted([x for x in f if x.suffix[1:].lower() in IMG_FORMATS]) # pathlib + assert self.im_files, f"{prefix}No images found" + except Exception as e: + raise Exception(f"{prefix}Error loading data from {path}: {e}\n{HELP_URL}") from e + + # Check cache + self.label_files = img2label_paths(self.im_files) # labels + cache_path = (p if p.is_file() else Path(self.label_files[0]).parent).with_suffix(".cache") + try: + cache, exists = np.load(cache_path, allow_pickle=True).item(), True # load dict + assert cache["version"] == self.cache_version # matches current version + assert cache["hash"] == get_hash(self.label_files + self.im_files) # identical hash + except Exception: + cache, exists = self.cache_labels(cache_path, prefix), False # run cache ops + + # Display cache + nf, nm, ne, nc, n = cache.pop("results") # found, missing, empty, corrupt, total + if exists and LOCAL_RANK in {-1, 0}: + d = f"Scanning {cache_path}... {nf} images, {nm + ne} backgrounds, {nc} corrupt" + tqdm(None, desc=prefix + d, total=n, initial=n, bar_format=TQDM_BAR_FORMAT) # display cache results + if cache["msgs"]: + LOGGER.info("\n".join(cache["msgs"])) # display warnings + assert nf > 0 or not augment, f"{prefix}No labels found in {cache_path}, can not start training. {HELP_URL}" + + # Read cache + [cache.pop(k) for k in ("hash", "version", "msgs")] # remove items + labels, shapes, self.segments = zip(*cache.values()) + nl = len(np.concatenate(labels, 0)) # number of labels + assert nl > 0 or not augment, f"{prefix}All labels empty in {cache_path}, can not start training. {HELP_URL}" + self.labels = list(labels) + self.shapes = np.array(shapes) + self.im_files = list(cache.keys()) # update + self.label_files = img2label_paths(cache.keys()) # update + + # Filter images + if min_items: + include = np.array([len(x) >= min_items for x in self.labels]).nonzero()[0].astype(int) + LOGGER.info(f"{prefix}{n - len(include)}/{n} images filtered from dataset") + self.im_files = [self.im_files[i] for i in include] + self.label_files = [self.label_files[i] for i in include] + self.labels = [self.labels[i] for i in include] + self.segments = [self.segments[i] for i in include] + self.shapes = self.shapes[include] # wh + + # Create indices + n = len(self.shapes) # number of images + bi = np.floor(np.arange(n) / batch_size).astype(int) # batch index + nb = bi[-1] + 1 # number of batches + self.batch = bi # batch index of image + self.n = n + self.indices = range(n) + + # Update labels + include_class = [] # filter labels to include only these classes (optional) + self.segments = list(self.segments) + include_class_array = np.array(include_class).reshape(1, -1) + for i, (label, segment) in enumerate(zip(self.labels, self.segments)): + if include_class: + j = (label[:, 0:1] == include_class_array).any(1) + self.labels[i] = label[j] + if segment: + self.segments[i] = [segment[idx] for idx, elem in enumerate(j) if elem] + if single_cls: # single-class training, merge all classes into 0 + self.labels[i][:, 0] = 0 + + # Rectangular Training + if self.rect: + # Sort by aspect ratio + s = self.shapes # wh + ar = s[:, 1] / s[:, 0] # aspect ratio + irect = ar.argsort() + self.im_files = [self.im_files[i] for i in irect] + self.label_files = [self.label_files[i] for i in irect] + self.labels = [self.labels[i] for i in irect] + self.segments = [self.segments[i] for i in irect] + self.shapes = s[irect] # wh + ar = ar[irect] + + # Set training image shapes + shapes = [[1, 1]] * nb + for i in range(nb): + ari = ar[bi == i] + mini, maxi = ari.min(), ari.max() + if maxi < 1: + shapes[i] = [maxi, 1] + elif mini > 1: + shapes[i] = [1, 1 / mini] + + self.batch_shapes = np.ceil(np.array(shapes) * img_size / stride + pad).astype(int) * stride + + # Cache images into RAM/disk for faster training + if cache_images == "ram" and not self.check_cache_ram(prefix=prefix): + cache_images = False + self.ims = [None] * n + self.npy_files = [Path(f).with_suffix(".npy") for f in self.im_files] + if cache_images: + b, gb = 0, 1 << 30 # bytes of cached images, bytes per gigabytes + self.im_hw0, self.im_hw = [None] * n, [None] * n + fcn = self.cache_images_to_disk if cache_images == "disk" else self.load_image + results = ThreadPool(NUM_THREADS).imap(fcn, range(n)) + pbar = tqdm(enumerate(results), total=n, bar_format=TQDM_BAR_FORMAT, disable=LOCAL_RANK > 0) + for i, x in pbar: + if cache_images == "disk": + b += self.npy_files[i].stat().st_size + else: # 'ram' + self.ims[i], self.im_hw0[i], self.im_hw[i] = x # im, hw_orig, hw_resized = load_image(self, i) + b += self.ims[i].nbytes + pbar.desc = f"{prefix}Caching images ({b / gb:.1f}GB {cache_images})" + pbar.close() + + def check_cache_ram(self, safety_margin=0.1, prefix=""): + """Evaluates if there's enough RAM to cache dataset images, considering a safety margin.""" + b, gb = 0, 1 << 30 # bytes of cached images, bytes per gigabytes + n = min(self.n, 30) # extrapolate from 30 random images + for _ in range(n): + im = cv2.imread(random.choice(self.im_files)) # sample image + ratio = self.img_size / max(im.shape[0], im.shape[1]) # max(h, w) # ratio + b += im.nbytes * ratio**2 + mem_required = b * self.n / n # GB required to cache dataset into RAM + mem = psutil.virtual_memory() + cache = mem_required * (1 + safety_margin) < mem.available # to cache or not to cache, that is the question + if not cache: + LOGGER.info( + f"{prefix}{mem_required / gb:.1f}GB RAM required, " + f"{mem.available / gb:.1f}/{mem.total / gb:.1f}GB available, " + f"{'caching images ✅' if cache else 'not caching images ⚠️'}" + ) + return cache + + def cache_labels(self, path=Path("./labels.cache"), prefix=""): + """Caches dataset labels, checks image existence and readability, and records image shapes and segments.""" + x = {} # dict + nm, nf, ne, nc, msgs = 0, 0, 0, 0, [] # number missing, found, empty, corrupt, messages + desc = f"{prefix}Scanning {path.parent / path.stem}..." + with Pool(NUM_THREADS) as pool: + pbar = tqdm( + pool.imap(verify_image_label, zip(self.im_files, self.label_files, repeat(prefix))), + desc=desc, + total=len(self.im_files), + bar_format=TQDM_BAR_FORMAT, + ) + for im_file, lb, shape, segments, nm_f, nf_f, ne_f, nc_f, msg in pbar: + nm += nm_f + nf += nf_f + ne += ne_f + nc += nc_f + if im_file: + x[im_file] = [lb, shape, segments] + if msg: + msgs.append(msg) + pbar.desc = f"{desc} {nf} images, {nm + ne} backgrounds, {nc} corrupt" + + pbar.close() + if msgs: + LOGGER.info("\n".join(msgs)) + if nf == 0: + LOGGER.warning(f"{prefix}WARNING ⚠️ No labels found in {path}. {HELP_URL}") + x["hash"] = get_hash(self.label_files + self.im_files) + x["results"] = nf, nm, ne, nc, len(self.im_files) + x["msgs"] = msgs # warnings + x["version"] = self.cache_version # cache version + try: + np.save(path, x) # save cache for next time + path.with_suffix(".cache.npy").rename(path) # remove .npy suffix + LOGGER.info(f"{prefix}New cache created: {path}") + except Exception as e: + LOGGER.warning(f"{prefix}WARNING ⚠️ Cache directory {path.parent} is not writeable: {e}") # not writeable + return x + + def __len__(self): + """Returns the number of image files in the dataset.""" + return len(self.im_files) + + # def __iter__(self): + # self.count = -1 + # print('ran dataset iter') + # #self.shuffled_vector = np.random.permutation(self.nF) if self.augment else np.arange(self.nF) + # return self + + def __getitem__(self, index): + """Fetches dataset item at `index` after applying indexing via `self.indices`, supporting + linear/shuffled/image_weights modes. + """ + index = self.indices[index] # linear, shuffled, or image_weights + + hyp = self.hyp + if mosaic := self.mosaic and random.random() < hyp["mosaic"]: + # Load mosaic + img, labels = self.load_mosaic(index) + shapes = None + + # MixUp augmentation + if random.random() < hyp["mixup"]: + img, labels = mixup(img, labels, *self.load_mosaic(random.randint(0, self.n - 1))) + + else: + # Load image + img, (h0, w0), (h, w) = self.load_image(index) + + # Letterbox + shape = self.batch_shapes[self.batch[index]] if self.rect else self.img_size # final letterboxed shape + img, ratio, pad = letterbox(img, shape, auto=False, scaleup=self.augment) + shapes = (h0, w0), ((h / h0, w / w0), pad) # for COCO mAP rescaling + + labels = self.labels[index].copy() + if labels.size: # normalized xywh to pixel xyxy format + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], ratio[0] * w, ratio[1] * h, padw=pad[0], padh=pad[1]) + + if self.augment: + img, labels = random_perspective( + img, + labels, + degrees=hyp["degrees"], + translate=hyp["translate"], + scale=hyp["scale"], + shear=hyp["shear"], + perspective=hyp["perspective"], + ) + + nl = len(labels) # number of labels + if nl: + labels[:, 1:5] = xyxy2xywhn(labels[:, 1:5], w=img.shape[1], h=img.shape[0], clip=True, eps=1e-3) + + if self.augment: + # Albumentations + img, labels = self.albumentations(img, labels) + nl = len(labels) # update after albumentations + + # HSV color-space + augment_hsv(img, hgain=hyp["hsv_h"], sgain=hyp["hsv_s"], vgain=hyp["hsv_v"]) + + # Flip up-down + if random.random() < hyp["flipud"]: + img = np.flipud(img) + if nl: + labels[:, 2] = 1 - labels[:, 2] + + # Flip left-right + if random.random() < hyp["fliplr"]: + img = np.fliplr(img) + if nl: + labels[:, 1] = 1 - labels[:, 1] + + # Cutouts + # labels = cutout(img, labels, p=0.5) + # nl = len(labels) # update after cutout + + labels_out = torch.zeros((nl, 6)) + if nl: + labels_out[:, 1:] = torch.from_numpy(labels) + + # Convert + img = img.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB + img = np.ascontiguousarray(img) + + return torch.from_numpy(img), labels_out, self.im_files[index], shapes + + def load_image(self, i): + """Loads a single image by index, returning the image, its original dimensions, and resized dimensions.""" + im, f, fn = ( + self.ims[i], + self.im_files[i], + self.npy_files[i], + ) + if im is None: # not cached in RAM + if fn.exists(): # load npy + im = np.load(fn) + else: # read image + im = cv2.imread(f) # BGR + assert im is not None, f"Image Not Found {f}" + h0, w0 = im.shape[:2] # orig hw + r = self.img_size / max(h0, w0) # ratio + if r != 1: # if sizes are not equal + interp = cv2.INTER_LINEAR if (self.augment or r > 1) else cv2.INTER_AREA + im = cv2.resize(im, (math.ceil(w0 * r), math.ceil(h0 * r)), interpolation=interp) + return im, (h0, w0), im.shape[:2] # im, hw_original, hw_resized + return self.ims[i], self.im_hw0[i], self.im_hw[i] # im, hw_original, hw_resized + + def cache_images_to_disk(self, i): + """Saves an image to disk as an *.npy file for faster future loading.""" + f = self.npy_files[i] + if not f.exists(): + np.save(f.as_posix(), cv2.imread(self.im_files[i])) + + def load_mosaic(self, index): + """Loads 4 images into a mosaic for YOLOv3 training, enhancing detection capabilities through data augmentation. + """ + labels4, segments4 = [], [] + s = self.img_size + yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border) # mosaic center x, y + indices = [index] + random.choices(self.indices, k=3) # 3 additional image indices + random.shuffle(indices) + for i, index in enumerate(indices): + # Load image + img, _, (h, w) = self.load_image(index) + + # place img in img4 + if i == 0: # top left + img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles + x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) + x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) + elif i == 1: # top right + x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc + x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h + elif i == 2: # bottom left + x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) + x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) + elif i == 3: # bottom right + x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) + x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) + + img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] + padw = x1a - x1b + padh = y1a - y1b + + # Labels + labels, segments = self.labels[index].copy(), self.segments[index].copy() + if labels.size: + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh) # normalized xywh to pixel xyxy format + segments = [xyn2xy(x, w, h, padw, padh) for x in segments] + labels4.append(labels) + segments4.extend(segments) + + # Concat/clip labels + labels4 = np.concatenate(labels4, 0) + for x in (labels4[:, 1:], *segments4): + np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() + # img4, labels4 = replicate(img4, labels4) # replicate + + # Augment + img4, labels4, segments4 = copy_paste(img4, labels4, segments4, p=self.hyp["copy_paste"]) + img4, labels4 = random_perspective( + img4, + labels4, + segments4, + degrees=self.hyp["degrees"], + translate=self.hyp["translate"], + scale=self.hyp["scale"], + shear=self.hyp["shear"], + perspective=self.hyp["perspective"], + border=self.mosaic_border, + ) # border to remove + + return img4, labels4 + + def load_mosaic9(self, index): + """Loads 1 image + 8 random images into a 9-image mosaic for YOLOv3, returning combined image and labels.""" + labels9, segments9 = [], [] + s = self.img_size + indices = [index] + random.choices(self.indices, k=8) # 8 additional image indices + random.shuffle(indices) + hp, wp = -1, -1 # height, width previous + for i, index in enumerate(indices): + # Load image + img, _, (h, w) = self.load_image(index) + + # place img in img9 + if i == 0: # center + img9 = np.full((s * 3, s * 3, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles + h0, w0 = h, w + c = s, s, s + w, s + h # xmin, ymin, xmax, ymax (base) coordinates + elif i == 1: # top + c = s, s - h, s + w, s + elif i == 2: # top right + c = s + wp, s - h, s + wp + w, s + elif i == 3: # right + c = s + w0, s, s + w0 + w, s + h + elif i == 4: # bottom right + c = s + w0, s + hp, s + w0 + w, s + hp + h + elif i == 5: # bottom + c = s + w0 - w, s + h0, s + w0, s + h0 + h + elif i == 6: # bottom left + c = s + w0 - wp - w, s + h0, s + w0 - wp, s + h0 + h + elif i == 7: # left + c = s - w, s + h0 - h, s, s + h0 + elif i == 8: # top left + c = s - w, s + h0 - hp - h, s, s + h0 - hp + + padx, pady = c[:2] + x1, y1, x2, y2 = (max(x, 0) for x in c) # allocate coords + + # Labels + labels, segments = self.labels[index].copy(), self.segments[index].copy() + if labels.size: + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padx, pady) # normalized xywh to pixel xyxy format + segments = [xyn2xy(x, w, h, padx, pady) for x in segments] + labels9.append(labels) + segments9.extend(segments) + + # Image + img9[y1:y2, x1:x2] = img[y1 - pady :, x1 - padx :] # img9[ymin:ymax, xmin:xmax] + hp, wp = h, w # height, width previous + + # Offset + yc, xc = (int(random.uniform(0, s)) for _ in self.mosaic_border) # mosaic center x, y + img9 = img9[yc : yc + 2 * s, xc : xc + 2 * s] + + # Concat/clip labels + labels9 = np.concatenate(labels9, 0) + labels9[:, [1, 3]] -= xc + labels9[:, [2, 4]] -= yc + c = np.array([xc, yc]) # centers + segments9 = [x - c for x in segments9] + + for x in (labels9[:, 1:], *segments9): + np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() + # img9, labels9 = replicate(img9, labels9) # replicate + + # Augment + img9, labels9, segments9 = copy_paste(img9, labels9, segments9, p=self.hyp["copy_paste"]) + img9, labels9 = random_perspective( + img9, + labels9, + segments9, + degrees=self.hyp["degrees"], + translate=self.hyp["translate"], + scale=self.hyp["scale"], + shear=self.hyp["shear"], + perspective=self.hyp["perspective"], + border=self.mosaic_border, + ) # border to remove + + return img9, labels9 + + @staticmethod + def collate_fn(batch): + """Collates batch of images, labels, paths, and shapes, indexing labels for target image identification.""" + im, label, path, shapes = zip(*batch) # transposed + for i, lb in enumerate(label): + lb[:, 0] = i # add target image index for build_targets() + return torch.stack(im, 0), torch.cat(label, 0), path, shapes + + @staticmethod + def collate_fn4(batch): + """Batches images, labels, paths, and shapes by grouping every 4 items for dataset loading.""" + im, label, path, shapes = zip(*batch) # transposed + n = len(shapes) // 4 + im4, label4, path4, shapes4 = [], [], path[:n], shapes[:n] + + ho = torch.tensor([[0.0, 0, 0, 1, 0, 0]]) + wo = torch.tensor([[0.0, 0, 1, 0, 0, 0]]) + s = torch.tensor([[1, 1, 0.5, 0.5, 0.5, 0.5]]) # scale + for i in range(n): # zidane torch.zeros(16,3,720,1280) # BCHW + i *= 4 + if random.random() < 0.5: + im1 = F.interpolate(im[i].unsqueeze(0).float(), scale_factor=2.0, mode="bilinear", align_corners=False)[ + 0 + ].type(im[i].type()) + lb = label[i] + else: + im1 = torch.cat((torch.cat((im[i], im[i + 1]), 1), torch.cat((im[i + 2], im[i + 3]), 1)), 2) + lb = torch.cat((label[i], label[i + 1] + ho, label[i + 2] + wo, label[i + 3] + ho + wo), 0) * s + im4.append(im1) + label4.append(lb) + + for i, lb in enumerate(label4): + lb[:, 0] = i # add target image index for build_targets() + + return torch.stack(im4, 0), torch.cat(label4, 0), path4, shapes4 + + +# Ancillary functions -------------------------------------------------------------------------------------------------- +def flatten_recursive(path=DATASETS_DIR / "coco128"): + """Flattens a directory recursively by copying all files to a new top-level directory, given an input path.""" + new_path = Path(f"{path!s}_flat") + if os.path.exists(new_path): + shutil.rmtree(new_path) # delete output folder + os.makedirs(new_path) # make new output folder + for file in tqdm(glob.glob(f"{Path(path)!s}/**/*.*", recursive=True)): + shutil.copyfile(file, new_path / Path(file).name) + + +def extract_boxes(path=DATASETS_DIR / "coco128"): # from utils.dataloaders import *; extract_boxes() + """Converts detection dataset to classification dataset, creating one directory per class with images cropped to + bounding boxes. + """ + path = Path(path) # images dir + shutil.rmtree(path / "classification") if (path / "classification").is_dir() else None # remove existing + files = list(path.rglob("*.*")) + n = len(files) # number of files + for im_file in tqdm(files, total=n): + if im_file.suffix[1:] in IMG_FORMATS: + # image + im = cv2.imread(str(im_file))[..., ::-1] # BGR to RGB + h, w = im.shape[:2] + + # labels + lb_file = Path(img2label_paths([str(im_file)])[0]) + if Path(lb_file).exists(): + with open(lb_file) as f: + lb = np.array([x.split() for x in f.read().strip().splitlines()], dtype=np.float32) # labels + + for j, x in enumerate(lb): + c = int(x[0]) # class + f = (path / "classifier") / f"{c}" / f"{path.stem}_{im_file.stem}_{j}.jpg" # new filename + if not f.parent.is_dir(): + f.parent.mkdir(parents=True) + + b = x[1:] * [w, h, w, h] # box + # b[2:] = b[2:].max() # rectangle to square + b[2:] = b[2:] * 1.2 + 3 # pad + b = xywh2xyxy(b.reshape(-1, 4)).ravel().astype(int) + + b[[0, 2]] = np.clip(b[[0, 2]], 0, w) # clip boxes outside of image + b[[1, 3]] = np.clip(b[[1, 3]], 0, h) + assert cv2.imwrite(str(f), im[b[1] : b[3], b[0] : b[2]]), f"box failure in {f}" + + +def autosplit(path=DATASETS_DIR / "coco128/images", weights=(0.9, 0.1, 0.0), annotated_only=False): + """Autosplit a dataset into train/val/test splits and save path/autosplit_*.txt files Usage: from utils.dataloaders + import *; autosplit(). + + Args: + path: Path to images directory + weights: Train, val, test weights (list, tuple) + annotated_only: Only use images with an annotated txt file + """ + path = Path(path) # images dir + files = sorted(x for x in path.rglob("*.*") if x.suffix[1:].lower() in IMG_FORMATS) # image files only + n = len(files) # number of files + random.seed(0) # for reproducibility + indices = random.choices([0, 1, 2], weights=weights, k=n) # assign each image to a split + + txt = ["autosplit_train.txt", "autosplit_val.txt", "autosplit_test.txt"] # 3 txt files + for x in txt: + if (path.parent / x).exists(): + (path.parent / x).unlink() # remove existing + + print(f"Autosplitting images from {path}" + ", using *.txt labeled images only" * annotated_only) + for i, img in tqdm(zip(indices, files), total=n): + if not annotated_only or Path(img2label_paths([str(img)])[0]).exists(): # check label + with open(path.parent / txt[i], "a") as f: + f.write(f"./{img.relative_to(path.parent).as_posix()}" + "\n") # add image to txt file + + +def verify_image_label(args): + """Checks and verifies one image-label pair, fixing common issues and reporting anomalies.""" + im_file, lb_file, prefix = args + nm, nf, ne, nc, msg, segments = 0, 0, 0, 0, "", [] # number (missing, found, empty, corrupt), message, segments + try: + # verify images + im = Image.open(im_file) + im.verify() # PIL verify + shape = exif_size(im) # image size + assert (shape[0] > 9) & (shape[1] > 9), f"image size {shape} <10 pixels" + assert im.format.lower() in IMG_FORMATS, f"invalid image format {im.format}" + if im.format.lower() in ("jpg", "jpeg"): + with open(im_file, "rb") as f: + f.seek(-2, 2) + if f.read() != b"\xff\xd9": # corrupt JPEG + ImageOps.exif_transpose(Image.open(im_file)).save(im_file, "JPEG", subsampling=0, quality=100) + msg = f"{prefix}WARNING ⚠️ {im_file}: corrupt JPEG restored and saved" + + # verify labels + if os.path.isfile(lb_file): + nf = 1 # label found + with open(lb_file) as f: + lb = [x.split() for x in f.read().strip().splitlines() if len(x)] + if any(len(x) > 6 for x in lb): # is segment + classes = np.array([x[0] for x in lb], dtype=np.float32) + segments = [np.array(x[1:], dtype=np.float32).reshape(-1, 2) for x in lb] # (cls, xy1...) + lb = np.concatenate((classes.reshape(-1, 1), segments2boxes(segments)), 1) # (cls, xywh) + lb = np.array(lb, dtype=np.float32) + if nl := len(lb): + assert lb.shape[1] == 5, f"labels require 5 columns, {lb.shape[1]} columns detected" + assert (lb >= 0).all(), f"negative label values {lb[lb < 0]}" + assert (lb[:, 1:] <= 1).all(), f"non-normalized or out of bounds coordinates {lb[:, 1:][lb[:, 1:] > 1]}" + _, i = np.unique(lb, axis=0, return_index=True) + if len(i) < nl: # duplicate row check + lb = lb[i] # remove duplicates + if segments: + segments = [segments[x] for x in i] + msg = f"{prefix}WARNING ⚠️ {im_file}: {nl - len(i)} duplicate labels removed" + else: + ne = 1 # label empty + lb = np.zeros((0, 5), dtype=np.float32) + else: + nm = 1 # label missing + lb = np.zeros((0, 5), dtype=np.float32) + return im_file, lb, shape, segments, nm, nf, ne, nc, msg + except Exception as e: + nc = 1 + msg = f"{prefix}WARNING ⚠️ {im_file}: ignoring corrupt image/label: {e}" + return [None, None, None, None, nm, nf, ne, nc, msg] + + +class HUBDatasetStats: + """Class for generating HUB dataset JSON and `-hub` dataset directory. + + Args: + path: Path to data.yaml or data.zip (with data.yaml inside data.zip) + autodownload: Attempt to download dataset if not found locally + + Usage + from utils.dataloaders import HUBDatasetStats + stats = HUBDatasetStats('coco128.yaml', autodownload=True) # usage 1 + stats = HUBDatasetStats('path/to/coco128.zip') # usage 2 + stats.get_json(save=False) + stats.process_images() + """ + + def __init__(self, path="coco128.yaml", autodownload=False): + """Initializes HUBDatasetStats with dataset path, optionally autodownloads; supports .yaml or .zip formats.""" + zipped, data_dir, yaml_path = self._unzip(Path(path)) + try: + with open(check_yaml(yaml_path), errors="ignore") as f: + data = yaml.safe_load(f) # data dict + if zipped: + data["path"] = data_dir + except Exception as e: + raise Exception("error/HUB/dataset_stats/yaml_load") from e + + check_dataset(data, autodownload) # download dataset if missing + self.hub_dir = Path(data["path"] + "-hub") + self.im_dir = self.hub_dir / "images" + self.im_dir.mkdir(parents=True, exist_ok=True) # makes /images + self.stats = {"nc": data["nc"], "names": list(data["names"].values())} # statistics dictionary + self.data = data + + @staticmethod + def _find_yaml(dir): + """Finds a single `data.yaml` file within specified directory, preferring matches to directory name.""" + files = list(dir.glob("*.yaml")) or list(dir.rglob("*.yaml")) # try root level first and then recursive + assert files, f"No *.yaml file found in {dir}" + if len(files) > 1: + files = [f for f in files if f.stem == dir.stem] # prefer *.yaml files that match dir name + assert files, f"Multiple *.yaml files found in {dir}, only 1 *.yaml file allowed" + assert len(files) == 1, f"Multiple *.yaml files found: {files}, only 1 *.yaml file allowed in {dir}" + return files[0] + + def _unzip(self, path): + """Unzips a .zip file, verifying its integrity and locating the associated YAML file within the unzipped + directory. + """ + if not str(path).endswith(".zip"): # path is data.yaml + return False, None, path + assert Path(path).is_file(), f"Error unzipping {path}, file not found" + unzip_file(path, path=path.parent) + dir = path.with_suffix("") # dataset directory == zip name + assert dir.is_dir(), f"Error unzipping {path}, {dir} not found. path/to/abc.zip MUST unzip to path/to/abc/" + return True, str(dir), self._find_yaml(dir) # zipped, data_dir, yaml_path + + def _hub_ops(self, f, max_dim=1920): + """Resizes and saves an image at reduced quality for web/app viewing; `f`: path to image, `max_dim`=1920 maximum + dimension. + """ + f_new = self.im_dir / Path(f).name # dataset-hub image filename + try: # use PIL + im = Image.open(f) + r = max_dim / max(im.height, im.width) # ratio + if r < 1.0: # image too large + im = im.resize((int(im.width * r), int(im.height * r))) + im.save(f_new, "JPEG", quality=50, optimize=True) # save + except Exception as e: # use OpenCV + LOGGER.info(f"WARNING ⚠️ HUB ops PIL failure {f}: {e}") + im = cv2.imread(f) + im_height, im_width = im.shape[:2] + r = max_dim / max(im_height, im_width) # ratio + if r < 1.0: # image too large + im = cv2.resize(im, (int(im_width * r), int(im_height * r)), interpolation=cv2.INTER_AREA) + cv2.imwrite(str(f_new), im) + + def get_json(self, save=False, verbose=False): + """Generates dataset JSON for Ultralytics HUB, with optional saving and verbosity; rounds labels to int class + and 6 decimal floats. + """ + + def _round(labels): + """Update labels to integer class and 6 decimal place floats.""" + return [[int(c), *(round(x, 4) for x in points)] for c, *points in labels] + + for split in "train", "val", "test": + if self.data.get(split) is None: + self.stats[split] = None # i.e. no test set + continue + dataset = LoadImagesAndLabels(self.data[split]) # load dataset + x = np.array( + [ + np.bincount(label[:, 0].astype(int), minlength=self.data["nc"]) + for label in tqdm(dataset.labels, total=dataset.n, desc="Statistics") + ] + ) # shape(128x80) + self.stats[split] = { + "instance_stats": {"total": int(x.sum()), "per_class": x.sum(0).tolist()}, + "image_stats": { + "total": dataset.n, + "unlabelled": int(np.all(x == 0, 1).sum()), + "per_class": (x > 0).sum(0).tolist(), + }, + "labels": [{str(Path(k).name): _round(v.tolist())} for k, v in zip(dataset.im_files, dataset.labels)], + } + + # Save, print and return + if save: + stats_path = self.hub_dir / "stats.json" + print(f"Saving {stats_path.resolve()}...") + with open(stats_path, "w") as f: + json.dump(self.stats, f) # save stats.json + if verbose: + print(json.dumps(self.stats, indent=2, sort_keys=False)) + return self.stats + + def process_images(self): + """Compresses images for Ultralytics HUB, saving them to specified directory; supports 'train', 'val', 'test' + splits. + """ + for split in "train", "val", "test": + if self.data.get(split) is None: + continue + dataset = LoadImagesAndLabels(self.data[split]) # load dataset + desc = f"{split} images" + for _ in tqdm(ThreadPool(NUM_THREADS).imap(self._hub_ops, dataset.im_files), total=dataset.n, desc=desc): + pass + print(f"Done. All images saved to {self.im_dir}") + return self.im_dir + + +# Classification dataloaders ------------------------------------------------------------------------------------------- +class ClassificationDataset(torchvision.datasets.ImageFolder): + """YOLOv3 Classification Dataset. + + Args: + root: Dataset path + transform: torchvision transforms, used by default + album_transform: Albumentations transforms, used if installed + """ + + def __init__(self, root, augment, imgsz, cache=False): + """Initializes classification dataset with optional augmentation, image resizing, caching, inheriting from + ImageFolder. + """ + super().__init__(root=root) + self.torch_transforms = classify_transforms(imgsz) + self.album_transforms = classify_albumentations(augment, imgsz) if augment else None + self.cache_ram = cache is True or cache == "ram" + self.cache_disk = cache == "disk" + self.samples = [[*list(x), Path(x[0]).with_suffix(".npy"), None] for x in self.samples] # file, index, npy, im + + def __getitem__(self, i): + """Fetches the item at index `i`, applies caching and transformations, and returns image-sample and index.""" + f, j, fn, im = self.samples[i] # filename, index, filename.with_suffix('.npy'), image + if self.cache_ram and im is None: + im = self.samples[i][3] = cv2.imread(f) + elif self.cache_disk: + if not fn.exists(): # load npy + np.save(fn.as_posix(), cv2.imread(f)) + im = np.load(fn) + else: # read image + im = cv2.imread(f) # BGR + if self.album_transforms: + sample = self.album_transforms(image=cv2.cvtColor(im, cv2.COLOR_BGR2RGB))["image"] + else: + sample = self.torch_transforms(im) + return sample, j + + +def create_classification_dataloader( + path, imgsz=224, batch_size=16, augment=True, cache=False, rank=-1, workers=8, shuffle=True +): + # Returns Dataloader object to be used with YOLOv3 Classifier + """Creates a DataLoader for image classification tasks with options for augmentation, caching, and distributed + training. + """ + with torch_distributed_zero_first(rank): # init dataset *.cache only once if DDP + dataset = ClassificationDataset(root=path, imgsz=imgsz, augment=augment, cache=cache) + batch_size = min(batch_size, len(dataset)) + nd = torch.cuda.device_count() + nw = min([os.cpu_count() // max(nd, 1), batch_size if batch_size > 1 else 0, workers]) + sampler = None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle) + generator = torch.Generator() + generator.manual_seed(6148914691236517205 + RANK) + return InfiniteDataLoader( + dataset, + batch_size=batch_size, + shuffle=shuffle and sampler is None, + num_workers=nw, + sampler=sampler, + pin_memory=PIN_MEMORY, + worker_init_fn=seed_worker, + generator=generator, + ) # or DataLoader(persistent_workers=True) diff --git a/utils/datasets.py b/utils/datasets.py deleted file mode 100755 index 340cfdb85a..0000000000 --- a/utils/datasets.py +++ /dev/null @@ -1,816 +0,0 @@ -import glob -import math -import os -import random -import shutil -import time -from pathlib import Path -from threading import Thread - -import cv2 -import numpy as np -import torch -from PIL import Image, ExifTags -from torch.utils.data import Dataset -from tqdm import tqdm - -from utils.utils import xyxy2xywh, xywh2xyxy - -img_formats = ['.bmp', '.jpg', '.jpeg', '.png', '.tif', '.dng'] -vid_formats = ['.mov', '.avi', '.mp4'] - -# Get orientation exif tag -for orientation in ExifTags.TAGS.keys(): - if ExifTags.TAGS[orientation] == 'Orientation': - break - - -def exif_size(img): - # Returns exif-corrected PIL size - s = img.size # (width, height) - try: - rotation = dict(img._getexif().items())[orientation] - if rotation == 6: # rotation 270 - s = (s[1], s[0]) - elif rotation == 8: # rotation 90 - s = (s[1], s[0]) - except: - pass - - return s - - -class LoadImages: # for inference - def __init__(self, path, img_size=416, half=False): - path = str(Path(path)) # os-agnostic - files = [] - if os.path.isdir(path): - files = sorted(glob.glob(os.path.join(path, '*.*'))) - elif os.path.isfile(path): - files = [path] - - images = [x for x in files if os.path.splitext(x)[-1].lower() in img_formats] - videos = [x for x in files if os.path.splitext(x)[-1].lower() in vid_formats] - nI, nV = len(images), len(videos) - - self.img_size = img_size - self.files = images + videos - self.nF = nI + nV # number of files - self.video_flag = [False] * nI + [True] * nV - self.mode = 'images' - self.half = half # half precision fp16 images - if any(videos): - self.new_video(videos[0]) # new video - else: - self.cap = None - assert self.nF > 0, 'No images or videos found in ' + path - - def __iter__(self): - self.count = 0 - return self - - def __next__(self): - if self.count == self.nF: - raise StopIteration - path = self.files[self.count] - - if self.video_flag[self.count]: - # Read video - self.mode = 'video' - ret_val, img0 = self.cap.read() - if not ret_val: - self.count += 1 - self.cap.release() - if self.count == self.nF: # last video - raise StopIteration - else: - path = self.files[self.count] - self.new_video(path) - ret_val, img0 = self.cap.read() - - self.frame += 1 - print('video %g/%g (%g/%g) %s: ' % (self.count + 1, self.nF, self.frame, self.nframes, path), end='') - - else: - # Read image - self.count += 1 - img0 = cv2.imread(path) # BGR - assert img0 is not None, 'Image Not Found ' + path - print('image %g/%g %s: ' % (self.count, self.nF, path), end='') - - # Padded resize - img = letterbox(img0, new_shape=self.img_size)[0] - - # Normalize RGB - img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB - img = np.ascontiguousarray(img, dtype=np.float16 if self.half else np.float32) # uint8 to fp16/fp32 - img /= 255.0 # 0 - 255 to 0.0 - 1.0 - - # cv2.imwrite(path + '.letterbox.jpg', 255 * img.transpose((1, 2, 0))[:, :, ::-1]) # save letterbox image - return path, img, img0, self.cap - - def new_video(self, path): - self.frame = 0 - self.cap = cv2.VideoCapture(path) - self.nframes = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) - - def __len__(self): - return self.nF # number of files - - -class LoadWebcam: # for inference - def __init__(self, pipe=0, img_size=416, half=False): - self.img_size = img_size - self.half = half # half precision fp16 images - - if pipe == '0': - pipe = 0 # local camera - # pipe = 'rtsp://192.168.1.64/1' # IP camera - # pipe = 'rtsp://username:password@192.168.1.64/1' # IP camera with login - # pipe = 'rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa' # IP traffic camera - # pipe = 'http://wmccpinetop.axiscam.net/mjpg/video.mjpg' # IP golf camera - - # https://answers.opencv.org/question/215996/changing-gstreamer-pipeline-to-opencv-in-pythonsolved/ - # pipe = '"rtspsrc location="rtsp://username:password@192.168.1.64/1" latency=10 ! appsink' # GStreamer - - # https://answers.opencv.org/question/200787/video-acceleration-gstremer-pipeline-in-videocapture/ - # https://stackoverflow.com/questions/54095699/install-gstreamer-support-for-opencv-python-package # install help - # pipe = "rtspsrc location=rtsp://root:root@192.168.0.91:554/axis-media/media.amp?videocodec=h264&resolution=3840x2160 protocols=GST_RTSP_LOWER_TRANS_TCP ! rtph264depay ! queue ! vaapih264dec ! videoconvert ! appsink" # GStreamer - - self.pipe = pipe - self.cap = cv2.VideoCapture(pipe) # video capture object - self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 3) # set buffer size - - def __iter__(self): - self.count = -1 - return self - - def __next__(self): - self.count += 1 - if cv2.waitKey(1) == ord('q'): # q to quit - self.cap.release() - cv2.destroyAllWindows() - raise StopIteration - - # Read frame - if self.pipe == 0: # local camera - ret_val, img0 = self.cap.read() - img0 = cv2.flip(img0, 1) # flip left-right - else: # IP camera - n = 0 - while True: - n += 1 - self.cap.grab() - if n % 30 == 0: # skip frames - ret_val, img0 = self.cap.retrieve() - if ret_val: - break - - # Print - assert ret_val, 'Camera Error %s' % self.pipe - img_path = 'webcam.jpg' - print('webcam %g: ' % self.count, end='') - - # Padded resize - img = letterbox(img0, new_shape=self.img_size)[0] - - # Normalize RGB - img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB - img = np.ascontiguousarray(img, dtype=np.float16 if self.half else np.float32) # uint8 to fp16/fp32 - img /= 255.0 # 0 - 255 to 0.0 - 1.0 - - return img_path, img, img0, None - - def __len__(self): - return 0 - - -class LoadStreams: # multiple IP or RTSP cameras - def __init__(self, sources='streams.txt', img_size=416, half=False): - self.mode = 'images' - self.img_size = img_size - self.half = half # half precision fp16 images - - if os.path.isfile(sources): - with open(sources, 'r') as f: - sources = [x.strip() for x in f.read().splitlines() if len(x.strip())] - else: - sources = [sources] - - n = len(sources) - self.imgs = [None] * n - self.sources = sources - for i, s in enumerate(sources): - # Start the thread to read frames from the video stream - print('%g/%g: %s... ' % (i + 1, n, s), end='') - cap = cv2.VideoCapture(0 if s == '0' else s) - assert cap.isOpened(), 'Failed to open %s' % s - w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - fps = cap.get(cv2.CAP_PROP_FPS) % 100 - _, self.imgs[i] = cap.read() # guarantee first frame - thread = Thread(target=self.update, args=([i, cap]), daemon=True) - print(' success (%gx%g at %.2f FPS).' % (w, h, fps)) - thread.start() - print('') # newline - - def update(self, index, cap): - # Read next stream frame in a daemon thread - n = 0 - while cap.isOpened(): - n += 1 - # _, self.imgs[index] = cap.read() - cap.grab() - if n == 4: # read every 4th frame - _, self.imgs[index] = cap.retrieve() - n = 0 - time.sleep(0.01) # wait time - - def __iter__(self): - self.count = -1 - return self - - def __next__(self): - self.count += 1 - img0 = self.imgs.copy() - if cv2.waitKey(1) == ord('q'): # q to quit - cv2.destroyAllWindows() - raise StopIteration - - # Letterbox - img = [letterbox(x, new_shape=self.img_size, interp=cv2.INTER_LINEAR)[0] for x in img0] - - # Stack - img = np.stack(img, 0) - - # Normalize RGB - img = img[:, :, :, ::-1].transpose(0, 3, 1, 2) # BGR to RGB - img = np.ascontiguousarray(img, dtype=np.float16 if self.half else np.float32) # uint8 to fp16/fp32 - img /= 255.0 # 0 - 255 to 0.0 - 1.0 - - return self.sources, img, img0, None - - def __len__(self): - return 0 # 1E12 frames = 32 streams at 30 FPS for 30 years - - -class LoadImagesAndLabels(Dataset): # for training/testing - def __init__(self, path, img_size=416, batch_size=16, augment=False, hyp=None, rect=True, image_weights=False, - cache_labels=False, cache_images=False): - path = str(Path(path)) # os-agnostic - with open(path, 'r') as f: - self.img_files = [x.replace('/', os.sep) for x in f.read().splitlines() # os-agnostic - if os.path.splitext(x)[-1].lower() in img_formats] - - n = len(self.img_files) - bi = np.floor(np.arange(n) / batch_size).astype(np.int) # batch index - nb = bi[-1] + 1 # number of batches - assert n > 0, 'No images found in %s' % path - - self.n = n - self.batch = bi # batch index of image - self.img_size = img_size - self.augment = augment - self.hyp = hyp - self.image_weights = image_weights - self.rect = False if image_weights else rect - - # Define labels - self.label_files = [x.replace('images', 'labels').replace(os.path.splitext(x)[-1], '.txt') - for x in self.img_files] - - # Rectangular Training https://github.com/ultralytics/yolov3/issues/232 - if self.rect: - # Read image shapes - sp = 'data' + os.sep + path.replace('.txt', '.shapes').split(os.sep)[-1] # shapefile path - try: - with open(sp, 'r') as f: # read existing shapefile - s = [x.split() for x in f.read().splitlines()] - assert len(s) == n, 'Shapefile out of sync' - except: - s = [exif_size(Image.open(f)) for f in tqdm(self.img_files, desc='Reading image shapes')] - np.savetxt(sp, s, fmt='%g') # overwrites existing (if any) - - # Sort by aspect ratio - s = np.array(s, dtype=np.float64) - ar = s[:, 1] / s[:, 0] # aspect ratio - i = ar.argsort() - self.img_files = [self.img_files[i] for i in i] - self.label_files = [self.label_files[i] for i in i] - self.shapes = s[i] - ar = ar[i] - - # Set training image shapes - shapes = [[1, 1]] * nb - for i in range(nb): - ari = ar[bi == i] - mini, maxi = ari.min(), ari.max() - if maxi < 1: - shapes[i] = [maxi, 1] - elif mini > 1: - shapes[i] = [1, 1 / mini] - - self.batch_shapes = np.ceil(np.array(shapes) * img_size / 32.).astype(np.int) * 32 - - # Preload labels (required for weighted CE training) - self.imgs = [None] * n - self.labels = [None] * n - if cache_labels or image_weights: # cache labels for faster training - self.labels = [np.zeros((0, 5))] * n - extract_bounding_boxes = False - create_datasubset = False - pbar = tqdm(self.label_files, desc='Reading labels') - nm, nf, ne, ns = 0, 0, 0, 0 # number missing, number found, number empty, number datasubset - for i, file in enumerate(pbar): - try: - with open(file, 'r') as f: - l = np.array([x.split() for x in f.read().splitlines()], dtype=np.float32) - except: - nm += 1 # print('missing labels for image %s' % self.img_files[i]) # file missing - continue - - if l.shape[0]: - assert l.shape[1] == 5, '> 5 label columns: %s' % file - assert (l >= 0).all(), 'negative labels: %s' % file - assert (l[:, 1:] <= 1).all(), 'non-normalized or out of bounds coordinate labels: %s' % file - self.labels[i] = l - nf += 1 # file found - - # Create subdataset (a smaller dataset) - if create_datasubset and ns < 1E4: - if ns == 0: - create_folder(path='./datasubset') - os.makedirs('./datasubset/images') - exclude_classes = 43 - if exclude_classes not in l[:, 0]: - ns += 1 - # shutil.copy(src=self.img_files[i], dst='./datasubset/images/') # copy image - with open('./datasubset/images.txt', 'a') as f: - f.write(self.img_files[i] + '\n') - - # Extract object detection boxes for a second stage classifier - if extract_bounding_boxes: - p = Path(self.img_files[i]) - img = cv2.imread(str(p)) - h, w = img.shape[:2] - for j, x in enumerate(l): - f = '%s%sclassifier%s%g_%g_%s' % (p.parent.parent, os.sep, os.sep, x[0], j, p.name) - if not os.path.exists(Path(f).parent): - os.makedirs(Path(f).parent) # make new output folder - - b = x[1:] * np.array([w, h, w, h]) # box - b[2:] = b[2:].max() # rectangle to square - b[2:] = b[2:] * 1.3 + 30 # pad - b = xywh2xyxy(b.reshape(-1, 4)).ravel().astype(np.int) - - b[[0, 2]] = np.clip(b[[0, 2]], 0, w) # clip boxes outside of image - b[[1, 3]] = np.clip(b[[1, 3]], 0, h) - assert cv2.imwrite(f, img[b[1]:b[3], b[0]:b[2]]), 'Failure extracting classifier boxes' - else: - ne += 1 # print('empty labels for image %s' % self.img_files[i]) # file empty - # os.system("rm '%s' '%s'" % (self.img_files[i], self.label_files[i])) # remove - - pbar.desc = 'Reading labels (%g found, %g missing, %g empty for %g images)' % (nf, nm, ne, n) - assert nf > 0, 'No labels found. Recommend correcting image and label paths.' - - # Cache images into memory for faster training (~5GB) - if cache_images and augment: # if training - for i in tqdm(range(min(len(self.img_files), 10000)), desc='Reading images'): # max 10k images - img_path = self.img_files[i] - img = cv2.imread(img_path) # BGR - assert img is not None, 'Image Not Found ' + img_path - r = self.img_size / max(img.shape) # size ratio - if self.augment and r < 1: # if training (NOT testing), downsize to inference shape - h, w = img.shape[:2] - img = cv2.resize(img, (int(w * r), int(h * r)), interpolation=cv2.INTER_LINEAR) # or INTER_AREA - self.imgs[i] = img - - # Detect corrupted images https://medium.com/joelthchao/programmatically-detect-corrupted-image-8c1b2006c3d3 - detect_corrupted_images = False - if detect_corrupted_images: - from skimage import io # conda install -c conda-forge scikit-image - for file in tqdm(self.img_files, desc='Detecting corrupted images'): - try: - _ = io.imread(file) - except: - print('Corrupted image detected: %s' % file) - - def __len__(self): - return len(self.img_files) - - # def __iter__(self): - # self.count = -1 - # print('ran dataset iter') - # #self.shuffled_vector = np.random.permutation(self.nF) if self.augment else np.arange(self.nF) - # return self - - def __getitem__(self, index): - if self.image_weights: - index = self.indices[index] - - img_path = self.img_files[index] - label_path = self.label_files[index] - - mosaic = True and self.augment # load 4 images at a time into a mosaic (only during training) - if mosaic: - # Load mosaic - img, labels = load_mosaic(self, index) - h, w = img.shape[:2] - ratio, pad = None, None - - else: - # Load image - img = load_image(self, index) - - # Letterbox - h, w = img.shape[:2] - shape = self.batch_shapes[self.batch[index]] if self.rect else self.img_size # final letterboxed shape - img, ratio, pad = letterbox(img, shape, auto=False, scaleup=self.augment) - - # Load labels - labels = [] - if os.path.isfile(label_path): - x = self.labels[index] - if x is None: # labels not preloaded - with open(label_path, 'r') as f: - x = np.array([x.split() for x in f.read().splitlines()], dtype=np.float32) - - if x.size > 0: - # Normalized xywh to pixel xyxy format - labels = x.copy() - labels[:, 1] = ratio[0] * w * (x[:, 1] - x[:, 3] / 2) + pad[0] # pad width - labels[:, 2] = ratio[1] * h * (x[:, 2] - x[:, 4] / 2) + pad[1] # pad height - labels[:, 3] = ratio[0] * w * (x[:, 1] + x[:, 3] / 2) + pad[0] - labels[:, 4] = ratio[1] * h * (x[:, 2] + x[:, 4] / 2) + pad[1] - - if self.augment: - # Augment colorspace - augment_hsv(img, hgain=self.hyp['hsv_h'], sgain=self.hyp['hsv_s'], vgain=self.hyp['hsv_v']) - - # Augment imagespace - g = 0.0 if mosaic else 1.0 # do not augment mosaics - hyp = self.hyp - img, labels = random_affine(img, labels, - degrees=hyp['degrees'] * g, - translate=hyp['translate'] * g, - scale=hyp['scale'] * g, - shear=hyp['shear'] * g) - - # Apply cutouts - # if random.random() < 0.9: - # labels = cutout(img, labels) - - nL = len(labels) # number of labels - if nL: - # convert xyxy to xywh - labels[:, 1:5] = xyxy2xywh(labels[:, 1:5]) - - # Normalize coordinates 0 - 1 - labels[:, [2, 4]] /= img.shape[0] # height - labels[:, [1, 3]] /= img.shape[1] # width - - if self.augment: - # random left-right flip - lr_flip = True - if lr_flip and random.random() < 0.5: - img = np.fliplr(img) - if nL: - labels[:, 1] = 1 - labels[:, 1] - - # random up-down flip - ud_flip = False - if ud_flip and random.random() < 0.5: - img = np.flipud(img) - if nL: - labels[:, 2] = 1 - labels[:, 2] - - labels_out = torch.zeros((nL, 6)) - if nL: - labels_out[:, 1:] = torch.from_numpy(labels) - - # Normalize - img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 - img = np.ascontiguousarray(img, dtype=np.float32) # uint8 to float32 - img /= 255.0 # 0 - 255 to 0.0 - 1.0 - - return torch.from_numpy(img), labels_out, img_path, ((h, w), (ratio, pad)) - - @staticmethod - def collate_fn(batch): - img, label, path, shapes = list(zip(*batch)) # transposed - for i, l in enumerate(label): - l[:, 0] = i # add target image index for build_targets() - return torch.stack(img, 0), torch.cat(label, 0), path, shapes - - -def load_image(self, index): - # loads 1 image from dataset - img = self.imgs[index] - if img is None: - img_path = self.img_files[index] - img = cv2.imread(img_path) # BGR - assert img is not None, 'Image Not Found ' + img_path - r = self.img_size / max(img.shape) # size ratio - if self.augment: # if training (NOT testing), downsize to inference shape - h, w = img.shape[:2] - img = cv2.resize(img, (int(w * r), int(h * r)), interpolation=cv2.INTER_LINEAR) # _LINEAR fastest - return img - - -def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5): - x = (np.random.uniform(-1, 1, 3) * np.array([hgain, sgain, vgain]) + 1).astype(np.float32) # random gains - img_hsv = (cv2.cvtColor(img, cv2.COLOR_BGR2HSV) * x.reshape((1, 1, 3))).clip(None, 255).astype(np.uint8) - cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed - - -# def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5): # original version -# # SV augmentation by 50% -# img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # hue, sat, val -# -# S = img_hsv[:, :, 1].astype(np.float32) # saturation -# V = img_hsv[:, :, 2].astype(np.float32) # value -# -# a = random.uniform(-1, 1) * sgain + 1 -# b = random.uniform(-1, 1) * vgain + 1 -# S *= a -# V *= b -# -# img_hsv[:, :, 1] = S if a < 1 else S.clip(None, 255) -# img_hsv[:, :, 2] = V if b < 1 else V.clip(None, 255) -# cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed - - -def load_mosaic(self, index): - # loads images in a mosaic - - labels4 = [] - s = self.img_size - xc, yc = [int(random.uniform(s * 0.5, s * 1.5)) for _ in range(2)] # mosaic center x, y - img4 = np.zeros((s * 2, s * 2, 3), dtype=np.uint8) + 128 # base image with 4 tiles - indices = [index] + [random.randint(0, len(self.labels) - 1) for _ in range(3)] # 3 additional image indices - for i, index in enumerate(indices): - # Load image - img = load_image(self, index) - h, w, _ = img.shape - - # place img in img4 - if i == 0: # top left - x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) - x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) - elif i == 1: # top right - x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc - x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h - elif i == 2: # bottom left - x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) - x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, max(xc, w), min(y2a - y1a, h) - elif i == 3: # bottom right - x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) - x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) - - img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] - padw = x1a - x1b - padh = y1a - y1b - - # Load labels - label_path = self.label_files[index] - if os.path.isfile(label_path): - x = self.labels[index] - if x is None: # labels not preloaded - with open(label_path, 'r') as f: - x = np.array([x.split() for x in f.read().splitlines()], dtype=np.float32) - - if x.size > 0: - # Normalized xywh to pixel xyxy format - labels = x.copy() - labels[:, 1] = w * (x[:, 1] - x[:, 3] / 2) + padw - labels[:, 2] = h * (x[:, 2] - x[:, 4] / 2) + padh - labels[:, 3] = w * (x[:, 1] + x[:, 3] / 2) + padw - labels[:, 4] = h * (x[:, 2] + x[:, 4] / 2) + padh - else: - labels = np.zeros((0, 5), dtype=np.float32) - labels4.append(labels) - - if len(labels4): - labels4 = np.concatenate(labels4, 0) - - # hyp = self.hyp - # img4, labels4 = random_affine(img4, labels4, - # degrees=hyp['degrees'], - # translate=hyp['translate'], - # scale=hyp['scale'], - # shear=hyp['shear']) - - # Center crop - a = s // 2 - img4 = img4[a:a + s, a:a + s] - if len(labels4): - labels4[:, 1:] -= a - - return img4, labels4 - - -def letterbox(img, new_shape=(416, 416), color=(128, 128, 128), - auto=True, scaleFill=False, scaleup=True, interp=cv2.INTER_AREA): - # Resize image to a 32-pixel-multiple rectangle https://github.com/ultralytics/yolov3/issues/232 - shape = img.shape[:2] # current shape [height, width] - if isinstance(new_shape, int): - new_shape = (new_shape, new_shape) - - # Scale ratio (new / old) - r = max(new_shape) / max(shape) - if not scaleup: # only scale down, do not scale up (for better test mAP) - r = min(r, 1.0) - - # Compute padding - ratio = r, r # width, height ratios - new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) - dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding - if auto: # minimum rectangle - dw, dh = np.mod(dw, 32), np.mod(dh, 32) # wh padding - elif scaleFill: # stretch - dw, dh = 0.0, 0.0 - new_unpad = new_shape - ratio = new_shape[0] / shape[1], new_shape[1] / shape[0] # width, height ratios - - dw /= 2 # divide padding into 2 sides - dh /= 2 - - if shape[::-1] != new_unpad: # resize - img = cv2.resize(img, new_unpad, interpolation=interp) # INTER_AREA is better, INTER_LINEAR is faster - top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) - left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) - img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # add border - return img, ratio, (dw, dh) - - -def random_affine(img, targets=(), degrees=10, translate=.1, scale=.1, shear=10): - # torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-10, 10)) - # https://medium.com/uruvideo/dataset-augmentation-with-random-homographies-a8f4b44830d4 - - if targets is None: # targets = [cls, xyxy] - targets = [] - border = 0 # width of added border (optional) - height = img.shape[0] + border * 2 - width = img.shape[1] + border * 2 - - # Rotation and Scale - R = np.eye(3) - a = random.uniform(-degrees, degrees) - # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations - s = random.uniform(1 - scale, 1 + scale) - R[:2] = cv2.getRotationMatrix2D(angle=a, center=(img.shape[1] / 2, img.shape[0] / 2), scale=s) - - # Translation - T = np.eye(3) - T[0, 2] = random.uniform(-translate, translate) * img.shape[0] + border # x translation (pixels) - T[1, 2] = random.uniform(-translate, translate) * img.shape[1] + border # y translation (pixels) - - # Shear - S = np.eye(3) - S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # x shear (deg) - S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # y shear (deg) - - # Combined rotation matrix - M = S @ T @ R # ORDER IS IMPORTANT HERE!! - changed = (border != 0) or (M != np.eye(3)).any() - if changed: - img = cv2.warpAffine(img, M[:2], dsize=(width, height), flags=cv2.INTER_AREA, borderValue=(128, 128, 128)) - - # Transform label coordinates - n = len(targets) - if n: - # warp points - xy = np.ones((n * 4, 3)) - xy[:, :2] = targets[:, [1, 2, 3, 4, 1, 4, 3, 2]].reshape(n * 4, 2) # x1y1, x2y2, x1y2, x2y1 - xy = (xy @ M.T)[:, :2].reshape(n, 8) - - # create new boxes - x = xy[:, [0, 2, 4, 6]] - y = xy[:, [1, 3, 5, 7]] - xy = np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T - - # # apply angle-based reduction of bounding boxes - # radians = a * math.pi / 180 - # reduction = max(abs(math.sin(radians)), abs(math.cos(radians))) ** 0.5 - # x = (xy[:, 2] + xy[:, 0]) / 2 - # y = (xy[:, 3] + xy[:, 1]) / 2 - # w = (xy[:, 2] - xy[:, 0]) * reduction - # h = (xy[:, 3] - xy[:, 1]) * reduction - # xy = np.concatenate((x - w / 2, y - h / 2, x + w / 2, y + h / 2)).reshape(4, n).T - - # reject warped points outside of image - xy[:, [0, 2]] = xy[:, [0, 2]].clip(0, width) - xy[:, [1, 3]] = xy[:, [1, 3]].clip(0, height) - w = xy[:, 2] - xy[:, 0] - h = xy[:, 3] - xy[:, 1] - area = w * h - area0 = (targets[:, 3] - targets[:, 1]) * (targets[:, 4] - targets[:, 2]) - ar = np.maximum(w / (h + 1e-16), h / (w + 1e-16)) - i = (w > 4) & (h > 4) & (area / (area0 + 1e-16) > 0.1) & (ar < 10) - - targets = targets[i] - targets[:, 1:5] = xy[i] - - return img, targets - - -def cutout(image, labels): - # https://arxiv.org/abs/1708.04552 - # https://github.com/hysts/pytorch_cutout/blob/master/dataloader.py - # https://towardsdatascience.com/when-conventional-wisdom-fails-revisiting-data-augmentation-for-self-driving-cars-4831998c5509 - h, w = image.shape[:2] - - def bbox_ioa(box1, box2, x1y1x2y2=True): - # Returns the intersection over box2 area given box1, box2. box1 is 4, box2 is nx4. boxes are x1y1x2y2 - box2 = box2.transpose() - - # Get the coordinates of bounding boxes - b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] - b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] - - # Intersection area - inter_area = (np.minimum(b1_x2, b2_x2) - np.maximum(b1_x1, b2_x1)).clip(0) * \ - (np.minimum(b1_y2, b2_y2) - np.maximum(b1_y1, b2_y1)).clip(0) - - # box2 area - box2_area = (b2_x2 - b2_x1) * (b2_y2 - b2_y1) + 1e-16 - - # Intersection over box2 area - return inter_area / box2_area - - # create random masks - scales = [0.5] * 1 # + [0.25] * 4 + [0.125] * 16 + [0.0625] * 64 + [0.03125] * 256 # image size fraction - for s in scales: - mask_h = random.randint(1, int(h * s)) - mask_w = random.randint(1, int(w * s)) - - # box - xmin = max(0, random.randint(0, w) - mask_w // 2) - ymin = max(0, random.randint(0, h) - mask_h // 2) - xmax = min(w, xmin + mask_w) - ymax = min(h, ymin + mask_h) - - # apply random color mask - mask_color = [random.randint(0, 255) for _ in range(3)] - image[ymin:ymax, xmin:xmax] = mask_color - - # return unobscured labels - if len(labels) and s > 0.03: - box = np.array([xmin, ymin, xmax, ymax], dtype=np.float32) - ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area - labels = labels[ioa < 0.90] # remove >90% obscured labels - - return labels - - -def reduce_img_size(path='../data/sm4/images', img_size=1024): # from utils.datasets import *; reduce_img_size() - # creates a new ./images_reduced folder with reduced size images of maximum size img_size - path_new = path + '_reduced' # reduced images path - create_folder(path_new) - for f in tqdm(glob.glob('%s/*.*' % path)): - try: - img = cv2.imread(f) - h, w = img.shape[:2] - r = img_size / max(h, w) # size ratio - if r < 1.0: - img = cv2.resize(img, (int(w * r), int(h * r)), interpolation=cv2.INTER_AREA) # _LINEAR fastest - fnew = f.replace(path, path_new) # .replace(Path(f).suffix, '.jpg') - cv2.imwrite(fnew, img) - except: - print('WARNING: image failure %s' % f) - - -def convert_images2bmp(): - # cv2.imread() jpg at 230 img/s, *.bmp at 400 img/s - for path in ['../coco/images/val2014/', '../coco/images/train2014/']: - folder = os.sep + Path(path).name - output = path.replace(folder, folder + 'bmp') - create_folder(output) - - for f in tqdm(glob.glob('%s*.jpg' % path)): - save_name = f.replace('.jpg', '.bmp').replace(folder, folder + 'bmp') - cv2.imwrite(save_name, cv2.imread(f)) - - for label_path in ['../coco/trainvalno5k.txt', '../coco/5k.txt']: - with open(label_path, 'r') as file: - lines = file.read() - lines = lines.replace('2014/', '2014bmp/').replace('.jpg', '.bmp').replace( - '/Users/glennjocher/PycharmProjects/', '../') - with open(label_path.replace('5k', '5k_bmp'), 'w') as file: - file.write(lines) - - -def imagelist2folder(path='data/coco_64img.txt'): # from utils.datasets import *; imagelist2folder() - # Copies all the images in a text file (list of images) into a folder - create_folder(path[:-4]) - with open(path, 'r') as f: - for line in f.read().splitlines(): - os.system('cp "%s" %s' % (line, path[:-4])) - print(line) - - -def create_folder(path='./new_folder'): - # Create folder - if os.path.exists(path): - shutil.rmtree(path) # delete output folder - os.makedirs(path) # make new output folder diff --git a/utils/docker/Dockerfile b/utils/docker/Dockerfile new file mode 100644 index 0000000000..cccc71d129 --- /dev/null +++ b/utils/docker/Dockerfile @@ -0,0 +1,75 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Builds ultralytics/yolov5:latest image on DockerHub https://hub.docker.com/r/ultralytics/yolov3 +# Image is CUDA-optimized for YOLOv5 single/multi-GPU training and inference + +# Start FROM PyTorch image https://hub.docker.com/r/pytorch/pytorch +FROM pytorch/pytorch:2.8.0-cuda12.8-cudnn9-runtime + +# Downloads to user config dir +ADD https://ultralytics.com/assets/Arial.ttf https://ultralytics.com/assets/Arial.Unicode.ttf /root/.config/Ultralytics/ + +# Install linux packages +ENV DEBIAN_FRONTEND noninteractive +RUN apt update +RUN TZ=Etc/UTC apt install -y tzdata +RUN apt install --no-install-recommends -y gcc git zip curl htop libgl1 libglib2.0-0 libpython3-dev gnupg +# RUN alias python=python3 + +# Security updates +# https://security.snyk.io/vuln/SNYK-UBUNTU1804-OPENSSL-3314796 +RUN apt upgrade --no-install-recommends -y openssl + +# Create working directory +RUN rm -rf /usr/src/app && mkdir -p /usr/src/app +WORKDIR /usr/src/app + +# Copy contents +# COPY . /usr/src/app (issues as not a .git directory) +RUN git clone https://github.com/ultralytics/yolov5 /usr/src/app + +# Install pip packages +COPY requirements.txt . +RUN python3 -m pip install --upgrade pip wheel +RUN pip install --no-cache -r requirements.txt albumentations comet gsutil notebook \ + coremltools onnx onnx-simplifier onnxruntime 'openvino-dev>=2023.0' + # tensorflow tensorflowjs \ + +# Set environment variables +ENV OMP_NUM_THREADS=1 + +# Cleanup +ENV DEBIAN_FRONTEND teletype + + +# Usage Examples ------------------------------------------------------------------------------------------------------- + +# Build and Push +# t=ultralytics/yolov5:latest && sudo docker build -f utils/docker/Dockerfile -t $t . && sudo docker push $t + +# Pull and Run +# t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all $t + +# Pull and Run with local directory access +# t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/datasets:/usr/src/datasets $t + +# Kill all +# sudo docker kill $(sudo docker ps -q) + +# Kill all image-based +# sudo docker kill $(sudo docker ps -qa --filter ancestor=ultralytics/yolov5:latest) + +# DockerHub tag update +# t=ultralytics/yolov5:latest tnew=ultralytics/yolov5:v6.2 && sudo docker pull $t && sudo docker tag $t $tnew && sudo docker push $tnew + +# Clean up +# sudo docker system prune -a --volumes + +# Update Ubuntu drivers +# https://www.maketecheasier.com/install-nvidia-drivers-ubuntu/ + +# DDP test +# python -m torch.distributed.run --nproc_per_node 2 --master_port 1 train.py --epochs 3 + +# GCP VM from Image +# docker.io/ultralytics/yolov5:latest diff --git a/utils/docker/Dockerfile-arm64 b/utils/docker/Dockerfile-arm64 new file mode 100644 index 0000000000..7aaae00e70 --- /dev/null +++ b/utils/docker/Dockerfile-arm64 @@ -0,0 +1,42 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Builds ultralytics/yolov5:latest-arm64 image on DockerHub https://hub.docker.com/r/ultralytics/yolov3 +# Image is aarch64-compatible for Apple M1 and other ARM architectures i.e. Jetson Nano and Raspberry Pi + +# Start FROM Ubuntu image https://hub.docker.com/_/ubuntu +FROM arm64v8/ubuntu:22.10 + +# Downloads to user config dir +ADD https://ultralytics.com/assets/Arial.ttf https://ultralytics.com/assets/Arial.Unicode.ttf /root/.config/Ultralytics/ + +# Install linux packages +ENV DEBIAN_FRONTEND noninteractive +RUN apt update +RUN TZ=Etc/UTC apt install -y tzdata +RUN apt install --no-install-recommends -y python3-pip git zip curl htop gcc libgl1 libglib2.0-0 libpython3-dev +# RUN alias python=python3 + +# Install pip packages +COPY requirements.txt . +RUN python3 -m pip install --upgrade pip wheel +RUN pip install --no-cache -r requirements.txt albumentations gsutil notebook \ + coremltools onnx onnxruntime + # tensorflow-aarch64 tensorflowjs \ + +# Create working directory +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +# Copy contents +# COPY . /usr/src/app (issues as not a .git directory) +RUN git clone https://github.com/ultralytics/yolov5 /usr/src/app +ENV DEBIAN_FRONTEND teletype + + +# Usage Examples ------------------------------------------------------------------------------------------------------- + +# Build and Push +# t=ultralytics/yolov5:latest-arm64 && sudo docker build --platform linux/arm64 -f utils/docker/Dockerfile-arm64 -t $t . && sudo docker push $t + +# Pull and Run +# t=ultralytics/yolov5:latest-arm64 && sudo docker pull $t && sudo docker run -it --ipc=host -v "$(pwd)"/datasets:/usr/src/datasets $t diff --git a/utils/docker/Dockerfile-cpu b/utils/docker/Dockerfile-cpu new file mode 100644 index 0000000000..c7f8cbe7b2 --- /dev/null +++ b/utils/docker/Dockerfile-cpu @@ -0,0 +1,44 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# Builds ultralytics/yolov5:latest-cpu image on DockerHub https://hub.docker.com/r/ultralytics/yolov3 +# Image is CPU-optimized for ONNX, OpenVINO and PyTorch YOLOv5 deployments + +# Start FROM Ubuntu image https://hub.docker.com/_/ubuntu +FROM ubuntu:23.10 + +# Downloads to user config dir +ADD https://ultralytics.com/assets/Arial.ttf https://ultralytics.com/assets/Arial.Unicode.ttf /root/.config/Ultralytics/ + +# Install linux packages +# g++ required to build 'tflite_support' and 'lap' packages, libusb-1.0-0 required for 'tflite_support' package +RUN apt update \ + && apt install --no-install-recommends -y python3-pip git zip curl htop libgl1 libglib2.0-0 libpython3-dev gnupg g++ libusb-1.0-0 +# RUN alias python=python3 + +# Remove python3.11/EXTERNALLY-MANAGED or use 'pip install --break-system-packages' avoid 'externally-managed-environment' Ubuntu nightly error +RUN rm -rf /usr/lib/python3.11/EXTERNALLY-MANAGED + +# Install pip packages +COPY requirements.txt . +RUN python3 -m pip install --upgrade pip wheel +RUN pip install --no-cache -r requirements.txt albumentations gsutil notebook \ + coremltools onnx onnx-simplifier onnxruntime 'openvino-dev>=2023.0' \ + # tensorflow tensorflowjs \ + --extra-index-url https://download.pytorch.org/whl/cpu + +# Create working directory +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +# Copy contents +# COPY . /usr/src/app (issues as not a .git directory) +RUN git clone https://github.com/ultralytics/yolov5 /usr/src/app + + +# Usage Examples ------------------------------------------------------------------------------------------------------- + +# Build and Push +# t=ultralytics/yolov5:latest-cpu && sudo docker build -f utils/docker/Dockerfile-cpu -t $t . && sudo docker push $t + +# Pull and Run +# t=ultralytics/yolov5:latest-cpu && sudo docker pull $t && sudo docker run -it --ipc=host -v "$(pwd)"/datasets:/usr/src/datasets $t diff --git a/utils/downloads.py b/utils/downloads.py new file mode 100644 index 0000000000..54d02dcaee --- /dev/null +++ b/utils/downloads.py @@ -0,0 +1,128 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Download utils.""" + +import logging +import subprocess +import urllib +from pathlib import Path + +import requests +import torch + + +def is_url(url, check=True): + """Determines if a string is a valid URL and optionally checks its existence online.""" + try: + url = str(url) + result = urllib.parse.urlparse(url) + assert all([result.scheme, result.netloc]) # check if is url + return (urllib.request.urlopen(url).getcode() == 200) if check else True # check if exists online + except (AssertionError, urllib.request.HTTPError): + return False + + +def gsutil_getsize(url=""): + """Returns the size of a file at a 'gs://' URL using gsutil du command; 0 if file not found or command fails.""" + output = subprocess.check_output(["gsutil", "du", url], shell=True, encoding="utf-8") + return int(output.split()[0]) if output else 0 + + +def url_getsize(url="https://ultralytics.com/images/bus.jpg"): + """Fetches file size in bytes from a URL using an HTTP HEAD request; defaults to -1 if not found.""" + response = requests.head(url, allow_redirects=True) + return int(response.headers.get("content-length", -1)) + + +def curl_download(url, filename, *, silent: bool = False) -> bool: + """Download a file from a url to a filename using curl.""" + silent_option = "sS" if silent else "" # silent + proc = subprocess.run( + [ + "curl", + "-#", + f"-{silent_option}L", + url, + "--output", + filename, + "--retry", + "9", + "-C", + "-", + ] + ) + return proc.returncode == 0 + + +def safe_download(file, url, url2=None, min_bytes=1e0, error_msg=""): + """Downloads a file from 'url' or 'url2' to 'file', ensuring size > 'min_bytes'; removes incomplete downloads.""" + from utils.general import LOGGER + + file = Path(file) + assert_msg = f"Downloaded file '{file}' does not exist or size is < min_bytes={min_bytes}" + try: # url1 + LOGGER.info(f"Downloading {url} to {file}...") + torch.hub.download_url_to_file(url, str(file), progress=LOGGER.level <= logging.INFO) + assert file.exists() and file.stat().st_size > min_bytes, assert_msg # check + except Exception as e: # url2 + if file.exists(): + file.unlink() # remove partial downloads + LOGGER.info(f"ERROR: {e}\nRe-attempting {url2 or url} to {file}...") + # curl download, retry and resume on fail + curl_download(url2 or url, file) + finally: + if not file.exists() or file.stat().st_size < min_bytes: # check + if file.exists(): + file.unlink() # remove partial downloads + LOGGER.info(f"ERROR: {assert_msg}\n{error_msg}") + LOGGER.info("") + + +def attempt_download(file, repo="ultralytics/yolov5", release="v7.0"): + """Attempts to download a file from a specified URL or GitHub release, ensuring file integrity with a minimum size + check. + """ + from utils.general import LOGGER + + def github_assets(repository, version="latest"): + """Returns GitHub tag and assets for a given repository and version from the GitHub API.""" + if version != "latest": + version = f"tags/{version}" # i.e. tags/v7.0 + response = requests.get(f"https://api.github.com/repos/{repository}/releases/{version}").json() # github api + return response["tag_name"], [x["name"] for x in response["assets"]] # tag, assets + + file = Path(str(file).strip().replace("'", "")) + if not file.exists(): + # URL specified + name = Path(urllib.parse.unquote(str(file))).name # decode '%2F' to '/' etc. + if str(file).startswith(("http:/", "https:/")): # download + url = str(file).replace(":/", "://") # Pathlib turns :// -> :/ + file = name.split("?")[0] # parse authentication https://url.com/file.txt?auth... + if Path(file).is_file(): + LOGGER.info(f"Found {url} locally at {file}") # file already exists + else: + safe_download(file=file, url=url, min_bytes=1e5) + return file + + # GitHub assets + assets = [f"yolov5{size}{suffix}.pt" for size in "nsmlx" for suffix in ("", "6", "-cls", "-seg")] # default + try: + tag, assets = github_assets(repo, release) + except Exception: + try: + tag, assets = github_assets(repo) # latest release + except Exception: + try: + tag = subprocess.check_output("git tag", shell=True, stderr=subprocess.STDOUT).decode().split()[-1] + except Exception: + tag = release + + if name in assets: + file.parent.mkdir(parents=True, exist_ok=True) # make parent dir (if required) + safe_download( + file, + url=f"https://github.com/{repo}/releases/download/{tag}/{name}", + min_bytes=1e5, + error_msg=f"{file} missing, try downloading from https://github.com/{repo}/releases/{tag}", + ) + + return str(file) diff --git a/utils/flask_rest_api/README.md b/utils/flask_rest_api/README.md new file mode 100644 index 0000000000..cad02d7677 --- /dev/null +++ b/utils/flask_rest_api/README.md @@ -0,0 +1,96 @@ +Ultralytics logo + +# Flask REST API Example for YOLO Models + +[Representational State Transfer (REST)](https://en.wikipedia.org/wiki/Representational_state_transfer) [Application Programming Interfaces (APIs)](https://developer.mozilla.org/en-US/docs/Web/API) are a standard way to expose [Machine Learning (ML)](https://www.ultralytics.com/glossary/machine-learning-ml) models, allowing other services or applications to interact with them over a network. This directory provides an example REST API built using the [Flask](https://palletsprojects.com/projects/flask/) microframework to serve predictions from an [Ultralytics YOLOv3](https://docs.ultralytics.com/models/yolov3/) model, potentially loaded via [PyTorch Hub](https://pytorch.org/hub/) or other standard PyTorch methods. + +Deploying models via APIs is a crucial step in [MLOps](https://www.ultralytics.com/glossary/machine-learning-operations-mlops) and enables integration into larger systems. You can explore various [model deployment options](https://docs.ultralytics.com/guides/model-deployment-options/) for different scenarios. + +## 🔧 Requirements + +Ensure you have the necessary Python packages installed. The primary requirement is Flask. + +Install Flask using pip: + +```shell +pip install Flask torch torchvision +``` + +_Note: `torch` and `torchvision` are required for loading and running PyTorch-based models like YOLOv3._ + +## ▶️ Run the API + +Once Flask and dependencies are installed, you can start the API server. + +Execute the Python script: + +```shell +python restapi.py --port 5000 +``` + +The API server will start listening on the specified port (default is 5000). + +## 🚀 Make a Prediction Request + +You can send prediction requests to the running API using tools like [`curl`](https://curl.se/) or scripting languages. + +Send a POST request with an image file (`zidane.jpg` in this example) to the `/v1/object-detection/yolov3` endpoint: + +```shell +curl -X POST -F image=@zidane.jpg 'http://localhost:5000/v1/object-detection/yolov3' +``` + +_Ensure `zidane.jpg` (or your test image) is present in the directory where you run the `curl` command._ + +## 📄 Understand the Response + +The API processes the image and returns the [object detection](https://www.ultralytics.com/glossary/object-detection) results in [JSON](https://www.ultralytics.com/glossary/json) format. Each object detected includes its class ID, confidence score, bounding box coordinates (normalized), and class name. + +Example JSON response: + +```json +[ + { + "class": 0, + "confidence": 0.8900438547, + "height": 0.9318675399, + "name": "person", + "width": 0.3264600933, + "xcenter": 0.7438579798, + "ycenter": 0.5207948685 + }, + { + "class": 0, + "confidence": 0.8440024257, + "height": 0.7155083418, + "name": "person", + "width": 0.6546785235, + "xcenter": 0.427829951, + "ycenter": 0.6334488392 + }, + { + "class": 27, + "confidence": 0.3771208823, + "height": 0.3902671337, + "name": "tie", + "width": 0.0696444362, + "xcenter": 0.3675483763, + "ycenter": 0.7991207838 + }, + { + "class": 27, + "confidence": 0.3527112305, + "height": 0.1540903747, + "name": "tie", + "width": 0.0336618312, + "xcenter": 0.7814827561, + "ycenter": 0.5065554976 + } +] +``` + +An example Python script (`example_request.py`) demonstrating how to send requests using the popular [requests](https://requests.readthedocs.io/en/latest/) library is also included in this directory. + +## 🤝 Contributing + +Contributions to enhance this example or add support for other Ultralytics models are welcome! Please see the main Ultralytics [CONTRIBUTING](https://docs.ultralytics.com/help/contributing/) guide for more information on how to get involved. diff --git a/utils/flask_rest_api/example_request.py b/utils/flask_rest_api/example_request.py new file mode 100644 index 0000000000..db88e80407 --- /dev/null +++ b/utils/flask_rest_api/example_request.py @@ -0,0 +1,17 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Perform test request.""" + +import pprint + +import requests + +DETECTION_URL = "http://localhost:5000/v1/object-detection/yolov5s" +IMAGE = "zidane.jpg" + +# Read image +with open(IMAGE, "rb") as f: + image_data = f.read() + +response = requests.post(DETECTION_URL, files={"image": image_data}).json() + +pprint.pprint(response) diff --git a/utils/flask_rest_api/restapi.py b/utils/flask_rest_api/restapi.py new file mode 100644 index 0000000000..fa8af4833c --- /dev/null +++ b/utils/flask_rest_api/restapi.py @@ -0,0 +1,49 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Run a Flask REST API exposing one or more YOLOv5s models.""" + +import argparse +import io + +import torch +from flask import Flask, request +from PIL import Image + +app = Flask(__name__) +models = {} + +DETECTION_URL = "/v1/object-detection/" + + +@app.route(DETECTION_URL, methods=["POST"]) +def predict(model): + """Predicts objects in an image using YOLOv5s models exposed via Flask REST API; expects 'image' file in POST + request. + """ + if request.method != "POST": + return + + if request.files.get("image"): + # Method 1 + # with request.files["image"] as f: + # im = Image.open(io.BytesIO(f.read())) + + # Method 2 + im_file = request.files["image"] + im_bytes = im_file.read() + im = Image.open(io.BytesIO(im_bytes)) + + if model in models: + results = models[model](im, size=640) # reduce size=320 for faster inference + return results.pandas().xyxy[0].to_json(orient="records") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Flask API exposing YOLOv3 model") + parser.add_argument("--port", default=5000, type=int, help="port number") + parser.add_argument("--model", nargs="+", default=["yolov5s"], help="model(s) to run, i.e. --model yolov5n yolov5s") + opt = parser.parse_args() + + for m in opt.model: + models[m] = torch.hub.load("ultralytics/yolov5", m, force_reload=True, skip_validation=True) + + app.run(host="0.0.0.0", port=opt.port) # debug=True causes Restarting with stat diff --git a/utils/gcp.sh b/utils/gcp.sh deleted file mode 100755 index fad46c543f..0000000000 --- a/utils/gcp.sh +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env bash - -# New VM -rm -rf sample_data yolov3 darknet apex coco cocoapi knife knifec -git clone https://github.com/ultralytics/yolov3 -# git clone https://github.com/AlexeyAB/darknet && cd darknet && make GPU=1 CUDNN=1 CUDNN_HALF=1 OPENCV=0 && wget -c https://pjreddie.com/media/files/darknet53.conv.74 && cd .. -git clone https://github.com/NVIDIA/apex && cd apex && pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . --user && cd .. && rm -rf apex -sudo conda install -y -c conda-forge scikit-image pycocotools # tensorboard -python3 -c " -from yolov3.utils.google_utils import gdrive_download -gdrive_download('1HaXkef9z6y5l4vUnCYgdmEAj61c6bfWO','coco.zip')" -sudo shutdown - -# Re-clone -rm -rf yolov3 # Warning: remove existing -git clone https://github.com/ultralytics/yolov3 && cd yolov3 # master -# git clone -b test --depth 1 https://github.com/ultralytics/yolov3 test # branch -python3 train.py --img-size 320 --weights weights/darknet53.conv.74 --epochs 27 --batch-size 64 --accumulate 1 - -# Train -python3 train.py - -# Resume -python3 train.py --resume - -# Detect -python3 detect.py - -# Test -python3 test.py --save-json - -# Evolve -export t=ultralytics/yolov3:v0 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t -clear -sleep 200 -while true -do - python3 train.py --data data/coco.data --img-size 416 --epochs 27 --batch-size 32 --accumulate 2 --evolve --weights '' --prebias --bucket yolov4/416_coco_27e --device 7 -done - -# Git pull -git pull https://github.com/ultralytics/yolov3 # master -git pull https://github.com/ultralytics/yolov3 test # branch - -# Test Darknet training -python3 test.py --weights ../darknet/backup/yolov3.backup - -# Copy last.pt TO bucket -gsutil cp yolov3/weights/last1gpu.pt gs://ultralytics - -# Copy last.pt FROM bucket -gsutil cp gs://ultralytics/last.pt yolov3/weights/last.pt -wget https://storage.googleapis.com/ultralytics/yolov3/last_v1_0.pt -O weights/last_v1_0.pt -wget https://storage.googleapis.com/ultralytics/yolov3/best_v1_0.pt -O weights/best_v1_0.pt - -# Reproduce tutorials -rm results*.txt # WARNING: removes existing results -python3 train.py --nosave --data data/coco_1img.data && mv results.txt results0r_1img.txt -python3 train.py --nosave --data data/coco_10img.data && mv results.txt results0r_10img.txt -python3 train.py --nosave --data data/coco_100img.data && mv results.txt results0r_100img.txt -# python3 train.py --nosave --data data/coco_100img.data --transfer && mv results.txt results3_100imgTL.txt -python3 -c "from utils import utils; utils.plot_results()" -# gsutil cp results*.txt gs://ultralytics -gsutil cp results.png gs://ultralytics -sudo shutdown - -# Reproduce mAP -python3 test.py --save-json --img-size 608 -python3 test.py --save-json --img-size 416 -python3 test.py --save-json --img-size 320 -sudo shutdown - -# Benchmark script -git clone https://github.com/ultralytics/yolov3 # clone our repo -git clone https://github.com/NVIDIA/apex && cd apex && pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" . --user && cd .. && rm -rf apex # install nvidia apex -python3 -c "from yolov3.utils.google_utils import gdrive_download; gdrive_download('1HaXkef9z6y5l4vUnCYgdmEAj61c6bfWO','coco.zip')" # download coco dataset (20GB) -cd yolov3 && clear && python3 train.py --epochs 1 # run benchmark (~30 min) - -# Unit tests -python3 detect.py # detect 2 persons, 1 tie -python3 test.py --data data/coco_32img.data # test mAP = 0.8 -python3 train.py --data data/coco_32img.data --epochs 5 --nosave # train 5 epochs -python3 train.py --data data/coco_1cls.data --epochs 5 --nosave # train 5 epochs -python3 train.py --data data/coco_1img.data --epochs 5 --nosave # train 5 epochs - -# AlexyAB Darknet -gsutil cp -r gs://sm6/supermarket2 . # dataset from bucket -rm -rf darknet && git clone https://github.com/AlexeyAB/darknet && cd darknet && wget -c https://pjreddie.com/media/files/darknet53.conv.74 # sudo apt install libopencv-dev && make -./darknet detector calc_anchors data/coco_img64.data -num_of_clusters 9 -width 320 -height 320 # kmeans anchor calculation -./darknet detector train ../supermarket2/supermarket2.data ../yolo_v3_spp_pan_scale.cfg darknet53.conv.74 -map -dont_show # train spp -./darknet detector train ../yolov3/data/coco.data ../yolov3-spp.cfg darknet53.conv.74 -map -dont_show # train spp coco - -#Docker -sudo docker kill "$(sudo docker ps -q)" -sudo docker pull ultralytics/yolov3:v0 -sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco ultralytics/yolov3:v0 - - -export t=ultralytics/yolov3:v70 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 70 --device 0 --multi -export t=ultralytics/yolov3:v0 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 71 --device 0 --multi --img-weights - -export t=ultralytics/yolov3:v73 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 73 --device 5 --cfg cfg/yolov3s.cfg -export t=ultralytics/yolov3:v74 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 74 --device 0 --cfg cfg/yolov3s.cfg -export t=ultralytics/yolov3:v75 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 75 --device 7 --cfg cfg/yolov3s.cfg -export t=ultralytics/yolov3:v76 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 76 --device 0 --cfg cfg/yolov3-spp.cfg - -export t=ultralytics/yolov3:v79 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 79 --device 5 -export t=ultralytics/yolov3:v80 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 80 --device 0 -export t=ultralytics/yolov3:v81 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 81 --device 7 -export t=ultralytics/yolov3:v82 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 82 --device 0 --cfg cfg/yolov3s.cfg - -export t=ultralytics/yolov3:v83 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 83 --device 1 --multi -export t=ultralytics/yolov3:v84 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 84 --device 0 --multi -export t=ultralytics/yolov3:v85 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 85 --device 0 --multi -export t=ultralytics/yolov3:v86 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 86 --device 1 --multi -export t=ultralytics/yolov3:v87 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 87 --device 2 --multi -export t=ultralytics/yolov3:v88 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 273 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 88 --device 3 --multi -export t=ultralytics/yolov3:v89 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 89 --device 1 -export t=ultralytics/yolov3:v90 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 90 --device 0 --cfg cfg/yolov3-spp-matrix.cfg -export t=ultralytics/yolov3:v91 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 91 --device 0 --cfg cfg/yolov3-spp-matrix.cfg - - -export t=ultralytics/yolov3:v92 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t python3 train.py --weights '' --epochs 27 --batch-size 16 --accumulate 4 --prebias --bucket yolov4 --name 92 --device 0 - - - - -#SM4 -export t=ultralytics/yolov3:v0 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host --mount type=bind,source="$(pwd)"/data,target=/usr/src/data $t python3 train.py --weights 'ultralytics49.pt' --epochs 500 --img-size 320 --batch-size 32 --accumulate 2 --prebias --bucket yolov4 --name 78 --device 0 --multi --cfg cfg/yolov3-spp-3cls.cfg --data ../data/sm4/out.data - - -export t=ultralytics/yolov3:v2 && sudo docker pull $t && sudo nvidia-docker run -it --ipc=host -v "$(pwd)"/coco:/usr/src/coco $t -clear -sleep 120 -while true -do - python3 train.py --weights '' --epochs 27 --batch-size 32 --accumulate 2 --prebias --evolve --device 7 --bucket yolov4/416_coco_27e -done - - -while true; do python3 train.py --data data/coco.data --img-size 320 --batch-size 64 --accumulate 1 --evolve --epochs 1 --adam --bucket yolov4/adamdefaultpw_coco_1e; done - - - - - - diff --git a/utils/general.py b/utils/general.py new file mode 100644 index 0000000000..860131000e --- /dev/null +++ b/utils/general.py @@ -0,0 +1,1277 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""General utils.""" + +from __future__ import annotations + +import contextlib +import glob +import inspect +import logging +import logging.config +import math +import os +import platform +import random +import re +import signal +import subprocess +import sys +import time +import urllib +from copy import deepcopy +from datetime import datetime +from itertools import repeat +from multiprocessing.pool import ThreadPool +from pathlib import Path +from subprocess import check_output +from tarfile import is_tarfile +from zipfile import ZipFile, is_zipfile + +import cv2 +import numpy as np +import pandas as pd +import pkg_resources as pkg +import torch +import torchvision +import yaml +from ultralytics.utils.checks import check_requirements +from ultralytics.utils.patches import torch_load + +from utils import TryExcept, emojis +from utils.downloads import curl_download, gsutil_getsize +from utils.metrics import box_iou, fitness + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[1] # YOLOv3 root directory +RANK = int(os.getenv("RANK", -1)) + +# Settings +NUM_THREADS = min(8, max(1, os.cpu_count() - 1)) # number of YOLOv3 multiprocessing threads +DATASETS_DIR = Path(os.getenv("YOLOv5_DATASETS_DIR", ROOT.parent / "datasets")) # global datasets directory +AUTOINSTALL = str(os.getenv("YOLOv5_AUTOINSTALL", True)).lower() == "true" # global auto-install mode +VERBOSE = str(os.getenv("YOLOv5_VERBOSE", True)).lower() == "true" # global verbose mode +TQDM_BAR_FORMAT = "{l_bar}{bar:10}{r_bar}" # tqdm bar format +FONT = "Arial.ttf" # https://github.com/ultralytics/assets/releases/download/v0.0.0/Arial.ttf + +torch.set_printoptions(linewidth=320, precision=5, profile="long") +np.set_printoptions(linewidth=320, formatter={"float_kind": "{:11.5g}".format}) # format short g, %precision=5 +pd.options.display.max_columns = 10 +cv2.setNumThreads(0) # prevent OpenCV from multithreading (incompatible with PyTorch DataLoader) +os.environ["NUMEXPR_MAX_THREADS"] = str(NUM_THREADS) # NumExpr max threads +os.environ["OMP_NUM_THREADS"] = "1" if platform.system() == "darwin" else str(NUM_THREADS) # OpenMP (PyTorch and SciPy) +os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" # suppress verbose TF compiler warnings in Colab + + +def is_ascii(s=""): + """Checks if input string `s` is composed solely of ASCII characters; compatible with pre-Python 3.7 versions.""" + s = str(s) # convert list, tuple, None, etc. to str + return len(s.encode().decode("ascii", "ignore")) == len(s) + + +def is_chinese(s="人工智能"): + """Determines if a string `s` contains any Chinese characters; returns a boolean.""" + return bool(re.search("[\u4e00-\u9fff]", str(s))) + + +def is_colab(): + """Checks if the current environment is a Google Colab instance; returns a boolean.""" + return "google.colab" in sys.modules + + +def is_jupyter(): + """Check if the current script is running inside a Jupyter Notebook. Verified on Colab, Jupyterlab, Kaggle, + Paperspace. + + Returns: + bool: True if running inside a Jupyter Notebook, False otherwise. + """ + with contextlib.suppress(Exception): + from IPython import get_ipython + + return get_ipython() is not None + return False + + +def is_kaggle(): + """Determines if the environment is a Kaggle Notebook by checking environment variables.""" + return os.environ.get("PWD") == "/kaggle/working" and os.environ.get("KAGGLE_URL_BASE") == "https://www.kaggle.com" + + +def is_docker() -> bool: + """Check if the process runs inside a docker container.""" + if Path("/.dockerenv").exists(): + return True + try: # check if docker is in control groups + with open("/proc/self/cgroup") as file: + return any("docker" in line for line in file) + except OSError: + return False + + +def is_writeable(dir, test=False): + """Determines if a directory is writeable, optionally tests by writing a file if `test=True`.""" + if not test: + return os.access(dir, os.W_OK) # possible issues on Windows + file = Path(dir) / "tmp.txt" + try: + with open(file, "w"): # open file with write permissions + pass + file.unlink() # remove file + return True + except OSError: + return False + + +LOGGING_NAME = "yolov5" + + +def set_logging(name=LOGGING_NAME, verbose=True): + """Configures logging with specified verbosity; 'name' sets logger identity, 'verbose' toggles logging level.""" + rank = int(os.getenv("RANK", -1)) # rank in world for Multi-GPU trainings + level = logging.INFO if verbose and rank in {-1, 0} else logging.ERROR + logging.config.dictConfig( + { + "version": 1, + "disable_existing_loggers": False, + "formatters": {name: {"format": "%(message)s"}}, + "handlers": { + name: { + "class": "logging.StreamHandler", + "formatter": name, + "level": level, + } + }, + "loggers": { + name: { + "level": level, + "handlers": [name], + "propagate": False, + } + }, + } + ) + + +set_logging(LOGGING_NAME) # run before defining LOGGER +LOGGER = logging.getLogger(LOGGING_NAME) # define globally (used in train.py, val.py, detect.py, etc.) +if platform.system() == "Windows": + for fn in LOGGER.info, LOGGER.warning: + setattr(LOGGER, fn.__name__, lambda x: fn(emojis(x))) # emoji safe logging + + +def user_config_dir(dir="Ultralytics", env_var="YOLOV5_CONFIG_DIR"): + """Returns user configuration directory path, prefers `env_var` if set, else uses OS-specific path, creates + directory if needed. + """ + if env := os.getenv(env_var): + path = Path(env) # use environment variable + else: + cfg = {"Windows": "AppData/Roaming", "Linux": ".config", "Darwin": "Library/Application Support"} # 3 OS dirs + path = Path.home() / cfg.get(platform.system(), "") # OS-specific config dir + path = (path if is_writeable(path) else Path("/tmp")) / dir # GCP and AWS lambda fix, only /tmp is writeable + path.mkdir(exist_ok=True) # make if required + return path + + +CONFIG_DIR = user_config_dir() # Ultralytics settings dir + + +class Profile(contextlib.ContextDecorator): + """Profiles code execution time, usable as a context manager or decorator for performance monitoring.""" + + def __init__(self, t=0.0): + """Initializes a profiling context for YOLOv3 with optional timing threshold `t` and checks CUDA availability. + """ + self.t = t + self.cuda = torch.cuda.is_available() + + def __enter__(self): + """Starts the profiling timer, returning the profile instance for use with @Profile() decorator or 'with + Profile():' context. + """ + self.start = self.time() + return self + + def __exit__(self, type, value, traceback): + """Ends profiling, calculating time delta and updating total time, for use within 'with Profile():' context.""" + self.dt = self.time() - self.start # delta-time + self.t += self.dt # accumulate dt + + def time(self): + """Returns current time, ensuring CUDA operations are synchronized if on GPU.""" + if self.cuda: + torch.cuda.synchronize() + return time.time() + + +class Timeout(contextlib.ContextDecorator): + """Enforces a timeout on code execution, raising TimeoutError on expiry.""" + + def __init__(self, seconds, *, timeout_msg="", suppress_timeout_errors=True): + """Initializes a timeout context/decorator with specified duration, custom message, and error handling option. + """ + self.seconds = int(seconds) + self.timeout_message = timeout_msg + self.suppress = bool(suppress_timeout_errors) + + def _timeout_handler(self, signum, frame): + """Raises a TimeoutError with a custom message upon timeout signal reception.""" + raise TimeoutError(self.timeout_message) + + def __enter__(self): + """Starts a countdown for a signal alarm; not supported on Windows.""" + if platform.system() != "Windows": # not supported on Windows + signal.signal(signal.SIGALRM, self._timeout_handler) # Set handler for SIGALRM + signal.alarm(self.seconds) # start countdown for SIGALRM to be raised + + def __exit__(self, exc_type, exc_val, exc_tb): + """Cancels any scheduled SIGALRM on non-Windows platforms, optionally suppressing TimeoutError.""" + if platform.system() != "Windows": + signal.alarm(0) # Cancel SIGALRM if it's scheduled + if self.suppress and exc_type is TimeoutError: # Suppress TimeoutError + return True + + +class WorkingDirectory(contextlib.ContextDecorator): + """Context manager to temporarily change the working directory, reverting to the original on exit.""" + + def __init__(self, new_dir): + """Initializes context manager to temporarily change working directory, reverting on exit.""" + self.dir = new_dir # new dir + self.cwd = Path.cwd().resolve() # current dir + + def __enter__(self): + """Temporarily changes the current working directory to `new_dir`, reverting to the original on exit.""" + os.chdir(self.dir) + + def __exit__(self, exc_type, exc_val, exc_tb): + """Reverts to the original working directory upon exiting the context manager.""" + os.chdir(self.cwd) + + +def methods(instance): + """Returns a list of callable class/instance methods, excluding magic methods.""" + return [f for f in dir(instance) if callable(getattr(instance, f)) and not f.startswith("__")] + + +def print_args(args: dict | None = None, show_file=True, show_func=False): + """Prints function arguments; optionally specify args dict, show file and/or function name.""" + x = inspect.currentframe().f_back # previous frame + file, _, func, _, _ = inspect.getframeinfo(x) + if args is None: # get args automatically + args, _, _, frm = inspect.getargvalues(x) + args = {k: v for k, v in frm.items() if k in args} + try: + file = Path(file).resolve().relative_to(ROOT).with_suffix("") + except ValueError: + file = Path(file).stem + s = (f"{file}: " if show_file else "") + (f"{func}: " if show_func else "") + LOGGER.info(colorstr(s) + ", ".join(f"{k}={v}" for k, v in args.items())) + + +def init_seeds(seed=0, deterministic=False): + """Initializes RNG seeds for reproducibility; `seed`: RNG seed, `deterministic`: enforces deterministic behavior if + True. + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # for Multi-GPU, exception safe + # torch.backends.cudnn.benchmark = True # AutoBatch problem https://github.com/ultralytics/yolov5/issues/9287 + if deterministic and check_version(torch.__version__, "1.12.0"): # https://github.com/ultralytics/yolov5/pull/8213 + torch.use_deterministic_algorithms(True) + torch.backends.cudnn.deterministic = True + os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":4096:8" + os.environ["PYTHONHASHSEED"] = str(seed) + + +def intersect_dicts(da, db, exclude=()): + """Intersects two dicts by matching keys and shapes, excluding specified keys, and retains values from the first + dict. + """ + return {k: v for k, v in da.items() if k in db and all(x not in k for x in exclude) and v.shape == db[k].shape} + + +def get_default_args(func): + """Returns a dict of `func`'s default arguments using inspection.""" + signature = inspect.signature(func) + return {k: v.default for k, v in signature.parameters.items() if v.default is not inspect.Parameter.empty} + + +def get_latest_run(search_dir="."): + """Returns path to the most recent 'last.pt' file within 'search_dir' for resuming, or an empty string if not found. + """ + last_list = glob.glob(f"{search_dir}/**/last*.pt", recursive=True) + return max(last_list, key=os.path.getctime) if last_list else "" + + +def file_age(path=__file__): + """Returns the number of days since the last update of the file specified by 'path'.""" + dt = datetime.now() - datetime.fromtimestamp(Path(path).stat().st_mtime) # delta + return dt.days # + dt.seconds / 86400 # fractional days + + +def file_date(path=__file__): + """Returns file modification date in 'YYYY-M-D' format for the file at 'path'.""" + t = datetime.fromtimestamp(Path(path).stat().st_mtime) + return f"{t.year}-{t.month}-{t.day}" + + +def file_size(path): + """Returns the size of a file or total size of files in a directory at 'path' in MB.""" + mb = 1 << 20 # bytes to MiB (1024 ** 2) + path = Path(path) + if path.is_file(): + return path.stat().st_size / mb + elif path.is_dir(): + return sum(f.stat().st_size for f in path.glob("**/*") if f.is_file()) / mb + else: + return 0.0 + + +def check_online(): + """Checks internet connectivity by attempting to connect to "1.1.1.1" on port 443 twice; returns True if successful. + """ + import socket + + def run_once(): + """Attempts a single internet connectivity check to '1.1.1.1' on port 443 and returns True if successful.""" + try: + socket.create_connection(("1.1.1.1", 443), 5) # check host accessibility + return True + except OSError: + return False + + return run_once() or run_once() # check twice to increase robustness to intermittent connectivity issues + + +def git_describe(path=ROOT): # path must be a directory + """Returns human-readable git description of a directory if it's a git repository, otherwise an empty string.""" + try: + assert (Path(path) / ".git").is_dir() + return check_output(f"git -C {path} describe --tags --long --always", shell=True).decode()[:-1] + except Exception: + return "" + + +@TryExcept() +@WorkingDirectory(ROOT) +def check_git_status(repo="ultralytics/yolov5", branch="master"): + """Checks YOLOv3 code update status against remote, suggests 'git pull' if outdated; requires internet and git + repository. + """ + url = f"https://github.com/{repo}" + msg = f", for updates see {url}" + s = colorstr("github: ") # string + assert Path(".git").exists(), s + "skipping check (not a git repository)" + msg + assert check_online(), s + "skipping check (offline)" + msg + + splits = re.split(pattern=r"\s", string=check_output("git remote -v", shell=True).decode()) + matches = [repo in s for s in splits] + if any(matches): + remote = splits[matches.index(True) - 1] + else: + remote = "ultralytics" + check_output(f"git remote add {remote} {url}", shell=True) + check_output(f"git fetch {remote}", shell=True, timeout=5) # git fetch + local_branch = check_output("git rev-parse --abbrev-ref HEAD", shell=True).decode().strip() # checked out + n = int(check_output(f"git rev-list {local_branch}..{remote}/{branch} --count", shell=True)) # commits behind + if n > 0: + pull = "git pull" if remote == "origin" else f"git pull {remote} {branch}" + s += f"⚠️ YOLOv3 is out of date by {n} commit{'s' * (n > 1)}. Use '{pull}' or 'git clone {url}' to update." + else: + s += f"up to date with {url} ✅" + LOGGER.info(s) + + +@WorkingDirectory(ROOT) +def check_git_info(path="."): + """Checks YOLOv3 git info (remote, branch, commit) in path, requires 'gitpython'. + + Returns dict. + """ + check_requirements("gitpython") + import git + + try: + repo = git.Repo(path) + remote = repo.remotes.origin.url.replace(".git", "") # i.e. 'https://github.com/ultralytics/yolov5' + commit = repo.head.commit.hexsha # i.e. '3134699c73af83aac2a481435550b968d5792c0d' + try: + branch = repo.active_branch.name # i.e. 'main' + except TypeError: # not on any branch + branch = None # i.e. 'detached HEAD' state + return {"remote": remote, "branch": branch, "commit": commit} + except git.exc.InvalidGitRepositoryError: # path is not a git dir + return {"remote": None, "branch": None, "commit": None} + + +def check_python(minimum="3.7.0"): + """Checks if current Python version meets the specified minimum requirement, raising error if not.""" + check_version(platform.python_version(), minimum, name="Python ", hard=True) + + +def check_version(current="0.0.0", minimum="0.0.0", name="version ", pinned=False, hard=False, verbose=False): + """Compares current and minimum version requirements, optionally enforcing minimum version and logging warnings.""" + current, minimum = (pkg.parse_version(x) for x in (current, minimum)) + result = (current == minimum) if pinned else (current >= minimum) # bool + s = f"WARNING ⚠️ {name}{minimum} is required by YOLOv3, but {name}{current} is currently installed" # string + if hard: + assert result, emojis(s) # assert min requirements met + if verbose and not result: + LOGGER.warning(s) + return result + + +def check_img_size(imgsz, s=32, floor=0): + """Adjusts image size to be divisible by `s`, ensuring it's above `floor`; returns int for single dim or list for + dims. + """ + if isinstance(imgsz, int): # integer i.e. img_size=640 + new_size = max(make_divisible(imgsz, int(s)), floor) + else: # list i.e. img_size=[640, 480] + imgsz = list(imgsz) # convert to list if tuple + new_size = [max(make_divisible(x, int(s)), floor) for x in imgsz] + if new_size != imgsz: + LOGGER.warning(f"WARNING ⚠️ --img-size {imgsz} must be multiple of max stride {s}, updating to {new_size}") + return new_size + + +def check_imshow(warn=False): + """Checks if the environment supports image display; warns if `warn=True` and display is unsupported.""" + try: + assert not is_jupyter() + assert not is_docker() + cv2.imshow("test", np.zeros((1, 1, 3))) + cv2.waitKey(1) + cv2.destroyAllWindows() + cv2.waitKey(1) + return True + except Exception as e: + if warn: + LOGGER.warning(f"WARNING ⚠️ Environment does not support cv2.imshow() or PIL Image.show()\n{e}") + return False + + +def check_suffix(file="yolov5s.pt", suffix=(".pt",), msg=""): + """Checks for acceptable file suffixes, supports batch checking for lists or tuples of filenames.""" + if file and suffix: + if isinstance(suffix, str): + suffix = [suffix] + for f in file if isinstance(file, (list, tuple)) else [file]: + s = Path(f).suffix.lower() # file suffix + if len(s): + assert s in suffix, f"{msg}{f} acceptable suffix is {suffix}" + + +def check_yaml(file, suffix=(".yaml", ".yml")): + """Searches/downloads a YAML file and returns its path, ensuring it has a .yaml or .yml suffix.""" + return check_file(file, suffix) + + +def check_file(file, suffix=""): + """Checks for file's existence locally, downloads if a URL, supports ClearML dataset IDs, and enforces optional + suffix. + """ + check_suffix(file, suffix) # optional + file = str(file) # convert to str() + if os.path.isfile(file) or not file: # exists + return file + elif file.startswith(("http:/", "https:/")): # download + url = file # warning: Pathlib turns :// -> :/ + file = Path(urllib.parse.unquote(file).split("?")[0]).name # '%2F' to '/', split https://url.com/file.txt?auth + if os.path.isfile(file): + LOGGER.info(f"Found {url} locally at {file}") # file already exists + else: + LOGGER.info(f"Downloading {url} to {file}...") + torch.hub.download_url_to_file(url, file) + assert Path(file).exists() and Path(file).stat().st_size > 0, f"File download failed: {url}" # check + return file + elif file.startswith("clearml://"): # ClearML Dataset ID + assert "clearml" in sys.modules, ( + "ClearML is not installed, so cannot use ClearML dataset. Try running 'pip install clearml'." + ) + return file + else: # search + files = [] + for d in "data", "models", "utils": # search directories + files.extend(glob.glob(str(ROOT / d / "**" / file), recursive=True)) # find file + assert len(files), f"File not found: {file}" # assert file was found + assert len(files) == 1, f"Multiple files match '{file}', specify exact path: {files}" # assert unique + return files[0] # return file + + +def check_font(font=FONT, progress=False): + """Checks and downloads the specified font to CONFIG_DIR if not present, with optional download progress.""" + font = Path(font) + file = CONFIG_DIR / font.name + if not font.exists() and not file.exists(): + url = f"https://github.com/ultralytics/assets/releases/download/v0.0.0/{font.name}" + LOGGER.info(f"Downloading {url} to {file}...") + torch.hub.download_url_to_file(url, str(file), progress=progress) + + +def check_dataset(data, autodownload=True): + """Verifies and prepares dataset by downloading if absent, checking, and unzipping; supports auto-downloading.""" + # Download (optional) + extract_dir = "" + if isinstance(data, (str, Path)) and (is_zipfile(data) or is_tarfile(data)): + download(data, dir=f"{DATASETS_DIR}/{Path(data).stem}", unzip=True, delete=False, curl=False, threads=1) + data = next((DATASETS_DIR / Path(data).stem).rglob("*.yaml")) + extract_dir, autodownload = data.parent, False + + # Read yaml (optional) + if isinstance(data, (str, Path)): + data = yaml_load(data) # dictionary + + # Checks + for k in "train", "val", "names": + assert k in data, emojis(f"data.yaml '{k}:' field missing ❌") + if isinstance(data["names"], (list, tuple)): # old array format + data["names"] = dict(enumerate(data["names"])) # convert to dict + assert all(isinstance(k, int) for k in data["names"].keys()), "data.yaml names keys must be integers, i.e. 2: car" + data["nc"] = len(data["names"]) + + # Resolve paths + path = Path(extract_dir or data.get("path") or "") # optional 'path' default to '.' + if not path.is_absolute(): + path = (ROOT / path).resolve() + data["path"] = path # download scripts + for k in "train", "val", "test": + if data.get(k): # prepend path + if isinstance(data[k], str): + x = (path / data[k]).resolve() + if not x.exists() and data[k].startswith("../"): + x = (path / data[k][3:]).resolve() + data[k] = str(x) + else: + data[k] = [str((path / x).resolve()) for x in data[k]] + + # Parse yaml + _train, val, _test, s = (data.get(x) for x in ("train", "val", "test", "download")) + if val: + val = [Path(x).resolve() for x in (val if isinstance(val, list) else [val])] # val path + if not all(x.exists() for x in val): + LOGGER.info("\nDataset not found ⚠️, missing paths %s" % [str(x) for x in val if not x.exists()]) + if not s or not autodownload: + raise Exception("Dataset not found ❌") + t = time.time() + if s.startswith("http") and s.endswith(".zip"): # URL + f = Path(s).name # filename + LOGGER.info(f"Downloading {s} to {f}...") + torch.hub.download_url_to_file(s, f) + Path(DATASETS_DIR).mkdir(parents=True, exist_ok=True) # create root + unzip_file(f, path=DATASETS_DIR) # unzip + Path(f).unlink() # remove zip + r = None # success + elif s.startswith("bash "): # bash script + LOGGER.info(f"Running {s} ...") + r = subprocess.run(s, shell=True) + else: # python script + r = exec(s, {"yaml": data}) # return None + dt = f"({round(time.time() - t, 1)}s)" + s = f"success ✅ {dt}, saved to {colorstr('bold', DATASETS_DIR)}" if r in (0, None) else f"failure {dt} ❌" + LOGGER.info(f"Dataset download {s}") + check_font("Arial.ttf" if is_ascii(data["names"]) else "Arial.Unicode.ttf", progress=True) # download fonts + return data # dictionary + + +def check_amp(model): + """Checks PyTorch AMP functionality with model and sample image, returning True if AMP operates correctly.""" + from models.common import AutoShape, DetectMultiBackend + + def amp_allclose(model, im): + """Compares FP32 and AMP inference results for a model and image, ensuring outputs are within 10% tolerance.""" + m = AutoShape(model, verbose=False) # model + a = m(im).xywhn[0] # FP32 inference + m.amp = True + b = m(im).xywhn[0] # AMP inference + return a.shape == b.shape and torch.allclose(a, b, atol=0.1) # close to 10% absolute tolerance + + prefix = colorstr("AMP: ") + device = next(model.parameters()).device # get model device + if device.type in ("cpu", "mps"): + return False # AMP only used on CUDA devices + f = ROOT / "data" / "images" / "bus.jpg" # image to check + im = f if f.exists() else "https://ultralytics.com/images/bus.jpg" if check_online() else np.ones((640, 640, 3)) + try: + assert amp_allclose(deepcopy(model), im) or amp_allclose(DetectMultiBackend("yolov5n.pt", device), im) + LOGGER.info(f"{prefix}checks passed ✅") + return True + except Exception: + help_url = "https://github.com/ultralytics/yolov5/issues/7908" + LOGGER.warning(f"{prefix}checks failed ❌, disabling Automatic Mixed Precision. See {help_url}") + return False + + +def yaml_load(file="data.yaml"): + """Safely loads a YAML file, ignoring file errors; default file is 'data.yaml'.""" + with open(file, errors="ignore") as f: + return yaml.safe_load(f) + + +def yaml_save(file="data.yaml", data=None): + """Safely saves data to a YAML file, converting `Path` objects to strings; defaults to 'data.yaml'.""" + if data is None: + data = {} + with open(file, "w") as f: + yaml.safe_dump({k: str(v) if isinstance(v, Path) else v for k, v in data.items()}, f, sort_keys=False) + + +def unzip_file(file, path=None, exclude=(".DS_Store", "__MACOSX")): + """Unzips '*.zip' to `path` (default: file's parent), excluding files matching `exclude` (`('.DS_Store', + '__MACOSX')`). + """ + if path is None: + path = Path(file).parent # default path + with ZipFile(file) as zipObj: + for f in zipObj.namelist(): # list all archived filenames in the zip + if all(x not in f for x in exclude): + zipObj.extract(f, path=path) + + +def url2file(url): + """Converts a URL to a filename by extracting the last path segment and removing query parameters.""" + url = str(Path(url)).replace(":/", "://") # Pathlib turns :// -> :/ + return Path(urllib.parse.unquote(url)).name.split("?")[0] # '%2F' to '/', split https://url.com/file.txt?auth + + +def download(url, dir=".", unzip=True, delete=True, curl=False, threads=1, retry=3): + """Downloads files from URLs into a specified directory, optionally unzips, and supports multithreading and retries. + """ + + def download_one(url, dir): + """Downloads a file from a URL into the specified directory, supporting retries and using curl or torch methods. + """ + success = True + if os.path.isfile(url): + f = Path(url) # filename + else: # does not exist + f = dir / Path(url).name + LOGGER.info(f"Downloading {url} to {f}...") + for i in range(retry + 1): + if curl: + success = curl_download(url, f, silent=(threads > 1)) + else: + torch.hub.download_url_to_file(url, f, progress=threads == 1) # torch download + success = f.is_file() + if success: + break + elif i < retry: + LOGGER.warning(f"⚠️ Download failure, retrying {i + 1}/{retry} {url}...") + else: + LOGGER.warning(f"❌ Failed to download {url}...") + + if unzip and success and (f.suffix == ".gz" or is_zipfile(f) or is_tarfile(f)): + LOGGER.info(f"Unzipping {f}...") + if is_zipfile(f): + unzip_file(f, dir) # unzip + elif is_tarfile(f): + subprocess.run(["tar", "xf", f, "--directory", f.parent], check=True) # unzip + elif f.suffix == ".gz": + subprocess.run(["tar", "xfz", f, "--directory", f.parent], check=True) # unzip + if delete: + f.unlink() # remove zip + + dir = Path(dir) + dir.mkdir(parents=True, exist_ok=True) # make directory + if threads > 1: + pool = ThreadPool(threads) + pool.imap(lambda x: download_one(*x), zip(url, repeat(dir))) # multithreaded + pool.close() + pool.join() + else: + for u in [url] if isinstance(url, (str, Path)) else url: + download_one(u, dir) + + +def make_divisible(x, divisor): + """Adjusts `x` to be nearest and greater than or equal to value divisible by `divisor`.""" + if isinstance(divisor, torch.Tensor): + divisor = int(divisor.max()) # to int + return math.ceil(x / divisor) * divisor + + +def clean_str(s): + """Cleans a string by replacing special characters with underscores, e.g., 'test@string!' to 'test_string_'.""" + return re.sub(pattern="[|@#!¡·$€%&()=?¿^*;:,¨´><+]", repl="_", string=s) + + +def one_cycle(y1=0.0, y2=1.0, steps=100): + """Generates a lambda for a sinusoidal ramp from y1 to y2 over 'steps'; usage: `lambda x: ((1 - math.cos(x * math.pi + / steps)) / 2) * (y2 - y1) + y1`. + """ + return lambda x: ((1 - math.cos(x * math.pi / steps)) / 2) * (y2 - y1) + y1 + + +def colorstr(*input): + """Colors strings using ANSI escape codes; see usage example `colorstr('blue', 'hello world')`. + + [https://en.wikipedia.org/wiki/ANSI_escape_code] + """ + *args, string = input if len(input) > 1 else ("blue", "bold", input[0]) # color arguments, string + colors = { + "black": "\033[30m", # basic colors + "red": "\033[31m", + "green": "\033[32m", + "yellow": "\033[33m", + "blue": "\033[34m", + "magenta": "\033[35m", + "cyan": "\033[36m", + "white": "\033[37m", + "bright_black": "\033[90m", # bright colors + "bright_red": "\033[91m", + "bright_green": "\033[92m", + "bright_yellow": "\033[93m", + "bright_blue": "\033[94m", + "bright_magenta": "\033[95m", + "bright_cyan": "\033[96m", + "bright_white": "\033[97m", + "end": "\033[0m", # misc + "bold": "\033[1m", + "underline": "\033[4m", + } + return "".join(colors[x] for x in args) + f"{string}" + colors["end"] + + +def labels_to_class_weights(labels, nc=80): + """Calculates class weights from labels to counteract dataset imbalance; `labels` is a list of numpy arrays with + shape `(n, 5)`. + """ + if labels[0] is None: # no labels loaded + return torch.Tensor() + + labels = np.concatenate(labels, 0) # labels.shape = (866643, 5) for COCO + classes = labels[:, 0].astype(int) # labels = [class xywh] + weights = np.bincount(classes, minlength=nc) # occurrences per class + + # Prepend gridpoint count (for uCE training) + # gpi = ((320 / 32 * np.array([1, 2, 4])) ** 2 * 3).sum() # gridpoints per image + # weights = np.hstack([gpi * len(labels) - weights.sum() * 9, weights * 9]) ** 0.5 # prepend gridpoints to start + + weights[weights == 0] = 1 # replace empty bins with 1 + weights = 1 / weights # number of targets per class + weights /= weights.sum() # normalize + return torch.from_numpy(weights).float() + + +def labels_to_image_weights(labels, nc=80, class_weights=np.ones(80)): + """Calculates image weights from labels using class weights, for balanced sampling.""" + # Usage: index = random.choices(range(n), weights=image_weights, k=1) # weighted image sample + class_counts = np.array([np.bincount(x[:, 0].astype(int), minlength=nc) for x in labels]) + return (class_weights.reshape(1, nc) * class_counts).sum(1) + + +def coco80_to_coco91_class(): # converts 80-index (val2014) to 91-index (paper) + """Converts COCO 80-class index to COCO 91-class index. + + Reference: https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/ + """ + # a = np.loadtxt('data/coco.names', dtype='str', delimiter='\n') + # b = np.loadtxt('data/coco_paper.names', dtype='str', delimiter='\n') + # x1 = [list(a[i] == b).index(True) + 1 for i in range(80)] # darknet to coco + # x2 = [list(b[i] == a).index(True) if any(b[i] == a) else None for i in range(91)] # coco to darknet + return [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 67, + 70, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + ] + + +def xyxy2xywh(x): + """Converts nx4 bounding boxes from corners [x1, y1, x2, y2] to center format [x, y, w, h].""" + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[..., 0] = (x[..., 0] + x[..., 2]) / 2 # x center + y[..., 1] = (x[..., 1] + x[..., 3]) / 2 # y center + y[..., 2] = x[..., 2] - x[..., 0] # width + y[..., 3] = x[..., 3] - x[..., 1] # height + return y + + +def xywh2xyxy(x): + """Converts bbox format from [x, y, w, h] to [x1, y1, x2, y2], supporting torch.Tensor and np.ndarray.""" + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[..., 0] = x[..., 0] - x[..., 2] / 2 # top left x + y[..., 1] = x[..., 1] - x[..., 3] / 2 # top left y + y[..., 2] = x[..., 0] + x[..., 2] / 2 # bottom right x + y[..., 3] = x[..., 1] + x[..., 3] / 2 # bottom right y + return y + + +def xywhn2xyxy(x, w=640, h=640, padw=0, padh=0): + """Converts boxes from normalized [x, y, w, h] to [x1, y1, x2, y2] format, applies padding.""" + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[..., 0] = w * (x[..., 0] - x[..., 2] / 2) + padw # top left x + y[..., 1] = h * (x[..., 1] - x[..., 3] / 2) + padh # top left y + y[..., 2] = w * (x[..., 0] + x[..., 2] / 2) + padw # bottom right x + y[..., 3] = h * (x[..., 1] + x[..., 3] / 2) + padh # bottom right y + return y + + +def xyxy2xywhn(x, w=640, h=640, clip=False, eps=0.0): + """Converts bounding boxes from [x1, y1, x2, y2] format to normalized [x, y, w, h] format.""" + if clip: + clip_boxes(x, (h - eps, w - eps)) # warning: inplace clip + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[..., 0] = ((x[..., 0] + x[..., 2]) / 2) / w # x center + y[..., 1] = ((x[..., 1] + x[..., 3]) / 2) / h # y center + y[..., 2] = (x[..., 2] - x[..., 0]) / w # width + y[..., 3] = (x[..., 3] - x[..., 1]) / h # height + return y + + +def xyn2xy(x, w=640, h=640, padw=0, padh=0): + """Converts normalized segments to pixel segments, shape (n,2), adjusting for width `w`, height `h`, and padding.""" + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[..., 0] = w * x[..., 0] + padw # top left x + y[..., 1] = h * x[..., 1] + padh # top left y + return y + + +def segment2box(segment, width=640, height=640): + """Converts a single segment to a bounding box using image dimensions, output shape (4,), ensuring coordinates stay + within image boundaries. + """ + x, y = segment.T # segment xy + inside = (x >= 0) & (y >= 0) & (x <= width) & (y <= height) + ( + x, + y, + ) = x[inside], y[inside] + return np.array([x.min(), y.min(), x.max(), y.max()]) if any(x) else np.zeros((1, 4)) # xyxy + + +def segments2boxes(segments): + """Converts segmentation labels to bounding box labels in format (cls, xywh) from (cls, xy1, xy2, ...).""" + boxes = [] + for s in segments: + x, y = s.T # segment xy + boxes.append([x.min(), y.min(), x.max(), y.max()]) # cls, xyxy + return xyxy2xywh(np.array(boxes)) # cls, xywh + + +def resample_segments(segments, n=1000): + """Resamples segments to a fixed number of points (n), returning up-sampled (n,2) segment arrays.""" + for i, s in enumerate(segments): + s = np.concatenate((s, s[0:1, :]), axis=0) + x = np.linspace(0, len(s) - 1, n) + xp = np.arange(len(s)) + segments[i] = np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)]).reshape(2, -1).T # segment xy + return segments + + +def scale_boxes(img1_shape, boxes, img0_shape, ratio_pad=None): + """Rescales bounding boxes from one image shape to another, optionally with ratio and padding adjustments.""" + if ratio_pad is None: # calculate from img0_shape + gain = min(img1_shape[0] / img0_shape[0], img1_shape[1] / img0_shape[1]) # gain = old / new + pad = (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2 # wh padding + else: + gain = ratio_pad[0][0] + pad = ratio_pad[1] + + boxes[..., [0, 2]] -= pad[0] # x padding + boxes[..., [1, 3]] -= pad[1] # y padding + boxes[..., :4] /= gain + clip_boxes(boxes, img0_shape) + return boxes + + +def scale_segments(img1_shape, segments, img0_shape, ratio_pad=None, normalize=False): + """Rescales segment coordinates from img1_shape to img0_shape, optionally normalizing, with support for padding + adjustments. + """ + if ratio_pad is None: # calculate from img0_shape + gain = min(img1_shape[0] / img0_shape[0], img1_shape[1] / img0_shape[1]) # gain = old / new + pad = (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2 # wh padding + else: + gain = ratio_pad[0][0] + pad = ratio_pad[1] + + segments[:, 0] -= pad[0] # x padding + segments[:, 1] -= pad[1] # y padding + segments /= gain + clip_segments(segments, img0_shape) + if normalize: + segments[:, 0] /= img0_shape[1] # width + segments[:, 1] /= img0_shape[0] # height + return segments + + +def clip_boxes(boxes, shape): + """Clips bounding boxes to within the specified image shape; supports both torch.Tensor and np.array.""" + if isinstance(boxes, torch.Tensor): # faster individually + boxes[..., 0].clamp_(0, shape[1]) # x1 + boxes[..., 1].clamp_(0, shape[0]) # y1 + boxes[..., 2].clamp_(0, shape[1]) # x2 + boxes[..., 3].clamp_(0, shape[0]) # y2 + else: # np.array (faster grouped) + boxes[..., [0, 2]] = boxes[..., [0, 2]].clip(0, shape[1]) # x1, x2 + boxes[..., [1, 3]] = boxes[..., [1, 3]].clip(0, shape[0]) # y1, y2 + + +def clip_segments(segments, shape): + """Clips segments to within image shape (height, width), supporting torch.Tensor and np.array inputs.""" + if isinstance(segments, torch.Tensor): # faster individually + segments[:, 0].clamp_(0, shape[1]) # x + segments[:, 1].clamp_(0, shape[0]) # y + else: # np.array (faster grouped) + segments[:, 0] = segments[:, 0].clip(0, shape[1]) # x + segments[:, 1] = segments[:, 1].clip(0, shape[0]) # y + + +def non_max_suppression( + prediction, + conf_thres=0.25, + iou_thres=0.45, + classes=None, + agnostic=False, + multi_label=False, + labels=(), + max_det=300, + nm=0, # number of masks +): + """Non-Maximum Suppression (NMS) on inference results to reject overlapping detections. + + Returns: + list of detections, on (n,6) tensor per image [xyxy, conf, cls] + """ + # Checks + assert 0 <= conf_thres <= 1, f"Invalid Confidence threshold {conf_thres}, valid values are between 0.0 and 1.0" + assert 0 <= iou_thres <= 1, f"Invalid IoU {iou_thres}, valid values are between 0.0 and 1.0" + if isinstance(prediction, (list, tuple)): # YOLOv3 model in validation model, output = (inference_out, loss_out) + prediction = prediction[0] # select only inference output + + device = prediction.device + mps = "mps" in device.type # Apple MPS + if mps: # MPS not fully supported yet, convert tensors to CPU before NMS + prediction = prediction.cpu() + bs = prediction.shape[0] # batch size + nc = prediction.shape[2] - nm - 5 # number of classes + xc = prediction[..., 4] > conf_thres # candidates + + # Settings + # min_wh = 2 # (pixels) minimum box width and height + max_wh = 7680 # (pixels) maximum box width and height + max_nms = 30000 # maximum number of boxes into torchvision.ops.nms() + time_limit = 0.5 + 0.05 * bs # seconds to quit after + redundant = True # require redundant detections + multi_label &= nc > 1 # multiple labels per box (adds 0.5ms/img) + merge = False # use merge-NMS + + t = time.time() + mi = 5 + nc # mask start index + output = [torch.zeros((0, 6 + nm), device=prediction.device)] * bs + for xi, x in enumerate(prediction): # image index, image inference + # Apply constraints + # x[((x[..., 2:4] < min_wh) | (x[..., 2:4] > max_wh)).any(1), 4] = 0 # width-height + x = x[xc[xi]] # confidence + + # Cat apriori labels if autolabelling + if labels and len(labels[xi]): + lb = labels[xi] + v = torch.zeros((len(lb), nc + nm + 5), device=x.device) + v[:, :4] = lb[:, 1:5] # box + v[:, 4] = 1.0 # conf + v[range(len(lb)), lb[:, 0].long() + 5] = 1.0 # cls + x = torch.cat((x, v), 0) + + # If none remain process next image + if not x.shape[0]: + continue + + # Compute conf + x[:, 5:] *= x[:, 4:5] # conf = obj_conf * cls_conf + + # Box/Mask + box = xywh2xyxy(x[:, :4]) # center_x, center_y, width, height) to (x1, y1, x2, y2) + mask = x[:, mi:] # zero columns if no masks + + # Detections matrix nx6 (xyxy, conf, cls) + if multi_label: + i, j = (x[:, 5:mi] > conf_thres).nonzero(as_tuple=False).T + x = torch.cat((box[i], x[i, 5 + j, None], j[:, None].float(), mask[i]), 1) + else: # best class only + conf, j = x[:, 5:mi].max(1, keepdim=True) + x = torch.cat((box, conf, j.float(), mask), 1)[conf.view(-1) > conf_thres] + + # Filter by class + if classes is not None: + x = x[(x[:, 5:6] == torch.tensor(classes, device=x.device)).any(1)] + + # Apply finite constraint + # if not torch.isfinite(x).all(): + # x = x[torch.isfinite(x).all(1)] + + # Check shape + n = x.shape[0] # number of boxes + if not n: # no boxes + continue + x = x[x[:, 4].argsort(descending=True)[:max_nms]] # sort by confidence and remove excess boxes + + # Batched NMS + c = x[:, 5:6] * (0 if agnostic else max_wh) # classes + boxes, scores = x[:, :4] + c, x[:, 4] # boxes (offset by class), scores + i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS + i = i[:max_det] # limit detections + if merge and (1 < n < 3e3): # Merge NMS (boxes merged using weighted mean) + # update boxes as boxes(i,4) = weights(i,n) * boxes(n,4) + iou = box_iou(boxes[i], boxes) > iou_thres # iou matrix + weights = iou * scores[None] # box weights + x[i, :4] = torch.mm(weights, x[:, :4]).float() / weights.sum(1, keepdim=True) # merged boxes + if redundant: + i = i[iou.sum(1) > 1] # require redundancy + + output[xi] = x[i] + if mps: + output[xi] = output[xi].to(device) + if (time.time() - t) > time_limit: + LOGGER.warning(f"WARNING ⚠️ NMS time limit {time_limit:.3f}s exceeded") + break # time limit exceeded + + return output + + +def strip_optimizer(f="best.pt", s=""): # from utils.general import *; strip_optimizer() + """Strips optimizer from a checkpoint file 'f', optionally saving as 's', to finalize training.""" + x = torch_load(f, map_location=torch.device("cpu")) + if x.get("ema"): + x["model"] = x["ema"] # replace model with ema + for k in "optimizer", "best_fitness", "ema", "updates": # keys + x[k] = None + x["epoch"] = -1 + x["model"].half() # to FP16 + for p in x["model"].parameters(): + p.requires_grad = False + torch.save(x, s or f) + mb = os.path.getsize(s or f) / 1e6 # filesize + LOGGER.info(f"Optimizer stripped from {f},{f' saved as {s},' if s else ''} {mb:.1f}MB") + + +def print_mutation(keys, results, hyp, save_dir, bucket, prefix=colorstr("evolve: ")): + """Logs mutation results, updates evolve CSV/YAML, optionally syncs with cloud storage.""" + evolve_csv = save_dir / "evolve.csv" + evolve_yaml = save_dir / "hyp_evolve.yaml" + keys = tuple(keys) + tuple(hyp.keys()) # [results + hyps] + keys = tuple(x.strip() for x in keys) + vals = results + tuple(hyp.values()) + n = len(keys) + + # Download (optional) + if bucket: + url = f"gs://{bucket}/evolve.csv" + if gsutil_getsize(url) > (evolve_csv.stat().st_size if evolve_csv.exists() else 0): + subprocess.run(["gsutil", "cp", f"{url}", f"{save_dir}"]) # download evolve.csv if larger than local + + # Log to evolve.csv + s = "" if evolve_csv.exists() else (("%20s," * n % keys).rstrip(",") + "\n") # add header + with open(evolve_csv, "a") as f: + f.write(s + ("%20.5g," * n % vals).rstrip(",") + "\n") + + # Save yaml + with open(evolve_yaml, "w") as f: + data = pd.read_csv(evolve_csv, skipinitialspace=True) + data = data.rename(columns=lambda x: x.strip()) # strip keys + i = np.argmax(fitness(data.values[:, :4])) # + generations = len(data) + f.write( + "# YOLOv3 Hyperparameter Evolution Results\n" + + f"# Best generation: {i}\n" + + f"# Last generation: {generations - 1}\n" + + "# " + + ", ".join(f"{x.strip():>20s}" for x in keys[:7]) + + "\n" + + "# " + + ", ".join(f"{x:>20.5g}" for x in data.values[i, :7]) + + "\n\n" + ) + yaml.safe_dump(data.loc[i][7:].to_dict(), f, sort_keys=False) + + # Print to screen + LOGGER.info( + prefix + + f"{generations} generations finished, current result:\n" + + prefix + + ", ".join(f"{x.strip():>20s}" for x in keys) + + "\n" + + prefix + + ", ".join(f"{x:20.5g}" for x in vals) + + "\n\n" + ) + + if bucket: + subprocess.run(["gsutil", "cp", f"{evolve_csv}", f"{evolve_yaml}", f"gs://{bucket}"]) # upload + + +def apply_classifier(x, model, img, im0): + """Applies a second stage classifier to YOLO outputs, adjusting box shapes and filtering class matches.""" + # Example model = torchvision.models.__dict__['efficientnet_b0'](pretrained=True).to(device).eval() + im0 = [im0] if isinstance(im0, np.ndarray) else im0 + for i, d in enumerate(x): # per image + if d is not None and len(d): + d = d.clone() + + # Reshape and pad cutouts + b = xyxy2xywh(d[:, :4]) # boxes + b[:, 2:] = b[:, 2:].max(1)[0].unsqueeze(1) # rectangle to square + b[:, 2:] = b[:, 2:] * 1.3 + 30 # pad + d[:, :4] = xywh2xyxy(b).long() + + # Rescale boxes from img_size to im0 size + scale_boxes(img.shape[2:], d[:, :4], im0[i].shape) + + # Classes + pred_cls1 = d[:, 5].long() + ims = [] + for a in d: + cutout = im0[i][int(a[1]) : int(a[3]), int(a[0]) : int(a[2])] + im = cv2.resize(cutout, (224, 224)) # BGR + + im = im[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 + im = np.ascontiguousarray(im, dtype=np.float32) # uint8 to float32 + im /= 255 # 0 - 255 to 0.0 - 1.0 + ims.append(im) + + pred_cls2 = model(torch.Tensor(ims).to(d.device)).argmax(1) # classifier prediction + x[i] = x[i][pred_cls1 == pred_cls2] # retain matching class detections + + return x + + +def increment_path(path, exist_ok=False, sep="", mkdir=False): + """Increments file or directory path, optionally creating the directory, not thread-safe. + + Args: path (str/Path), exist_ok (bool), sep (str), mkdir (bool). + """ + path = Path(path) # os-agnostic + if path.exists() and not exist_ok: + path, suffix = (path.with_suffix(""), path.suffix) if path.is_file() else (path, "") + + # Method 1 + for n in range(2, 9999): + p = f"{path}{sep}{n}{suffix}" # increment path + if not os.path.exists(p): # + break + path = Path(p) + + # Method 2 (deprecated) + # dirs = glob.glob(f"{path}{sep}*") # similar paths + # matches = [re.search(rf"{path.stem}{sep}(\d+)", d) for d in dirs] + # i = [int(m.groups()[0]) for m in matches if m] # indices + # n = max(i) + 1 if i else 2 # increment number + # path = Path(f"{path}{sep}{n}{suffix}") # increment path + + if mkdir: + path.mkdir(parents=True, exist_ok=True) # make directory + + return path + + +# OpenCV Multilanguage-friendly functions +# ------------------------------------------------------------------------------------ +imshow_ = cv2.imshow # copy to avoid recursion errors + + +def imread(filename, flags=cv2.IMREAD_COLOR): + """Reads an image from a file, supporting multilanguage paths, and returns it in the specified color scheme.""" + return cv2.imdecode(np.fromfile(filename, np.uint8), flags) + + +def imwrite(filename, img): + """Writes an image to a file; returns True on success, False on failure. + + Args: filename (str), img (ndarray). + """ + try: + cv2.imencode(Path(filename).suffix, img)[1].tofile(filename) + return True + except Exception: + return False + + +def imshow(path, im): + """Displays an image; accepts a path (str) and image data (ndarray) as arguments.""" + imshow_(path.encode("unicode_escape").decode(), im) + + +if Path(inspect.stack()[0].filename).parent.parent.as_posix() in inspect.stack()[-1].filename: + cv2.imread, cv2.imwrite, cv2.imshow = imread, imwrite, imshow # redefine + +# Variables ------------------------------------------------------------------------------------------------------------ diff --git a/utils/google_app_engine/Dockerfile b/utils/google_app_engine/Dockerfile new file mode 100644 index 0000000000..0155618f47 --- /dev/null +++ b/utils/google_app_engine/Dockerfile @@ -0,0 +1,25 @@ +FROM gcr.io/google-appengine/python + +# Create a virtualenv for dependencies. This isolates these packages from +# system-level packages. +# Use -p python3 or -p python3.7 to select python version. Default is version 2. +RUN virtualenv /env -p python3 + +# Setting these environment variables are the same as running +# source /env/bin/activate. +ENV VIRTUAL_ENV /env +ENV PATH /env/bin:$PATH + +RUN apt-get update && apt-get install -y python-opencv + +# Copy the application's requirements.txt and run pip to install all +# dependencies into the virtualenv. +ADD requirements.txt /app/requirements.txt +RUN pip install -r /app/requirements.txt + +# Add the application source code. +ADD . /app + +# Run a WSGI server to serve the application. gunicorn must be declared as +# a dependency in requirements.txt. +CMD gunicorn -b :$PORT main:app diff --git a/utils/google_app_engine/additional_requirements.txt b/utils/google_app_engine/additional_requirements.txt new file mode 100644 index 0000000000..e3df3992df --- /dev/null +++ b/utils/google_app_engine/additional_requirements.txt @@ -0,0 +1,6 @@ +# add these requirements in your app on top of the existing ones +pip==25.3 +Flask==2.3.2 +gunicorn==23.0.0 +werkzeug>=3.0.1 # not directly required, pinned by Snyk to avoid a vulnerability +zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability diff --git a/utils/google_app_engine/app.yaml b/utils/google_app_engine/app.yaml new file mode 100644 index 0000000000..6fb9d5f9db --- /dev/null +++ b/utils/google_app_engine/app.yaml @@ -0,0 +1,16 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +runtime: custom +env: flex + +service: yolov5app + +liveness_check: + initial_delay_sec: 600 + +manual_scaling: + instances: 1 +resources: + cpu: 1 + memory_gb: 4 + disk_size_gb: 20 diff --git a/utils/google_utils.py b/utils/google_utils.py deleted file mode 100644 index 303265b4a6..0000000000 --- a/utils/google_utils.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file contains google utils: https://cloud.google.com/storage/docs/reference/libraries -# pip install --upgrade google-cloud-storage - -import os -import time - - -# from google.cloud import storage - - -def gdrive_download(id='1HaXkef9z6y5l4vUnCYgdmEAj61c6bfWO', name='coco.zip'): - # https://gist.github.com/tanaikech/f0f2d122e05bf5f971611258c22c110f - # Downloads a file from Google Drive, accepting presented query - # from utils.google_utils import *; gdrive_download() - t = time.time() - - print('Downloading https://drive.google.com/uc?export=download&id=%s as %s... ' % (id, name), end='') - if os.path.exists(name): # remove existing - os.remove(name) - - # Attempt large file download - s = ["curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id=%s\" > /dev/null" % id, - "curl -Lb ./cookie -s \"https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=%s\" -o %s" % ( - id, name), - 'rm ./cookie'] - [os.system(x) for x in s] # run commands - - # Attempt small file download - if not os.path.exists(name): # file size < 40MB - s = 'curl -f -L -o %s https://drive.google.com/uc?export=download&id=%s' % (name, id) - os.system(s) - - # Unzip if archive - if name.endswith('.zip'): - print('unzipping... ', end='') - os.system('unzip -q %s' % name) # unzip - os.remove(name) # remove zip to free space - - print('Done (%.1fs)' % (time.time() - t)) - - -def upload_blob(bucket_name, source_file_name, destination_blob_name): - # Uploads a file to a bucket - # https://cloud.google.com/storage/docs/uploading-objects#storage-upload-object-python - - storage_client = storage.Client() - bucket = storage_client.get_bucket(bucket_name) - blob = bucket.blob(destination_blob_name) - - blob.upload_from_filename(source_file_name) - - print('File {} uploaded to {}.'.format( - source_file_name, - destination_blob_name)) - - -def download_blob(bucket_name, source_blob_name, destination_file_name): - # Uploads a blob from a bucket - storage_client = storage.Client() - bucket = storage_client.get_bucket(bucket_name) - blob = bucket.blob(source_blob_name) - - blob.download_to_filename(destination_file_name) - - print('Blob {} downloaded to {}.'.format( - source_blob_name, - destination_file_name)) diff --git a/utils/loggers/__init__.py b/utils/loggers/__init__.py new file mode 100644 index 0000000000..754d913ec9 --- /dev/null +++ b/utils/loggers/__init__.py @@ -0,0 +1,433 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Logging utils.""" + +import os +import warnings +from pathlib import Path + +import pkg_resources as pkg +import torch + +from utils.general import LOGGER, colorstr, cv2 +from utils.loggers.clearml.clearml_utils import ClearmlLogger +from utils.loggers.wandb.wandb_utils import WandbLogger +from utils.plots import plot_images, plot_labels, plot_results +from utils.torch_utils import de_parallel + +LOGGERS = ("csv", "tb", "wandb", "clearml", "comet") # *.csv, TensorBoard, Weights & Biases, ClearML +RANK = int(os.getenv("RANK", -1)) + +try: + from torch.utils.tensorboard import SummaryWriter +except ImportError: + + def SummaryWriter(*args): + """Imports TensorBoard's SummaryWriter for logging, with a fallback returning None if TensorBoard is not + installed. + """ + return None # None = SummaryWriter(str) + + +try: + import wandb + + assert hasattr(wandb, "__version__") # verify package import not local dir + if pkg.parse_version(wandb.__version__) >= pkg.parse_version("0.12.2") and RANK in {0, -1}: + try: + wandb_login_success = wandb.login(timeout=30) + except wandb.errors.UsageError: # known non-TTY terminal issue + wandb_login_success = False + if not wandb_login_success: + wandb = None +except (ImportError, AssertionError): + wandb = None + +try: + import clearml + + assert hasattr(clearml, "__version__") # verify package import not local dir +except (ImportError, AssertionError): + clearml = None + +try: + if RANK in {0, -1}: + import comet_ml + + assert hasattr(comet_ml, "__version__") # verify package import not local dir + from utils.loggers.comet import CometLogger + + else: + comet_ml = None +except (ImportError, AssertionError): + comet_ml = None + + +class Loggers: + """Manages logging for training and validation using TensorBoard, Weights & Biases, ClearML, and Comet ML.""" + + def __init__(self, save_dir=None, weights=None, opt=None, hyp=None, logger=None, include=LOGGERS): + """Initializes YOLOv3 logging with directory, weights, options, hyperparameters, and includes specified loggers. + """ + self.save_dir = save_dir + self.weights = weights + self.opt = opt + self.hyp = hyp + self.plots = not opt.noplots # plot results + self.logger = logger # for printing results to console + self.include = include + self.keys = [ + "train/box_loss", + "train/obj_loss", + "train/cls_loss", # train loss + "metrics/precision", + "metrics/recall", + "metrics/mAP_0.5", + "metrics/mAP_0.5:0.95", # metrics + "val/box_loss", + "val/obj_loss", + "val/cls_loss", # val loss + "x/lr0", + "x/lr1", + "x/lr2", + ] # params + self.best_keys = ["best/epoch", "best/precision", "best/recall", "best/mAP_0.5", "best/mAP_0.5:0.95"] + for k in LOGGERS: + setattr(self, k, None) # init empty logger dictionary + self.csv = True # always log to csv + + # Messages + if not comet_ml: + prefix = colorstr("Comet: ") + s = f"{prefix}run 'pip install comet_ml' to automatically track and visualize YOLOv3 🚀 runs in Comet" + self.logger.info(s) + # TensorBoard + s = self.save_dir + if "tb" in self.include and not self.opt.evolve: + prefix = colorstr("TensorBoard: ") + self.logger.info(f"{prefix}Start with 'tensorboard --logdir {s.parent}', view at http://localhost:6006/") + self.tb = SummaryWriter(str(s)) + + # W&B + if wandb and "wandb" in self.include: + self.opt.hyp = self.hyp # add hyperparameters + self.wandb = WandbLogger(self.opt) + else: + self.wandb = None + + # ClearML + if clearml and "clearml" in self.include: + try: + self.clearml = ClearmlLogger(self.opt, self.hyp) + except Exception: + self.clearml = None + prefix = colorstr("ClearML: ") + LOGGER.warning( + f"{prefix}WARNING ⚠️ ClearML is installed but not configured, skipping ClearML logging." + f" See https://docs.ultralytics.com/yolov5/tutorials/clearml_logging_integration#readme" + ) + + else: + self.clearml = None + + # Comet + if comet_ml and "comet" in self.include: + if isinstance(self.opt.resume, str) and self.opt.resume.startswith("comet://"): + run_id = self.opt.resume.split("/")[-1] + self.comet_logger = CometLogger(self.opt, self.hyp, run_id=run_id) + + else: + self.comet_logger = CometLogger(self.opt, self.hyp) + + else: + self.comet_logger = None + + @property + def remote_dataset(self): + """Fetches dataset dictionary from ClearML, W&B, or Comet ML based on the logger instantiated.""" + data_dict = None + if self.clearml: + data_dict = self.clearml.data_dict + if self.wandb: + data_dict = self.wandb.data_dict + if self.comet_logger: + data_dict = self.comet_logger.data_dict + + return data_dict + + def on_train_start(self): + """Calls `on_train_start` method on comet_logger if it's available.""" + if self.comet_logger: + self.comet_logger.on_train_start() + + def on_pretrain_routine_start(self): + """Initiates pretraining routine on comet_logger if available.""" + if self.comet_logger: + self.comet_logger.on_pretrain_routine_start() + + def on_pretrain_routine_end(self, labels, names): + """Logs pretrain routine end, plots labels if enabled, updates WandB/Comet with images. + + Takes `labels` (List of int), `names` (List of str). + """ + if self.plots: + plot_labels(labels, names, self.save_dir) + paths = self.save_dir.glob("*labels*.jpg") # training labels + if self.wandb: + self.wandb.log({"Labels": [wandb.Image(str(x), caption=x.name) for x in paths]}) + # if self.clearml: + # pass # ClearML saves these images automatically using hooks + if self.comet_logger: + self.comet_logger.on_pretrain_routine_end(paths) + + def on_train_batch_end(self, model, ni, imgs, targets, paths, vals): + """Logs training batch details, plots initial batches, logs Tensorboard and WandB/ClearML if enabled.""" + log_dict = dict(zip(self.keys[:3], vals)) + # Callback runs on train batch end + # ni: number integrated batches (since train start) + if self.plots: + if ni < 3: + f = self.save_dir / f"train_batch{ni}.jpg" # filename + plot_images(imgs, targets, paths, f) + if ni == 0 and self.tb and not self.opt.sync_bn: + log_tensorboard_graph(self.tb, model, imgsz=(self.opt.imgsz, self.opt.imgsz)) + if ni == 10 and (self.wandb or self.clearml): + files = sorted(self.save_dir.glob("train*.jpg")) + if self.wandb: + self.wandb.log({"Mosaics": [wandb.Image(str(f), caption=f.name) for f in files if f.exists()]}) + if self.clearml: + self.clearml.log_debug_samples(files, title="Mosaics") + + if self.comet_logger: + self.comet_logger.on_train_batch_end(log_dict, step=ni) + + def on_train_epoch_end(self, epoch): + """Callback that updates the current epoch in wandb at the end of each training epoch.""" + if self.wandb: + self.wandb.current_epoch = epoch + 1 + + if self.comet_logger: + self.comet_logger.on_train_epoch_end(epoch) + + def on_val_start(self): + """Callback that notifies the comet logger at the start of each validation phase.""" + if self.comet_logger: + self.comet_logger.on_val_start() + + def on_val_image_end(self, pred, predn, path, names, im): + """Callback for logging a single validation image and its predictions to WandB or ClearML at the end of + validation. + """ + if self.wandb: + self.wandb.val_one_image(pred, predn, path, names, im) + if self.clearml: + self.clearml.log_image_with_boxes(path, pred, names, im) + + def on_val_batch_end(self, batch_i, im, targets, paths, shapes, out): + """Logs a single validation batch for Comet ML analytics (batch_i: int, im: tensor, targets: tensor, paths:. + + list, shapes: list, out: tensor). + """ + if self.comet_logger: + self.comet_logger.on_val_batch_end(batch_i, im, targets, paths, shapes, out) + + def on_val_end(self, nt, tp, fp, p, r, f1, ap, ap50, ap_class, confusion_matrix): + """Logs validation results and images on validation end for visual analytics.""" + if self.wandb or self.clearml: + files = sorted(self.save_dir.glob("val*.jpg")) + if self.wandb: + self.wandb.log({"Validation": [wandb.Image(str(f), caption=f.name) for f in files]}) + if self.clearml: + self.clearml.log_debug_samples(files, title="Validation") + + if self.comet_logger: + self.comet_logger.on_val_end(nt, tp, fp, p, r, f1, ap, ap50, ap_class, confusion_matrix) + + def on_fit_epoch_end(self, vals, epoch, best_fitness, fi): + """Logs epoch results to CSV if enabled, updating with vals, best_fitness, and fi.""" + x = dict(zip(self.keys, vals)) + if self.csv: + file = self.save_dir / "results.csv" + n = len(x) + 1 # number of cols + s = "" if file.exists() else (("%20s," * n % tuple(["epoch", *self.keys])).rstrip(",") + "\n") # add header + with open(file, "a") as f: + f.write(s + ("%20.5g," * n % tuple([epoch, *vals])).rstrip(",") + "\n") + + if self.tb: + for k, v in x.items(): + self.tb.add_scalar(k, v, epoch) + elif self.clearml: # log to ClearML if TensorBoard not used + for k, v in x.items(): + title, series = k.split("/") + self.clearml.task.get_logger().report_scalar(title, series, v, epoch) + + if self.wandb: + if best_fitness == fi: + best_results = [epoch, *vals[3:7]] + for i, name in enumerate(self.best_keys): + self.wandb.wandb_run.summary[name] = best_results[i] # log best results in the summary + self.wandb.log(x) + self.wandb.end_epoch() + + if self.clearml: + self.clearml.current_epoch_logged_images = set() # reset epoch image limit + self.clearml.current_epoch += 1 + + if self.comet_logger: + self.comet_logger.on_fit_epoch_end(x, epoch=epoch) + + def on_model_save(self, last, epoch, final_epoch, best_fitness, fi): + """Logs model to WandB/ClearML, considering save_period and if not final_epoch, also notes if best model so far. + """ + if (epoch + 1) % self.opt.save_period == 0 and not final_epoch and self.opt.save_period != -1: + if self.wandb: + self.wandb.log_model(last.parent, self.opt, epoch, fi, best_model=best_fitness == fi) + if self.clearml: + self.clearml.task.update_output_model( + model_path=str(last), model_name="Latest Model", auto_delete_file=False + ) + + if self.comet_logger: + self.comet_logger.on_model_save(last, epoch, final_epoch, best_fitness, fi) + + def on_train_end(self, last, best, epoch, results): + """Callback to execute at training end, saving plots of results and relevant metrics to the specified save + directory. + """ + if self.plots: + plot_results(file=self.save_dir / "results.csv") # save results.png + files = ["results.png", "confusion_matrix.png", *(f"{x}_curve.png" for x in ("F1", "PR", "P", "R"))] + files = [(self.save_dir / f) for f in files if (self.save_dir / f).exists()] # filter + self.logger.info(f"Results saved to {colorstr('bold', self.save_dir)}") + + if self.tb and not self.clearml: # These images are already captured by ClearML by now, we don't want doubles + for f in files: + self.tb.add_image(f.stem, cv2.imread(str(f))[..., ::-1], epoch, dataformats="HWC") + + if self.wandb: + self.wandb.log(dict(zip(self.keys[3:10], results))) + self.wandb.log({"Results": [wandb.Image(str(f), caption=f.name) for f in files]}) + # Calling wandb.log. TODO: Refactor this into WandbLogger.log_model + if not self.opt.evolve: + wandb.log_artifact( + str(best if best.exists() else last), + type="model", + name=f"run_{self.wandb.wandb_run.id}_model", + aliases=["latest", "best", "stripped"], + ) + self.wandb.finish_run() + + if self.clearml and not self.opt.evolve: + self.clearml.task.update_output_model( + model_path=str(best if best.exists() else last), name="Best Model", auto_delete_file=False + ) + + if self.comet_logger: + final_results = dict(zip(self.keys[3:10], results)) + self.comet_logger.on_train_end(files, self.save_dir, last, best, epoch, final_results) + + def on_params_update(self, params: dict): + """Updates experiment hyperparameters or configs in WandB and Comet logger with provided params dictionary.""" + if self.wandb: + self.wandb.wandb_run.config.update(params, allow_val_change=True) + if self.comet_logger: + self.comet_logger.on_params_update(params) + + +class GenericLogger: + """YOLOv3 General purpose logger for non-task specific logging Usage: from utils.loggers import GenericLogger; + logger = GenericLogger(...). + + Args: + opt: Run arguments + console_logger: Console logger + include: loggers to include + """ + + def __init__(self, opt, console_logger, include=("tb", "wandb")): + """Initializes a generic logger for YOLOv3, including options for TensorBoard and wandb logging.""" + self.save_dir = Path(opt.save_dir) + self.include = include + self.console_logger = console_logger + self.csv = self.save_dir / "results.csv" # CSV logger + if "tb" in self.include: + prefix = colorstr("TensorBoard: ") + self.console_logger.info( + f"{prefix}Start with 'tensorboard --logdir {self.save_dir.parent}', view at http://localhost:6006/" + ) + self.tb = SummaryWriter(str(self.save_dir)) + + if wandb and "wandb" in self.include: + self.wandb = wandb.init( + project=web_project_name(str(opt.project)), name=None if opt.name == "exp" else opt.name, config=opt + ) + else: + self.wandb = None + + def log_metrics(self, metrics, epoch): + """Logs metric dictionary to all loggers, including CSV with keys, values, and epoch.""" + if self.csv: + keys, vals = list(metrics.keys()), list(metrics.values()) + n = len(metrics) + 1 # number of cols + s = "" if self.csv.exists() else (("%23s," * n % tuple(["epoch", *keys])).rstrip(",") + "\n") # header + with open(self.csv, "a") as f: + f.write(s + ("%23.5g," * n % tuple([epoch, *vals])).rstrip(",") + "\n") + + if self.tb: + for k, v in metrics.items(): + self.tb.add_scalar(k, v, epoch) + + if self.wandb: + self.wandb.log(metrics, step=epoch) + + def log_images(self, files, name="Images", epoch=0): + """Logs images to TensorBoard and Weights & Biases, ensuring file existence and supporting various formats.""" + files = [Path(f) for f in (files if isinstance(files, (tuple, list)) else [files])] # to Path + files = [f for f in files if f.exists()] # filter by exists + + if self.tb: + for f in files: + self.tb.add_image(f.stem, cv2.imread(str(f))[..., ::-1], epoch, dataformats="HWC") + + if self.wandb: + self.wandb.log({name: [wandb.Image(str(f), caption=f.name) for f in files]}, step=epoch) + + def log_graph(self, model, imgsz=(640, 640)): + """Logs model graph to all loggers, accepts `model` and `imgsz` (default (640, 640)) as inputs.""" + if self.tb: + log_tensorboard_graph(self.tb, model, imgsz) + + def log_model(self, model_path, epoch=0, metadata=None): + """Logs model to all loggers with `model_path`, optional `epoch` (default 0), and `metadata` dictionary.""" + if metadata is None: + metadata = {} + if self.wandb: + art = wandb.Artifact(name=f"run_{wandb.run.id}_model", type="model", metadata=metadata) + art.add_file(str(model_path)) + wandb.log_artifact(art) + + def update_params(self, params): + """Updates logged parameters in wandb; `params`: dictionary to update, requires `wandb` to be initialized.""" + if self.wandb: + wandb.run.config.update(params, allow_val_change=True) + + +def log_tensorboard_graph(tb, model, imgsz=(640, 640)): + """Logs a model graph to TensorBoard using an all-zero input image of shape `(1, 3, imgsz, imgsz)`.""" + try: + p = next(model.parameters()) # for device, type + imgsz = (imgsz, imgsz) if isinstance(imgsz, int) else imgsz # expand + im = torch.zeros((1, 3, *imgsz)).to(p.device).type_as(p) # input image (WARNING: must be zeros, not empty) + with warnings.catch_warnings(): + warnings.simplefilter("ignore") # suppress jit trace warning + tb.add_graph(torch.jit.trace(de_parallel(model), im, strict=False), []) + except Exception as e: + LOGGER.warning(f"WARNING ⚠️ TensorBoard graph visualization failure {e}") + + +def web_project_name(project): + """Converts local project name to a web-friendly format by adding a suffix based on its type (classify or segment). + """ + if not project.startswith("runs/train"): + return project + suffix = "-Classify" if project.endswith("-cls") else "-Segment" if project.endswith("-seg") else "" + return f"YOLOv3{suffix}" diff --git a/utils/loggers/clearml/README.md b/utils/loggers/clearml/README.md new file mode 100644 index 0000000000..56dfcf143b --- /dev/null +++ b/utils/loggers/clearml/README.md @@ -0,0 +1,229 @@ +Ultralytics logo + +# ClearML Integration for Ultralytics YOLO + +This guide details how to integrate [ClearML](https://clear.ml/), a leading open-source MLOps platform, with your Ultralytics YOLO projects. ClearML streamlines the entire machine learning lifecycle—from experiment tracking to deployment—making it easier to manage and scale your computer vision workflows. + +Clear|MLClear|ML + +## ✨ About ClearML + +[ClearML](https://clear.ml/) is an [open-source MLOps suite](https://github.com/clearml/clearml) that enables you to manage, automate, and orchestrate machine learning workflows efficiently. Integrating ClearML with Ultralytics YOLO unlocks several advantages: + +- **Experiment Management**: Automatically track every YOLO training run, including code versions, configurations, metrics, and outputs in a centralized dashboard. Explore more about [Ultralytics experiment tracking integrations](https://docs.ultralytics.com/integrations/). +- **Data Versioning**: Manage and access your custom training datasets with ClearML Data Versioning. See how [Ultralytics datasets](https://docs.ultralytics.com/datasets/) are structured. +- **Remote Execution**: Train and monitor your YOLO models remotely using ClearML Agent on any machine or cloud instance. Learn about [model deployment options](https://docs.ultralytics.com/guides/model-deployment-options/). +- **Hyperparameter Optimization**: Use ClearML's HPO tools to optimize your model configurations and improve [mean average precision (mAP)](https://www.ultralytics.com/glossary/mean-average-precision-map). Review the [Ultralytics Hyperparameter Tuning guide](https://docs.ultralytics.com/guides/hyperparameter-tuning/). +- **Model Deployment**: Deploy trained YOLO models as scalable APIs with ClearML Serving in just a few steps. + +You can leverage any combination of these tools to fit your project requirements. + +![ClearML scalars dashboard](https://raw.githubusercontent.com/thepycoder/clearml_screenshots/main/experiment_manager_with_compare.gif) + +## 🦾 Setting Up ClearML + +To use ClearML, connect the SDK to a ClearML Server instance. You have two main options: + +1. **ClearML Hosted Service**: Register for a free account at the [ClearML Hosted Service](https://app.clear.ml/). +2. **Self-Hosted Server**: Deploy your own [ClearML Server](https://clear.ml/docs/latest/docs/deploying_clearml/clearml_server) for full control and data privacy. + +Follow these steps to get started: + +1. Install the `clearml` Python package: + + ```bash + pip install clearml + ``` + +2. Connect the ClearML SDK to your server. Generate credentials in the ClearML Web UI (Settings → Workspace → Create new credentials) and run: + + ```bash + clearml-init + ``` + + Follow the prompts to complete setup. + +Once configured, ClearML is ready to integrate with your YOLO workflows! 😎 + +## 🚀 Training YOLO With ClearML + +Enabling ClearML experiment tracking for YOLO is simple. Ensure the `clearml` package is installed: + +```bash +pip install clearml > =1.2.0 +``` + +With ClearML installed, every YOLO [training run](https://docs.ultralytics.com/modes/train/) is automatically logged. + +By default, experiments are organized under the `YOLO` project with the task name `Training`. You can customize these using the `--project` and `--name` arguments in your training command. ClearML uses `/` as a delimiter for subprojects. + +**Example Training Command:** + +```bash +# Train with default project/task names +python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache +``` + +**Example with Custom Names:** + +```bash +# Train with custom project and task names +python train.py --project my_yolo_project --name experiment_001 --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache +``` + +ClearML will automatically capture: + +- Git repository details (URL, commit ID, entry point) and local code changes +- Installed Python packages and versions +- [Hyperparameters](https://www.ultralytics.com/glossary/hyperparameter-tuning) and script arguments +- [Model checkpoints](https://www.ultralytics.com/glossary/model-weights) (use `--save-period n` to save every `n` epochs) +- Console output (stdout and stderr) +- Performance [metrics and scalars](https://docs.ultralytics.com/guides/yolo-performance-metrics/) such as mAP0.5, mAP0.5:0.95, precision, recall, losses, and learning rates +- Machine details, runtime, and creation date +- Generated plots like label correlograms and [confusion matrices](https://www.ultralytics.com/glossary/confusion-matrix) +- Debug samples: images with bounding boxes, mosaic visualizations, and validation images per epoch + +This comprehensive tracking allows you to visualize progress in the ClearML UI, compare experiments, and easily identify the best-performing models by sorting based on metrics like [mAP](https://www.ultralytics.com/glossary/mean-average-precision-map). + +## 🔗 Dataset Version Management + +Versioning datasets is essential for reproducibility and collaboration in [machine learning](https://www.ultralytics.com/glossary/machine-learning-ml) projects. ClearML Data helps manage datasets efficiently. YOLO supports using ClearML dataset IDs directly in the training command. + +![ClearML Dataset Interface](https://raw.githubusercontent.com/thepycoder/clearml_screenshots/main/clearml_data.gif) + +### Prepare Your Dataset + +YOLO uses YAML files to define dataset configurations. Datasets are typically stored in a `../datasets` directory relative to your repository root. For example, the [COCO128 dataset](https://docs.ultralytics.com/datasets/detect/coco128/) structure: + +``` +../ +├── yolov3/ # Your repository +└── datasets/ + └── coco128/ # Dataset root folder + ├── images/ + ├── labels/ + ├── coco128.yaml # Dataset configuration file <--- IMPORTANT + ├── LICENSE + └── README.txt +``` + +Ensure your custom dataset follows a similar structure. + +⚠️ **Important**: Copy the dataset `.yaml` configuration file into the **root directory** of your dataset folder (e.g., `datasets/coco128/coco128.yaml`). This YAML file must include keys like `path`, `train`, `val`, `test`, `nc` (number of classes), and `names` (class names list) for ClearML integration to function correctly. + +### Upload Your Dataset + +Navigate to your dataset's root folder and use the `clearml-data` CLI tool to upload and version it: + +```bash +# Navigate to the dataset directory +cd ../datasets/coco128 + +# Sync the dataset with ClearML (creates a versioned dataset) +clearml-data sync --project "YOLO Datasets" --name coco128 --folder . +``` + +This command creates a new ClearML dataset (or a new version if it exists) named `coco128` within the `YOLO Datasets` project. + +Alternatively, use granular commands: + +```bash +# Create a new dataset task +clearml-data create --project "YOLO Datasets" --name coco128 + +# Add files to the dataset (use '.' for current folder) +clearml-data add --files . + +# Finalize and upload the dataset version +clearml-data close +``` + +### Run Training Using a ClearML Dataset + +Once your dataset is versioned in ClearML, you can reference it directly in your YOLO training command using its unique ID. ClearML will automatically download the dataset if it's not present locally. + +```bash +# Replace with the actual ID from ClearML +python train.py --img 640 --batch 16 --epochs 3 --data clearml:// yolov5s.pt --cache < your_dataset_id > --weights +``` + +The dataset ID used will be logged as a parameter in your ClearML experiment, ensuring full traceability. + +## 👀 Hyperparameter Optimization + +ClearML's experiment tracking captures all the information needed to reproduce a run, forming the foundation for effective [hyperparameter optimization (HPO)](https://docs.ultralytics.com/guides/hyperparameter-tuning/). ClearML allows you to clone experiments, modify hyperparameters, and rerun them automatically. + +To run HPO locally, Ultralytics provides a sample script. You'll need the ID of a previously executed training task (the "template task") to use as a base. + +1. Locate the HPO script at `utils/loggers/clearml/hpo.py`. +2. Edit the script to include the `template task` ID. +3. Optionally, install [Optuna](https://optuna.org/) (`pip install optuna`) for advanced optimization strategies, or use the default `RandomSearch`. +4. Run the script: + + ```bash + python utils/loggers/clearml/hpo.py + ``` + +This script clones the template task, applies new hyperparameters suggested by the optimizer, and executes the modified task locally (`task.execute_locally()`). To run HPO remotely, change this to `task.execute()` to enqueue the tasks for a ClearML Agent. + +![HPO in ClearML UI](https://raw.githubusercontent.com/thepycoder/clearml_screenshots/main/hpo.png) + +## 🤯 Remote Execution (Advanced) + +ClearML Agent enables running experiments on remote machines, such as on-premises servers or cloud GPUs. The agent fetches tasks from a queue, replicates the original environment (code, packages, uncommitted changes), executes the task, and reports results back to the ClearML Server. + +- **Learn More**: Watch the [ClearML Agent Introduction](https://www.youtube.com/watch?v=MX3BrXnaULs) or read the [ClearML Agent documentation](https://clear.ml/docs/latest/docs/clearml_agent). + +Turn any machine into a ClearML Agent by running: + +```bash +# Replace with your queue(s) name(s) +clearml-agent daemon --queue < queues_to_listen_to > [--docker] # Use --docker to run in a Docker container +``` + +### Cloning, Editing, and Enqueuing Tasks + +You can manage remote execution tasks through the ClearML Web UI: + +1. **Clone**: Right-click an existing experiment to clone it. +2. **Edit**: Modify hyperparameters or other configurations in the cloned task. +3. **Enqueue**: Right-click the modified task and select "Enqueue" to assign it to a specific queue monitored by your agents. + +![Enqueue a task from the ClearML UI](https://raw.githubusercontent.com/thepycoder/clearml_screenshots/main/enqueue.gif) + +### Executing a Task Remotely via Code + +Alternatively, modify your training script to automatically enqueue the task for remote execution. Add `task.execute_remotely()` after the ClearML logger is initialized in `train.py`: + +```python +# ... inside train.py ... + +# Loggers setup +if RANK in {-1, 0}: + # Initialize loggers, including ClearML + loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) + + if loggers.clearml: + # Add this line to send the task to a queue for remote execution + loggers.clearml.task.execute_remotely(queue_name="my_default_queue") + + # Get dataset dictionary if using ClearML datasets + data_dict = loggers.clearml.data_dict +# ... rest of the script ... +``` + +When you run the modified `train.py`, the script execution will pause, package the code and environment, and send the task to the specified queue (`my_default_queue`). A ClearML Agent listening to that queue will then pick it up and run it. + +### Autoscaling Agents + +ClearML also provides **Autoscalers** that automatically provision and manage cloud instances (AWS, GCP, Azure) as ClearML Agents based on queue load. Machines spin up when tasks are pending and shut down when idle, optimizing resource usage and cost. + +Learn how to set up autoscalers: + +[![Watch the Autoscaler setup video](https://img.youtube.com/vi/j4XVMAaUt3E/0.jpg)](https://youtu.be/j4XVMAaUt3E) + +## 👋 Contribute + +Contributions are welcome! If you'd like to improve this integration or suggest features, please see the Ultralytics [Contributing Guide](https://docs.ultralytics.com/help/contributing/) and submit a Pull Request. Thank you to all our contributors! + +[![Ultralytics open-source contributors](https://raw.githubusercontent.com/ultralytics/assets/main/im/image-contributors.png)](https://github.com/ultralytics/ultralytics/graphs/contributors) diff --git a/utils/loggers/clearml/__init__.py b/utils/loggers/clearml/__init__.py new file mode 100644 index 0000000000..77a19dcf0f --- /dev/null +++ b/utils/loggers/clearml/__init__.py @@ -0,0 +1 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license diff --git a/utils/loggers/clearml/clearml_utils.py b/utils/loggers/clearml/clearml_utils.py new file mode 100644 index 0000000000..872b85ca8c --- /dev/null +++ b/utils/loggers/clearml/clearml_utils.py @@ -0,0 +1,168 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Main Logger class for ClearML experiment tracking.""" + +import glob +import re +from pathlib import Path + +import numpy as np +import yaml +from ultralytics.utils.plotting import Annotator, colors + +try: + import clearml + from clearml import Dataset, Task + + assert hasattr(clearml, "__version__") # verify package import not local dir +except (ImportError, AssertionError): + clearml = None + + +def construct_dataset(clearml_info_string): + """Load in a clearml dataset and fill the internal data_dict with its contents.""" + dataset_id = clearml_info_string.replace("clearml://", "") + dataset = Dataset.get(dataset_id=dataset_id) + dataset_root_path = Path(dataset.get_local_copy()) + + # We'll search for the yaml file definition in the dataset + yaml_filenames = list(glob.glob(str(dataset_root_path / "*.yaml")) + glob.glob(str(dataset_root_path / "*.yml"))) + if len(yaml_filenames) > 1: + raise ValueError( + "More than one yaml file was found in the dataset root, cannot determine which one contains " + "the dataset definition this way." + ) + elif not yaml_filenames: + raise ValueError( + "No yaml definition found in dataset root path, check that there is a correct yaml file " + "inside the dataset root path." + ) + with open(yaml_filenames[0]) as f: + dataset_definition = yaml.safe_load(f) + + assert set(dataset_definition.keys()).issuperset({"train", "test", "val", "nc", "names"}), ( + "The right keys were not found in the yaml file, make sure it at least has the following keys: ('train', 'test', 'val', 'nc', 'names')" + ) + + data_dict = { + "train": ( + str((dataset_root_path / dataset_definition["train"]).resolve()) if dataset_definition["train"] else None + ) + } + data_dict["test"] = ( + str((dataset_root_path / dataset_definition["test"]).resolve()) if dataset_definition["test"] else None + ) + data_dict["val"] = ( + str((dataset_root_path / dataset_definition["val"]).resolve()) if dataset_definition["val"] else None + ) + data_dict["nc"] = dataset_definition["nc"] + data_dict["names"] = dataset_definition["names"] + + return data_dict + + +class ClearmlLogger: + """Log training runs, datasets, models, and predictions to ClearML. + + This logger sends information to ClearML at app.clear.ml or to your own hosted server. By default, this information + includes hyperparameters, system configuration and metrics, model metrics, code information and basic data metrics + and analyses. + + By providing additional command line arguments to train.py, datasets, models and predictions can also be logged. + """ + + def __init__(self, opt, hyp): + """- Initialize ClearML Task, this object will capture the experiment - Upload dataset version to ClearML Data + if opt.upload_dataset is True. + + Args: + opt (namespace) -- Commandline arguments for this run: hyp (dict) -- Hyperparameters for this run + """ + self.current_epoch = 0 + # Keep tracked of amount of logged images to enforce a limit + self.current_epoch_logged_images = set() + # Maximum number of images to log to clearML per epoch + self.max_imgs_to_log_per_epoch = 16 + # Get the interval of epochs when bounding box images should be logged + self.bbox_interval = opt.bbox_interval + self.clearml = clearml + self.task = None + self.data_dict = None + if self.clearml: + self.task = Task.init( + project_name=opt.project if opt.project != "runs/train" else "YOLOv3", + task_name=opt.name if opt.name != "exp" else "Training", + tags=["YOLOv3"], + output_uri=True, + reuse_last_task_id=opt.exist_ok, + auto_connect_frameworks={"pytorch": False}, + # We disconnect pytorch auto-detection, because we added manual model save points in the code + ) + # ClearML's hooks will already grab all general parameters + # Only the hyperparameters coming from the yaml config file + # will have to be added manually! + self.task.connect(hyp, name="Hyperparameters") + self.task.connect(opt, name="Args") + + # Make sure the code is easily remotely runnable by setting the docker image to use by the remote agent + self.task.set_base_docker( + "ultralytics/yolov5:latest", + docker_arguments='--ipc=host -e="CLEARML_AGENT_SKIP_PYTHON_ENV_INSTALL=1"', + docker_setup_bash_script="pip install clearml", + ) + + # Get ClearML Dataset Version if requested + if opt.data.startswith("clearml://"): + # data_dict should have the following keys: + # names, nc (number of classes), test, train, val (all three relative paths to ../datasets) + self.data_dict = construct_dataset(opt.data) + # Set data to data_dict because wandb will crash without this information and opt is the best way + # to give it to them + opt.data = self.data_dict + + def log_debug_samples(self, files, title="Debug Samples"): + """Log files (images) as debug samples in the ClearML task. + + Args: + files (List(PosixPath)) a list of file paths in PosixPath format: title (str) A title that groups together + images with the same values + """ + for f in files: + if f.exists(): + it = re.search(r"_batch(\d+)", f.name) + iteration = int(it.groups()[0]) if it else 0 + self.task.get_logger().report_image( + title=title, series=f.name.replace(it.group(), ""), local_path=str(f), iteration=iteration + ) + + def log_image_with_boxes(self, image_path, boxes, class_names, image, conf_threshold=0.25): + """Draw the bounding boxes on a single image and report the result as a ClearML debug sample. + + Args: + image_path (PosixPath) the path the original image file + boxes (list): list of scaled predictions in the format - [xmin, ymin, xmax, ymax, confidence, class] + class_names (dict): dict containing mapping of class int to class name + image (Tensor): A torch tensor containing the actual image data + """ + if ( + len(self.current_epoch_logged_images) < self.max_imgs_to_log_per_epoch + and self.current_epoch >= 0 + and (self.current_epoch % self.bbox_interval == 0 and image_path not in self.current_epoch_logged_images) + ): + im = np.ascontiguousarray(np.moveaxis(image.mul(255).clamp(0, 255).byte().cpu().numpy(), 0, 2)) + annotator = Annotator(im=im, pil=True) + for i, (conf, class_nr, box) in enumerate(zip(boxes[:, 4], boxes[:, 5], boxes[:, :4])): + color = colors(i) + + class_name = class_names[int(class_nr)] + confidence_percentage = round(float(conf) * 100, 2) + label = f"{class_name}: {confidence_percentage}%" + + if conf > conf_threshold: + annotator.rectangle(box.cpu().numpy(), outline=color) + annotator.box_label(box.cpu().numpy(), label=label, color=color) + + annotated_image = annotator.result() + self.task.get_logger().report_image( + title="Bounding Boxes", series=image_path.name, iteration=self.current_epoch, image=annotated_image + ) + self.current_epoch_logged_images.add(image_path) diff --git a/utils/loggers/clearml/hpo.py b/utils/loggers/clearml/hpo.py new file mode 100644 index 0000000000..7ab3d80557 --- /dev/null +++ b/utils/loggers/clearml/hpo.py @@ -0,0 +1,90 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +from clearml import Task + +# Connecting ClearML with the current process, +# from here on everything is logged automatically +from clearml.automation import HyperParameterOptimizer, UniformParameterRange +from clearml.automation.optuna import OptimizerOptuna + +task = Task.init( + project_name="Hyper-Parameter Optimization", + task_name="YOLOv3", + task_type=Task.TaskTypes.optimizer, + reuse_last_task_id=False, +) + +# Example use case: +optimizer = HyperParameterOptimizer( + # This is the experiment we want to optimize + base_task_id="", + # here we define the hyper-parameters to optimize + # Notice: The parameter name should exactly match what you see in the UI: / + # For Example, here we see in the base experiment a section Named: "General" + # under it a parameter named "batch_size", this becomes "General/batch_size" + # If you have `argparse` for example, then arguments will appear under the "Args" section, + # and you should instead pass "Args/batch_size" + hyper_parameters=[ + UniformParameterRange("Hyperparameters/lr0", min_value=1e-5, max_value=1e-1), + UniformParameterRange("Hyperparameters/lrf", min_value=0.01, max_value=1.0), + UniformParameterRange("Hyperparameters/momentum", min_value=0.6, max_value=0.98), + UniformParameterRange("Hyperparameters/weight_decay", min_value=0.0, max_value=0.001), + UniformParameterRange("Hyperparameters/warmup_epochs", min_value=0.0, max_value=5.0), + UniformParameterRange("Hyperparameters/warmup_momentum", min_value=0.0, max_value=0.95), + UniformParameterRange("Hyperparameters/warmup_bias_lr", min_value=0.0, max_value=0.2), + UniformParameterRange("Hyperparameters/box", min_value=0.02, max_value=0.2), + UniformParameterRange("Hyperparameters/cls", min_value=0.2, max_value=4.0), + UniformParameterRange("Hyperparameters/cls_pw", min_value=0.5, max_value=2.0), + UniformParameterRange("Hyperparameters/obj", min_value=0.2, max_value=4.0), + UniformParameterRange("Hyperparameters/obj_pw", min_value=0.5, max_value=2.0), + UniformParameterRange("Hyperparameters/iou_t", min_value=0.1, max_value=0.7), + UniformParameterRange("Hyperparameters/anchor_t", min_value=2.0, max_value=8.0), + UniformParameterRange("Hyperparameters/fl_gamma", min_value=0.0, max_value=4.0), + UniformParameterRange("Hyperparameters/hsv_h", min_value=0.0, max_value=0.1), + UniformParameterRange("Hyperparameters/hsv_s", min_value=0.0, max_value=0.9), + UniformParameterRange("Hyperparameters/hsv_v", min_value=0.0, max_value=0.9), + UniformParameterRange("Hyperparameters/degrees", min_value=0.0, max_value=45.0), + UniformParameterRange("Hyperparameters/translate", min_value=0.0, max_value=0.9), + UniformParameterRange("Hyperparameters/scale", min_value=0.0, max_value=0.9), + UniformParameterRange("Hyperparameters/shear", min_value=0.0, max_value=10.0), + UniformParameterRange("Hyperparameters/perspective", min_value=0.0, max_value=0.001), + UniformParameterRange("Hyperparameters/flipud", min_value=0.0, max_value=1.0), + UniformParameterRange("Hyperparameters/fliplr", min_value=0.0, max_value=1.0), + UniformParameterRange("Hyperparameters/mosaic", min_value=0.0, max_value=1.0), + UniformParameterRange("Hyperparameters/mixup", min_value=0.0, max_value=1.0), + UniformParameterRange("Hyperparameters/copy_paste", min_value=0.0, max_value=1.0), + ], + # this is the objective metric we want to maximize/minimize + objective_metric_title="metrics", + objective_metric_series="mAP_0.5", + # now we decide if we want to maximize it or minimize it (accuracy we maximize) + objective_metric_sign="max", + # let us limit the number of concurrent experiments, + # this in turn will make sure we do dont bombard the scheduler with experiments. + # if we have an auto-scaler connected, this, by proxy, will limit the number of machine + max_number_of_concurrent_tasks=1, + # this is the optimizer class (actually doing the optimization) + # Currently, we can choose from GridSearch, RandomSearch or OptimizerBOHB (Bayesian optimization Hyper-Band) + optimizer_class=OptimizerOptuna, + # If specified only the top K performing Tasks will be kept, the others will be automatically archived + save_top_k_tasks_only=5, # 5, + compute_time_limit=None, + total_max_jobs=20, + min_iteration_per_job=None, + max_iteration_per_job=None, +) + +# report every 10 seconds, this is way too often, but we are testing here +optimizer.set_report_period(10 / 60) +# You can also use the line below instead to run all the optimizer tasks locally, without using queues or agent +# an_optimizer.start_locally(job_complete_callback=job_complete_callback) +# set the time limit for the optimization process (2 hours) +optimizer.set_time_limit(in_minutes=120.0) +# Start the optimization process in the local environment +optimizer.start_locally() +# wait until process is done (notice we are controlling the optimization process in the background) +optimizer.wait() +# make sure background optimization stopped +optimizer.stop() + +print("We are done, good bye") diff --git a/utils/loggers/comet/README.md b/utils/loggers/comet/README.md new file mode 100644 index 0000000000..7df41899a3 --- /dev/null +++ b/utils/loggers/comet/README.md @@ -0,0 +1,284 @@ +Ultralytics logo + + + +# YOLOv3 Integration with Comet + +This guide explains how to seamlessly integrate YOLOv3 with [Comet experiment tracking](https://www.comet.com/site/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github) for enhanced experiment management, model optimization, and collaborative workflows. + +## ℹ️ About Comet + +[Comet](https://www.comet.com/site/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github) is a leading platform for tracking, visualizing, and optimizing machine learning and deep learning experiments. It empowers data scientists, engineers, and teams to: + +- Monitor model metrics in real time +- Save and version hyperparameters, datasets, and model checkpoints +- Visualize predictions using [Comet Custom Panels](https://www.comet.com/docs/v2/guides/comet-dashboard/code-panels/about-panels/?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github) +- Collaborate and share results efficiently + +Comet ensures your work is always accessible and simplifies team collaboration. + +## 🚀 Getting Started + +### Install Comet + +Install Comet using pip: + +```shell +pip install comet_ml +``` + +### Configure Comet Credentials + +You can set up Comet credentials for YOLOv3 in two ways: + +1. **Environment Variables** + Set your credentials in your environment: + + ```shell + export COMET_API_KEY=YOUR_COMET_API_KEY + export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # Defaults to 'yolov3' if not set + ``` + +2. **Comet Configuration File** + Create a `.comet.config` file in your working directory: + + ``` + [comet] + api_key=YOUR_API_KEY + project_name=YOUR_PROJECT_NAME # Defaults to 'yolov3' if not set + ``` + +### Run the Training Script + +Run the [Ultralytics training script](https://docs.ultralytics.com/modes/train/) as usual. Comet will automatically integrate with YOLOv3. + +```shell +# Train YOLOv3 on COCO128 for 5 epochs +python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov3.pt +``` + +Comet will automatically log your hyperparameters, command-line arguments, training metrics, and validation metrics. You can analyze your runs in the Comet UI. For more on metrics like mAP and Recall, see the [YOLO Performance Metrics guide](https://docs.ultralytics.com/guides/yolo-performance-metrics/). + +Comet UI showing YOLO training run + +## ✨ Try an Example! + +Explore a [completed YOLO run in the Comet UI](https://www.comet.com/examples/comet-example-yolov5/a0e29e0e9b984e4a822db2a62d0cb357?experiment-tab=chart&showOutliers=true&smoothing=0&transformY=smoothing&xAxis=step&utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github). + +Or, try it yourself in Colab: + +[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/comet-ml/comet-examples/blob/master/integrations/model-training/yolov5/notebooks/Comet_and_YOLOv5.ipynb) + +## 📊 Automatic Logging + +By default, Comet logs the following during YOLOv3 training: + +### Metrics + +- Box Loss, Object Loss, Classification Loss (training and validation) +- mAP0.5, mAP0.5:0.95 (validation) +- Precision and Recall (validation) + +### Parameters + +- All model hyperparameters +- All command-line options used during training + +### Visualizations + +- Confusion matrix of model predictions on validation data +- PR and F1 curves for all classes +- Correlogram of class labels + +## ⚙️ Configure Comet Logging + +You can customize Comet logging using environment variables: + +```shell +# Comet Logging Configuration +export COMET_MODE=online # 'online' or 'offline'. Defaults to online. +export COMET_MODEL_NAME=YOUR_MODEL_NAME # Name for the saved model. Defaults to yolov3. +export COMET_LOG_CONFUSION_MATRIX=false # Disable confusion matrix logging. Defaults to true. +export COMET_MAX_IMAGE_UPLOADS=NUMBER # Max prediction images to log. Defaults to 100. +export COMET_LOG_PER_CLASS_METRICS=true # Log per-class metrics. Defaults to false. +export COMET_DEFAULT_CHECKPOINT_FILENAME=your_checkpoint.pt # Checkpoint for resuming. Defaults to 'last.pt'. +export COMET_LOG_BATCH_LEVEL_METRICS=true # Log batch-level metrics. Defaults to false. +export COMET_LOG_PREDICTIONS=true # Set to false to disable prediction logging. Defaults to true. +``` + +### Logging Checkpoints with Comet + +By default, [model checkpoints](https://docs.ultralytics.com/guides/model-training-tips/#checkpoints) are not uploaded to Comet. Enable checkpoint logging by using the `--save-period` argument: + +```shell +python train.py \ + --img 640 \ + --batch 16 \ + --epochs 5 \ + --data coco128.yaml \ + --weights yolov3.pt \ + --save-period 1 # Save checkpoints every epoch +``` + +### Logging Model Predictions + +Model predictions (images, ground truth, bounding boxes) are logged to Comet by default. Control frequency with the `--bbox_interval` argument (log every Nth batch per epoch). Visualize predictions using Comet's Object Detection Custom Panel. + +**Note:** The YOLOv3 validation dataloader defaults to a batch size of 32. Adjust logging frequency as needed. + +See an [example Comet project using the Object Detection Panel](https://www.comet.com/examples/comet-example-yolov5?shareable=YcwMiJaZSXfcEXpGOHDD12vA1&utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github). + +```shell +python train.py \ + --img 640 \ + --batch 16 \ + --epochs 5 \ + --data coco128.yaml \ + --weights yolov3.pt \ + --bbox_interval 2 # Log predictions every 2nd batch per epoch +``` + +#### Controlling the Number of Prediction Images Logged + +Comet logs up to 100 validation images by default. Adjust this with the `COMET_MAX_IMAGE_UPLOADS` variable: + +```shell +env COMET_MAX_IMAGE_UPLOADS=200 python train.py \ + --img 640 \ + --batch 16 \ + --epochs 5 \ + --data coco128.yaml \ + --weights yolov3.pt \ + --bbox_interval 1 +``` + +#### Logging Class-Level Metrics + +Enable per-class mAP, precision, recall, and F1-score logging: + +```shell +env COMET_LOG_PER_CLASS_METRICS=true python train.py \ + --img 640 \ + --batch 16 \ + --epochs 5 \ + --data coco128.yaml \ + --weights yolov3.pt +``` + +## 💾 Uploading a Dataset to Comet Artifacts + +Store your [datasets](https://docs.ultralytics.com/datasets/) using [Comet Artifacts](https://www.comet.com/docs/v2/guides/data-management/using-artifacts/#learn-more?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github) by adding the `--upload_dataset` flag. Ensure your dataset follows the structure in the [Ultralytics dataset guide](https://docs.ultralytics.com/datasets/). The dataset config YAML file must match the format of `coco128.yaml`. + +```shell +python train.py \ + --img 640 \ + --batch 16 \ + --epochs 5 \ + --data coco128.yaml \ + --weights yolov3.pt \ + --upload_dataset # Uploads the dataset specified in coco128.yaml +``` + +Find uploaded datasets in the Artifacts tab in your Comet Workspace. +Comet Artifacts tab showing uploaded dataset + +Preview data directly in the Comet UI. +Comet UI previewing dataset artifact + +Artifacts are versioned and support metadata. Comet automatically logs metadata from your dataset YAML file. +Comet Artifact metadata view + +### Using a Saved Artifact + +To use a dataset stored in Comet Artifacts, update the `path` variable in your dataset YAML file to the Artifact resource URL: + +```yaml +# contents of artifact.yaml +path: "comet:///:" +train: images/train # train images (relative to 'path') +val: images/val # val images (relative to 'path') +# ... other dataset configurations +``` + +Then, pass this config file to your training script: + +```shell +python train.py \ + --img 640 \ + --batch 16 \ + --epochs 5 \ + --data artifact.yaml \ + --weights yolov3.pt +``` + +Artifacts enable tracking data lineage throughout your workflow. The graph below shows experiments using the uploaded dataset. +Comet Artifact lineage graph + +## ▶️ Resuming a Training Run + +If your training run is interrupted, resume it with the `--resume` flag and the Comet Run Path (`comet:////`). This restores the model state, hyperparameters, arguments, and downloads necessary Comet Artifacts. Logging continues to the same Comet Experiment. + +```shell +python train.py \ + --resume "comet://YOUR_WORKSPACE/YOUR_WORKSPACE/EXPERIMENT_ID" +``` + +## 🔍 Hyperparameter Search with the Comet Optimizer + +YOLOv3 integrates with Comet's Optimizer for [hyperparameter tuning](https://docs.ultralytics.com/guides/hyperparameter-tuning/) and visualization. + +### Configuring an Optimizer Sweep + +Create a JSON config file for the sweep (e.g., `utils/loggers/comet/optimizer_config.json`): + +```json +{ + "spec": { + "maxCombo": 10, + "objective": "minimize", + "metric": "metrics/mAP_0.5", + "algorithm": "bayes", + "parameters": { + "lr0": { "type": "float", "min": 0.001, "max": 0.01 }, + "momentum": { "type": "float", "min": 0.85, "max": 0.95 } + } + }, + "name": "YOLOv3 Hyperparameter Sweep", + "trials": 1 +} +``` + +Run the sweep with the `hpo.py` script: + +```shell +python utils/loggers/comet/hpo.py \ + --comet_optimizer_config utils/loggers/comet/optimizer_config.json +``` + +The `hpo.py` script accepts the same arguments as `train.py`. Add any additional arguments as needed: + +```shell +python utils/loggers/comet/hpo.py \ + --comet_optimizer_config utils/loggers/comet/optimizer_config.json \ + --save-period 1 \ + --bbox_interval 1 +``` + +### Running a Sweep in Parallel + +Use the `comet optimizer` command to run the sweep with multiple workers: + +```shell +comet optimizer -j \ + utils/loggers/comet/hpo.py NUMBER_OF_WORKERS utils/loggers/comet/optimizer_config.json +``` + +### Visualizing Results + +Comet provides rich visualizations for sweep results. Explore a [project with a completed sweep](https://www.comet.com/examples/comet-example-yolov5/view/PrlArHGuuhDTKC1UuBmTtOSXD/panels?utm_source=yolov5&utm_medium=partner&utm_campaign=partner_yolov5_2022&utm_content=github). + +Comet UI showing hyperparameter optimization results + +## 🤝 Contributing + +Contributions to this integration are welcome! See the [Ultralytics Contributing Guide](https://docs.ultralytics.com/help/contributing/) for details on how to get involved. Thank you for helping improve the Ultralytics ecosystem! diff --git a/utils/loggers/comet/__init__.py b/utils/loggers/comet/__init__.py new file mode 100644 index 0000000000..b89cf02eea --- /dev/null +++ b/utils/loggers/comet/__init__.py @@ -0,0 +1,555 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +import glob +import json +import logging +import os +import sys +from pathlib import Path + +logger = logging.getLogger(__name__) + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[3] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH + +try: + import comet_ml + + # Project Configuration + config = comet_ml.config.get_config() + COMET_PROJECT_NAME = config.get_string(os.getenv("COMET_PROJECT_NAME"), "comet.project_name", default="yolov5") +except ImportError: + comet_ml = None + COMET_PROJECT_NAME = None + +import PIL +import torch +import torchvision.transforms as T +import yaml + +from utils.dataloaders import img2label_paths +from utils.general import check_dataset, scale_boxes, xywh2xyxy +from utils.metrics import box_iou + +COMET_PREFIX = "comet://" + +COMET_MODE = os.getenv("COMET_MODE", "online") + +# Model Saving Settings +COMET_MODEL_NAME = os.getenv("COMET_MODEL_NAME", "yolov5") + +# Dataset Artifact Settings +COMET_UPLOAD_DATASET = os.getenv("COMET_UPLOAD_DATASET", "false").lower() == "true" + +# Evaluation Settings +COMET_LOG_CONFUSION_MATRIX = os.getenv("COMET_LOG_CONFUSION_MATRIX", "true").lower() == "true" +COMET_LOG_PREDICTIONS = os.getenv("COMET_LOG_PREDICTIONS", "true").lower() == "true" +COMET_MAX_IMAGE_UPLOADS = int(os.getenv("COMET_MAX_IMAGE_UPLOADS", 100)) + +# Confusion Matrix Settings +CONF_THRES = float(os.getenv("CONF_THRES", 0.001)) +IOU_THRES = float(os.getenv("IOU_THRES", 0.6)) + +# Batch Logging Settings +COMET_LOG_BATCH_METRICS = os.getenv("COMET_LOG_BATCH_METRICS", "false").lower() == "true" +COMET_BATCH_LOGGING_INTERVAL = os.getenv("COMET_BATCH_LOGGING_INTERVAL", 1) +COMET_PREDICTION_LOGGING_INTERVAL = os.getenv("COMET_PREDICTION_LOGGING_INTERVAL", 1) +COMET_LOG_PER_CLASS_METRICS = os.getenv("COMET_LOG_PER_CLASS_METRICS", "false").lower() == "true" + +RANK = int(os.getenv("RANK", -1)) + +to_pil = T.ToPILImage() + + +class CometLogger: + """Log metrics, parameters, source code, models and much more with Comet.""" + + def __init__(self, opt, hyp, run_id=None, job_type="Training", **experiment_kwargs) -> None: + """Initialize the CometLogger instance with experiment configurations and hyperparameters for logging.""" + self.job_type = job_type + self.opt = opt + self.hyp = hyp + + # Comet Flags + self.comet_mode = COMET_MODE + + self.save_model = opt.save_period > -1 + self.model_name = COMET_MODEL_NAME + + # Batch Logging Settings + self.log_batch_metrics = COMET_LOG_BATCH_METRICS + self.comet_log_batch_interval = COMET_BATCH_LOGGING_INTERVAL + + # Dataset Artifact Settings + self.upload_dataset = self.opt.upload_dataset or COMET_UPLOAD_DATASET + self.resume = self.opt.resume + + self.default_experiment_kwargs = { + "log_code": False, + "log_env_gpu": True, + "log_env_cpu": True, + "project_name": COMET_PROJECT_NAME, + } | experiment_kwargs + self.experiment = self._get_experiment(self.comet_mode, run_id) + self.experiment.set_name(self.opt.name) + + self.data_dict = self.check_dataset(self.opt.data) + self.class_names = self.data_dict["names"] + self.num_classes = self.data_dict["nc"] + + self.logged_images_count = 0 + self.max_images = COMET_MAX_IMAGE_UPLOADS + + if run_id is None: + self.experiment.log_other("Created from", "YOLOv3") + if not isinstance(self.experiment, comet_ml.OfflineExperiment): + workspace, project_name, experiment_id = self.experiment.url.split("/")[-3:] + self.experiment.log_other( + "Run Path", + f"{workspace}/{project_name}/{experiment_id}", + ) + self.log_parameters(vars(opt)) + self.log_parameters(self.opt.hyp) + self.log_asset_data( + self.opt.hyp, + name="hyperparameters.json", + metadata={"type": "hyp-config-file"}, + ) + self.log_asset( + f"{self.opt.save_dir}/opt.yaml", + metadata={"type": "opt-config-file"}, + ) + + self.comet_log_confusion_matrix = COMET_LOG_CONFUSION_MATRIX + + if hasattr(self.opt, "conf_thres"): + self.conf_thres = self.opt.conf_thres + else: + self.conf_thres = CONF_THRES + if hasattr(self.opt, "iou_thres"): + self.iou_thres = self.opt.iou_thres + else: + self.iou_thres = IOU_THRES + + self.log_parameters({"val_iou_threshold": self.iou_thres, "val_conf_threshold": self.conf_thres}) + + self.comet_log_predictions = COMET_LOG_PREDICTIONS + if self.opt.bbox_interval == -1: + self.comet_log_prediction_interval = 1 if self.opt.epochs < 10 else self.opt.epochs // 10 + else: + self.comet_log_prediction_interval = self.opt.bbox_interval + + if self.comet_log_predictions: + self.metadata_dict = {} + self.logged_image_names = [] + + self.comet_log_per_class_metrics = COMET_LOG_PER_CLASS_METRICS + + self.experiment.log_others( + { + "comet_mode": COMET_MODE, + "comet_max_image_uploads": COMET_MAX_IMAGE_UPLOADS, + "comet_log_per_class_metrics": COMET_LOG_PER_CLASS_METRICS, + "comet_log_batch_metrics": COMET_LOG_BATCH_METRICS, + "comet_log_confusion_matrix": COMET_LOG_CONFUSION_MATRIX, + "comet_model_name": COMET_MODEL_NAME, + } + ) + + # Check if running the Experiment with the Comet Optimizer + if hasattr(self.opt, "comet_optimizer_id"): + self.experiment.log_other("optimizer_id", self.opt.comet_optimizer_id) + self.experiment.log_other("optimizer_objective", self.opt.comet_optimizer_objective) + self.experiment.log_other("optimizer_metric", self.opt.comet_optimizer_metric) + self.experiment.log_other("optimizer_parameters", json.dumps(self.hyp)) + + def _get_experiment(self, mode, experiment_id=None): + """Returns a comet_ml Experiment object, either online or offline, existing or new, based on mode and + experiment_id. + """ + if mode == "offline": + return ( + comet_ml.ExistingOfflineExperiment( + previous_experiment=experiment_id, + **self.default_experiment_kwargs, + ) + if experiment_id is not None + else comet_ml.OfflineExperiment( + **self.default_experiment_kwargs, + ) + ) + try: + if experiment_id is not None: + return comet_ml.ExistingExperiment( + previous_experiment=experiment_id, + **self.default_experiment_kwargs, + ) + + return comet_ml.Experiment(**self.default_experiment_kwargs) + + except ValueError: + logger.warning( + "COMET WARNING: " + "Comet credentials have not been set. " + "Comet will default to offline logging. " + "Please set your credentials to enable online logging." + ) + return self._get_experiment("offline", experiment_id) + + return + + def log_metrics(self, log_dict, **kwargs): + """Logs metrics to the current experiment using a dictionary of metric names and values.""" + self.experiment.log_metrics(log_dict, **kwargs) + + def log_parameters(self, log_dict, **kwargs): + """Logs parameters to the current experiment using a dictionary of parameter names and values.""" + self.experiment.log_parameters(log_dict, **kwargs) + + def log_asset(self, asset_path, **kwargs): + """Logs a file or directory at `asset_path` to the current experiment, supporting additional `kwargs`.""" + self.experiment.log_asset(asset_path, **kwargs) + + def log_asset_data(self, asset, **kwargs): + """Logs binary asset data to the current experiment, supporting additional `kwargs`.""" + self.experiment.log_asset_data(asset, **kwargs) + + def log_image(self, img, **kwargs): + """Logs an image to the current experiment with optional `kwargs` for additional parameters.""" + self.experiment.log_image(img, **kwargs) + + def log_model(self, path, opt, epoch, fitness_score, best_model=False): + """Logs a model's state at a given epoch, fitness, and optionality as best, requiring path, options, epoch, and + fitness score. + """ + if not self.save_model: + return + + model_metadata = { + "fitness_score": fitness_score[-1], + "epochs_trained": epoch + 1, + "save_period": opt.save_period, + "total_epochs": opt.epochs, + } + + model_files = glob.glob(f"{path}/*.pt") + for model_path in model_files: + name = Path(model_path).name + + self.experiment.log_model( + self.model_name, + file_or_folder=model_path, + file_name=name, + metadata=model_metadata, + overwrite=True, + ) + + def check_dataset(self, data_file): + """Loads and validates the dataset configuration from a YAML file.""" + with open(data_file) as f: + data_config = yaml.safe_load(f) + + path = data_config.get("path") + if path and path.startswith(COMET_PREFIX): + path = data_config["path"].replace(COMET_PREFIX, "") + return self.download_dataset_artifact(path) + self.log_asset(self.opt.data, metadata={"type": "data-config-file"}) + + return check_dataset(data_file) + + def log_predictions(self, image, labelsn, path, shape, predn): + """Logs filtered predictions with IoU above a threshold, discarding if max image log count reached.""" + if self.logged_images_count >= self.max_images: + return + detections = predn[predn[:, 4] > self.conf_thres] + iou = box_iou(labelsn[:, 1:], detections[:, :4]) + mask, _ = torch.where(iou > self.iou_thres) + if len(mask) == 0: + return + + filtered_detections = detections[mask] + filtered_labels = labelsn[mask] + + image_id = path.split("/")[-1].split(".")[0] + image_name = f"{image_id}_curr_epoch_{self.experiment.curr_epoch}" + if image_name not in self.logged_image_names: + native_scale_image = PIL.Image.open(path) + self.log_image(native_scale_image, name=image_name) + self.logged_image_names.append(image_name) + + metadata = [ + { + "label": f"{self.class_names[int(cls)]}-gt", + "score": 100, + "box": {"x": xyxy[0], "y": xyxy[1], "x2": xyxy[2], "y2": xyxy[3]}, + } + for cls, *xyxy in filtered_labels.tolist() + ] + metadata.extend( + { + "label": f"{self.class_names[int(cls)]}", + "score": conf * 100, + "box": {"x": xyxy[0], "y": xyxy[1], "x2": xyxy[2], "y2": xyxy[3]}, + } + for *xyxy, conf, cls in filtered_detections.tolist() + ) + self.metadata_dict[image_name] = metadata + self.logged_images_count += 1 + + return + + def preprocess_prediction(self, image, labels, shape, pred): + """Preprocesses predictions by adjusting label and prediction shapes; `image`: input image, `labels`: true + labels, `shape`: image shape, `pred`: model predictions. + """ + nl, _ = labels.shape[0], pred.shape[0] + + # Predictions + if self.opt.single_cls: + pred[:, 5] = 0 + + predn = pred.clone() + scale_boxes(image.shape[1:], predn[:, :4], shape[0], shape[1]) + + labelsn = None + if nl: + tbox = xywh2xyxy(labels[:, 1:5]) # target boxes + scale_boxes(image.shape[1:], tbox, shape[0], shape[1]) # native-space labels + labelsn = torch.cat((labels[:, 0:1], tbox), 1) # native-space labels + scale_boxes(image.shape[1:], predn[:, :4], shape[0], shape[1]) # native-space pred + + return predn, labelsn + + def add_assets_to_artifact(self, artifact, path, asset_path, split): + """Adds asset images and labels from `asset_path` to `artifact` by `split`, ensuring paths are sorted.""" + img_paths = sorted(glob.glob(f"{asset_path}/*")) + label_paths = img2label_paths(img_paths) + + for image_file, label_file in zip(img_paths, label_paths): + image_logical_path, label_logical_path = map(lambda x: os.path.relpath(x, path), [image_file, label_file]) + + try: + artifact.add( + image_file, + logical_path=image_logical_path, + metadata={"split": split}, + ) + artifact.add( + label_file, + logical_path=label_logical_path, + metadata={"split": split}, + ) + except ValueError as e: + logger.error("COMET ERROR: Error adding file to Artifact. Skipping file.") + logger.error(f"COMET ERROR: {e}") + continue + + return artifact + + def upload_dataset_artifact(self): + """Uploads dataset to Comet as an artifact with optional custom dataset name, defaulting to 'yolov5-dataset'.""" + dataset_name = self.data_dict.get("dataset_name", "yolov5-dataset") + path = str((ROOT / Path(self.data_dict["path"])).resolve()) + + metadata = self.data_dict.copy() + for key in ["train", "val", "test"]: + split_path = metadata.get(key) + if split_path is not None: + metadata[key] = split_path.replace(path, "") + + artifact = comet_ml.Artifact(name=dataset_name, artifact_type="dataset", metadata=metadata) + for key in metadata.keys(): + if key in ["train", "val", "test"]: + if isinstance(self.upload_dataset, str) and (key != self.upload_dataset): + continue + + asset_path = self.data_dict.get(key) + if asset_path is not None: + artifact = self.add_assets_to_artifact(artifact, path, asset_path, key) + + self.experiment.log_artifact(artifact) + + return + + def download_dataset_artifact(self, artifact_path): + """Downloads a dataset artifact to a specified directory, given its path.""" + logged_artifact = self.experiment.get_artifact(artifact_path) + artifact_save_dir = str(Path(self.opt.save_dir) / logged_artifact.name) + logged_artifact.download(artifact_save_dir) + + metadata = logged_artifact.metadata + data_dict = metadata.copy() + data_dict["path"] = artifact_save_dir + + metadata_names = metadata.get("names") + if isinstance(metadata_names, dict): + data_dict["names"] = {int(k): v for k, v in metadata.get("names").items()} + elif isinstance(metadata_names, list): + data_dict["names"] = {int(k): v for k, v in zip(range(len(metadata_names)), metadata_names)} + else: + raise "Invalid 'names' field in dataset yaml file. Please use a list or dictionary" + + return self.update_data_paths(data_dict) + + def update_data_paths(self, data_dict): + """Updates 'path' in data_dict with provided path, returning modified data_dict.""" + path = data_dict.get("path", "") + + for split in ["train", "val", "test"]: + if data_dict.get(split): + split_path = data_dict.get(split) + data_dict[split] = ( + f"{path}/{split_path}" if isinstance(split, str) else [f"{path}/{x}" for x in split_path] + ) + + return data_dict + + def on_pretrain_routine_end(self, paths): + """Called at the end of the pretraining routine to handle paths modification if `opt.resume` is False.""" + if self.opt.resume: + return + + for path in paths: + self.log_asset(str(path)) + + if self.upload_dataset and not self.resume: + self.upload_dataset_artifact() + + return + + def on_train_start(self): + """Logs hyperparameter settings at the start of training.""" + self.log_parameters(self.hyp) + + def on_train_epoch_start(self): + """Callback function executed at the start of each training epoch.""" + return + + def on_train_epoch_end(self, epoch): + """Callback function executed at the end of each training epoch, updates current epoch in experiment.""" + self.experiment.curr_epoch = epoch + + return + + def on_train_batch_start(self): + """Callback executed at the start of each training batch without inputs or modifications.""" + return + + def on_train_batch_end(self, log_dict, step): + """Callback after training batch ends; updates step and logs metrics if conditions met.""" + self.experiment.curr_step = step + if self.log_batch_metrics and (step % self.comet_log_batch_interval == 0): + self.log_metrics(log_dict, step=step) + + return + + def on_train_end(self, files, save_dir, last, best, epoch, results): + """Callback at training end; logs image metadata to Comet if comet_log_predictions is True.""" + if self.comet_log_predictions: + curr_epoch = self.experiment.curr_epoch + self.experiment.log_asset_data(self.metadata_dict, "image-metadata.json", epoch=curr_epoch) + + for f in files: + self.log_asset(f, metadata={"epoch": epoch}) + self.log_asset(f"{save_dir}/results.csv", metadata={"epoch": epoch}) + + if not self.opt.evolve: + model_path = str(best if best.exists() else last) + name = Path(model_path).name + if self.save_model: + self.experiment.log_model( + self.model_name, + file_or_folder=model_path, + file_name=name, + overwrite=True, + ) + + # Check if running Experiment with Comet Optimizer + if hasattr(self.opt, "comet_optimizer_id"): + metric = results.get(self.opt.comet_optimizer_metric) + self.experiment.log_other("optimizer_metric_value", metric) + + self.finish_run() + + def on_val_start(self): + """Prepares environment for validation phase.""" + return + + def on_val_batch_start(self): + """Called at the start of each validation batch to prepare the batch environment.""" + return + + def on_val_batch_end(self, batch_i, images, targets, paths, shapes, outputs): + """Handles end of validation batch, optionally logs predictions to Comet.ml if conditions met.""" + if not (self.comet_log_predictions and ((batch_i + 1) % self.comet_log_prediction_interval == 0)): + return + + for si, pred in enumerate(outputs): + if len(pred) == 0: + continue + + image = images[si] + labels = targets[targets[:, 0] == si, 1:] + shape = shapes[si] + path = paths[si] + predn, labelsn = self.preprocess_prediction(image, labels, shape, pred) + if labelsn is not None: + self.log_predictions(image, labelsn, path, shape, predn) + + return + + def on_val_end(self, nt, tp, fp, p, r, f1, ap, ap50, ap_class, confusion_matrix): + """Logs per-class metric stats to Comet.ml at validation end; requires class-wise tp, fp, nt, p, r, f1, ap, + ap50, ap_class, confusion_matrix. + """ + if self.comet_log_per_class_metrics and self.num_classes > 1: + for i, c in enumerate(ap_class): + class_name = self.class_names[c] + self.experiment.log_metrics( + { + "mAP@.5": ap50[i], + "mAP@.5:.95": ap[i], + "precision": p[i], + "recall": r[i], + "f1": f1[i], + "true_positives": tp[i], + "false_positives": fp[i], + "support": nt[c], + }, + prefix=class_name, + ) + + if self.comet_log_confusion_matrix: + epoch = self.experiment.curr_epoch + class_names = list(self.class_names.values()) + class_names.append("background") + num_classes = len(class_names) + + self.experiment.log_confusion_matrix( + matrix=confusion_matrix.matrix, + max_categories=num_classes, + labels=class_names, + epoch=epoch, + column_label="Actual Category", + row_label="Predicted Category", + file_name=f"confusion-matrix-epoch-{epoch}.json", + ) + + def on_fit_epoch_end(self, result, epoch): + """Logs metrics at the end of each training epoch with provided result and epoch number.""" + self.log_metrics(result, epoch=epoch) + + def on_model_save(self, last, epoch, final_epoch, best_fitness, fi): + """Logs and saves model periodically if conditions met, excluding final epoch unless best fitness achieved.""" + if ((epoch + 1) % self.opt.save_period == 0 and not final_epoch) and self.opt.save_period != -1: + self.log_model(last.parent, self.opt, epoch, fi, best_model=best_fitness == fi) + + def on_params_update(self, params): + """Updates and logs model parameters.""" + self.log_parameters(params) + + def finish_run(self): + """Terminates the current experiment and performs necessary cleanup operations.""" + self.experiment.end() diff --git a/utils/loggers/comet/comet_utils.py b/utils/loggers/comet/comet_utils.py new file mode 100644 index 0000000000..d5d26c03cf --- /dev/null +++ b/utils/loggers/comet/comet_utils.py @@ -0,0 +1,144 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +import logging +import os +from urllib.parse import urlparse + +try: + import comet_ml +except ImportError: + comet_ml = None + +import yaml + +logger = logging.getLogger(__name__) + +COMET_PREFIX = "comet://" +COMET_MODEL_NAME = os.getenv("COMET_MODEL_NAME", "yolov5") +COMET_DEFAULT_CHECKPOINT_FILENAME = os.getenv("COMET_DEFAULT_CHECKPOINT_FILENAME", "last.pt") + + +def download_model_checkpoint(opt, experiment): + """Downloads the model checkpoint from Comet ML; updates `opt.weights` with the downloaded file path.""" + model_dir = f"{opt.project}/{experiment.name}" + os.makedirs(model_dir, exist_ok=True) + + model_name = COMET_MODEL_NAME + model_asset_list = experiment.get_model_asset_list(model_name) + + if len(model_asset_list) == 0: + logger.error(f"COMET ERROR: No checkpoints found for model name : {model_name}") + return + + model_asset_list = sorted( + model_asset_list, + key=lambda x: x["step"], + reverse=True, + ) + logged_checkpoint_map = {asset["fileName"]: asset["assetId"] for asset in model_asset_list} + + resource_url = urlparse(opt.weights) + checkpoint_filename = resource_url.query + + if checkpoint_filename: + asset_id = logged_checkpoint_map.get(checkpoint_filename) + else: + asset_id = logged_checkpoint_map.get(COMET_DEFAULT_CHECKPOINT_FILENAME) + checkpoint_filename = COMET_DEFAULT_CHECKPOINT_FILENAME + + if asset_id is None: + logger.error(f"COMET ERROR: Checkpoint {checkpoint_filename} not found in the given Experiment") + return + + try: + logger.info(f"COMET INFO: Downloading checkpoint {checkpoint_filename}") + asset_filename = checkpoint_filename + + model_binary = experiment.get_asset(asset_id, return_type="binary", stream=False) + model_download_path = f"{model_dir}/{asset_filename}" + with open(model_download_path, "wb") as f: + f.write(model_binary) + + opt.weights = model_download_path + + except Exception as e: + logger.warning("COMET WARNING: Unable to download checkpoint from Comet") + logger.exception(e) + + +def set_opt_parameters(opt, experiment): + """Update the opts Namespace with parameters from Comet's ExistingExperiment when resuming a run. + + Args: + opt (argparse.Namespace): Namespace of command line options + experiment (comet_ml.APIExperiment): Comet API Experiment object + """ + asset_list = experiment.get_asset_list() + resume_string = opt.resume + + for asset in asset_list: + if asset["fileName"] == "opt.yaml": + asset_id = asset["assetId"] + asset_binary = experiment.get_asset(asset_id, return_type="binary", stream=False) + opt_dict = yaml.safe_load(asset_binary) + for key, value in opt_dict.items(): + setattr(opt, key, value) + opt.resume = resume_string + + # Save hyperparameters to YAML file + # Necessary to pass checks in training script + save_dir = f"{opt.project}/{experiment.name}" + os.makedirs(save_dir, exist_ok=True) + + hyp_yaml_path = f"{save_dir}/hyp.yaml" + with open(hyp_yaml_path, "w") as f: + yaml.dump(opt.hyp, f) + opt.hyp = hyp_yaml_path + + +def check_comet_weights(opt): + """Downloads model weights from Comet and updates the weights path to point to saved weights location. + + Args: + opt (argparse.Namespace): Command Line arguments passed to YOLOv3 training script + + Returns: + None/bool: Return True if weights are successfully downloaded else return None + """ + if comet_ml is None: + return + + if isinstance(opt.weights, str) and opt.weights.startswith(COMET_PREFIX): + api = comet_ml.API() + resource = urlparse(opt.weights) + experiment_path = f"{resource.netloc}{resource.path}" + experiment = api.get(experiment_path) + download_model_checkpoint(opt, experiment) + return True + + return None + + +def check_comet_resume(opt): + """Restores run parameters to its original state based on the model checkpoint and logged Experiment parameters. + + Args: + opt (argparse.Namespace): Command Line arguments passed to YOLOv3 training script + + Returns: + None/bool: Return True if the run is restored successfully else return None + """ + if comet_ml is None: + return + + if isinstance(opt.resume, str) and opt.resume.startswith(COMET_PREFIX): + api = comet_ml.API() + resource = urlparse(opt.resume) + experiment_path = f"{resource.netloc}{resource.path}" + experiment = api.get(experiment_path) + set_opt_parameters(opt, experiment) + download_model_checkpoint(opt, experiment) + + return True + + return None diff --git a/utils/loggers/comet/hpo.py b/utils/loggers/comet/hpo.py new file mode 100644 index 0000000000..ffc14997f1 --- /dev/null +++ b/utils/loggers/comet/hpo.py @@ -0,0 +1,126 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +import argparse +import json +import logging +import os +import sys +from pathlib import Path + +import comet_ml + +logger = logging.getLogger(__name__) + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[3] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH + +from train import train +from utils.callbacks import Callbacks +from utils.general import increment_path +from utils.torch_utils import select_device + +# Project Configuration +config = comet_ml.config.get_config() +COMET_PROJECT_NAME = config.get_string(os.getenv("COMET_PROJECT_NAME"), "comet.project_name", default="yolov5") + + +def get_args(known=False): + """Parses command line arguments for configuring training options, supporting Comet and W&B integrations.""" + parser = argparse.ArgumentParser() + parser.add_argument("--weights", type=str, default=ROOT / "yolov3-tiny.pt", help="initial weights path") + parser.add_argument("--cfg", type=str, default="", help="model.yaml path") + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path") + parser.add_argument("--hyp", type=str, default=ROOT / "data/hyps/hyp.scratch-low.yaml", help="hyperparameters path") + parser.add_argument("--epochs", type=int, default=300, help="total training epochs") + parser.add_argument("--batch-size", type=int, default=16, help="total batch size for all GPUs, -1 for autobatch") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="train, val image size (pixels)") + parser.add_argument("--rect", action="store_true", help="rectangular training") + parser.add_argument("--resume", nargs="?", const=True, default=False, help="resume most recent training") + parser.add_argument("--nosave", action="store_true", help="only save final checkpoint") + parser.add_argument("--noval", action="store_true", help="only validate final epoch") + parser.add_argument("--noautoanchor", action="store_true", help="disable AutoAnchor") + parser.add_argument("--noplots", action="store_true", help="save no plot files") + parser.add_argument("--evolve", type=int, nargs="?", const=300, help="evolve hyperparameters for x generations") + parser.add_argument("--bucket", type=str, default="", help="gsutil bucket") + parser.add_argument("--cache", type=str, nargs="?", const="ram", help='--cache images in "ram" (default) or "disk"') + parser.add_argument("--image-weights", action="store_true", help="use weighted image selection for training") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--multi-scale", action="store_true", help="vary img-size +/- 50%%") + parser.add_argument("--single-cls", action="store_true", help="train multi-class data as single-class") + parser.add_argument("--optimizer", type=str, choices=["SGD", "Adam", "AdamW"], default="SGD", help="optimizer") + parser.add_argument("--sync-bn", action="store_true", help="use SyncBatchNorm, only available in DDP mode") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--project", default=ROOT / "runs/train", help="save to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--quad", action="store_true", help="quad dataloader") + parser.add_argument("--cos-lr", action="store_true", help="cosine LR scheduler") + parser.add_argument("--label-smoothing", type=float, default=0.0, help="Label smoothing epsilon") + parser.add_argument("--patience", type=int, default=100, help="EarlyStopping patience (epochs without improvement)") + parser.add_argument("--freeze", nargs="+", type=int, default=[0], help="Freeze layers: backbone=10, first3=0 1 2") + parser.add_argument("--save-period", type=int, default=-1, help="Save checkpoint every x epochs (disabled if < 1)") + parser.add_argument("--seed", type=int, default=0, help="Global training seed") + parser.add_argument("--local_rank", type=int, default=-1, help="Automatic DDP Multi-GPU argument, do not modify") + + # Weights & Biases arguments + parser.add_argument("--entity", default=None, help="W&B: Entity") + parser.add_argument("--upload_dataset", nargs="?", const=True, default=False, help='W&B: Upload data, "val" option') + parser.add_argument("--bbox_interval", type=int, default=-1, help="W&B: Set bounding-box image logging interval") + parser.add_argument("--artifact_alias", type=str, default="latest", help="W&B: Version of dataset artifact to use") + + # Comet Arguments + parser.add_argument("--comet_optimizer_config", type=str, help="Comet: Path to a Comet Optimizer Config File.") + parser.add_argument("--comet_optimizer_id", type=str, help="Comet: ID of the Comet Optimizer sweep.") + parser.add_argument("--comet_optimizer_objective", type=str, help="Comet: Set to 'minimize' or 'maximize'.") + parser.add_argument("--comet_optimizer_metric", type=str, help="Comet: Metric to Optimize.") + parser.add_argument( + "--comet_optimizer_workers", + type=int, + default=1, + help="Comet: Number of Parallel Workers to use with the Comet Optimizer.", + ) + + return parser.parse_known_args()[0] if known else parser.parse_args() + + +def run(parameters, opt): + """Executes training process with given hyperparameters and options, handling device selection and callback + initialization. + """ + hyp_dict = {k: v for k, v in parameters.items() if k not in ["epochs", "batch_size"]} + + opt.save_dir = str(increment_path(Path(opt.project) / opt.name, exist_ok=opt.exist_ok or opt.evolve)) + opt.batch_size = parameters.get("batch_size") + opt.epochs = parameters.get("epochs") + + device = select_device(opt.device, batch_size=opt.batch_size) + train(hyp_dict, opt, device, callbacks=Callbacks()) + + +if __name__ == "__main__": + opt = get_args(known=True) + + opt.weights = str(opt.weights) + opt.cfg = str(opt.cfg) + opt.data = str(opt.data) + opt.project = str(opt.project) + + optimizer_id = os.getenv("COMET_OPTIMIZER_ID") + if optimizer_id is None: + with open(opt.comet_optimizer_config) as f: + optimizer_config = json.load(f) + optimizer = comet_ml.Optimizer(optimizer_config) + else: + optimizer = comet_ml.Optimizer(optimizer_id) + + opt.comet_optimizer_id = optimizer.id + status = optimizer.status() + + opt.comet_optimizer_objective = status["spec"]["objective"] + opt.comet_optimizer_metric = status["spec"]["metric"] + + logger.info("COMET INFO: Starting Hyperparameter Sweep") + for parameter in optimizer.get_parameters(): + run(parameter["parameters"], opt) diff --git a/utils/loggers/comet/optimizer_config.json b/utils/loggers/comet/optimizer_config.json new file mode 100644 index 0000000000..0218f162d9 --- /dev/null +++ b/utils/loggers/comet/optimizer_config.json @@ -0,0 +1,135 @@ +{ + "algorithm": "random", + "parameters": { + "anchor_t": { + "type": "discrete", + "values": [2, 8] + }, + "batch_size": { + "type": "discrete", + "values": [16, 32, 64] + }, + "box": { + "type": "discrete", + "values": [0.02, 0.2] + }, + "cls": { + "type": "discrete", + "values": [0.2] + }, + "cls_pw": { + "type": "discrete", + "values": [0.5] + }, + "copy_paste": { + "type": "discrete", + "values": [1] + }, + "degrees": { + "type": "discrete", + "values": [0, 45] + }, + "epochs": { + "type": "discrete", + "values": [5] + }, + "fl_gamma": { + "type": "discrete", + "values": [0] + }, + "fliplr": { + "type": "discrete", + "values": [0] + }, + "flipud": { + "type": "discrete", + "values": [0] + }, + "hsv_h": { + "type": "discrete", + "values": [0] + }, + "hsv_s": { + "type": "discrete", + "values": [0] + }, + "hsv_v": { + "type": "discrete", + "values": [0] + }, + "iou_t": { + "type": "discrete", + "values": [0.7] + }, + "lr0": { + "type": "discrete", + "values": [1e-5, 0.1] + }, + "lrf": { + "type": "discrete", + "values": [0.01, 1] + }, + "mixup": { + "type": "discrete", + "values": [1] + }, + "momentum": { + "type": "discrete", + "values": [0.6] + }, + "mosaic": { + "type": "discrete", + "values": [0] + }, + "obj": { + "type": "discrete", + "values": [0.2] + }, + "obj_pw": { + "type": "discrete", + "values": [0.5] + }, + "optimizer": { + "type": "categorical", + "values": ["SGD", "Adam", "AdamW"] + }, + "perspective": { + "type": "discrete", + "values": [0] + }, + "scale": { + "type": "discrete", + "values": [0] + }, + "shear": { + "type": "discrete", + "values": [0] + }, + "translate": { + "type": "discrete", + "values": [0] + }, + "warmup_bias_lr": { + "type": "discrete", + "values": [0, 0.2] + }, + "warmup_epochs": { + "type": "discrete", + "values": [5] + }, + "warmup_momentum": { + "type": "discrete", + "values": [0, 0.95] + }, + "weight_decay": { + "type": "discrete", + "values": [0, 0.001] + } + }, + "spec": { + "maxCombo": 0, + "metric": "metrics/mAP_0.5", + "objective": "maximize" + }, + "trials": 1 +} diff --git a/utils/loggers/wandb/__init__.py b/utils/loggers/wandb/__init__.py new file mode 100644 index 0000000000..77a19dcf0f --- /dev/null +++ b/utils/loggers/wandb/__init__.py @@ -0,0 +1 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license diff --git a/utils/loggers/wandb/wandb_utils.py b/utils/loggers/wandb/wandb_utils.py new file mode 100644 index 0000000000..c2b7626673 --- /dev/null +++ b/utils/loggers/wandb/wandb_utils.py @@ -0,0 +1,198 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +# WARNING ⚠️ wandb is deprecated and will be removed in future release. +# See supported integrations at https://github.com/ultralytics/yolov5#integrations + +import logging +import os +import sys +from contextlib import contextmanager +from pathlib import Path + +from utils.general import LOGGER, colorstr + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[3] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +RANK = int(os.getenv("RANK", -1)) +DEPRECATION_WARNING = ( + f"{colorstr('wandb')}: WARNING ⚠️ wandb is deprecated and will be removed in a future release. " + f"See supported integrations at https://github.com/ultralytics/yolov5#integrations." +) + +try: + import wandb + + assert hasattr(wandb, "__version__") # verify package import not local dir + LOGGER.warning(DEPRECATION_WARNING) +except (ImportError, AssertionError): + wandb = None + + +class WandbLogger: + """Log training runs, datasets, models, and predictions to Weights & Biases. + + This logger sends information to W&B at wandb.ai. By default, this information includes hyperparameters, system + configuration and metrics, model metrics, and basic data metrics and analyses. + + By providing additional command line arguments to train.py, datasets, models and predictions can also be logged. + + For more on how this logger is used, see the Weights & Biases documentation: + https://docs.wandb.com/guides/integrations/yolov5 + """ + + def __init__(self, opt, run_id=None, job_type="Training"): + """- Initialize WandbLogger instance - Upload dataset if opt.upload_dataset is True - Setup training processes + if job_type is 'Training'. + + Args: + opt (namespace) -- Commandline arguments for this run: run_id (str) -- Run ID of W&B run to be resumed + job_type (str) -- To set the job_type for this run + """ + # Pre-training routine -- + self.job_type = job_type + self.wandb, self.wandb_run = wandb, wandb.run if wandb else None + self.val_artifact, self.train_artifact = None, None + self.train_artifact_path, self.val_artifact_path = None, None + self.result_artifact = None + self.val_table, self.result_table = None, None + self.max_imgs_to_log = 16 + self.data_dict = None + if self.wandb: + self.wandb_run = wandb.run or wandb.init( + config=opt, + resume="allow", + project="YOLOv3" if opt.project == "runs/train" else Path(opt.project).stem, + entity=opt.entity, + name=opt.name if opt.name != "exp" else None, + job_type=job_type, + id=run_id, + allow_val_change=True, + ) + + if self.wandb_run and self.job_type == "Training": + if isinstance(opt.data, dict): + # This means another dataset manager has already processed the dataset info (e.g. ClearML) + # and they will have stored the already processed dict in opt.data + self.data_dict = opt.data + self.setup_training(opt) + + def setup_training(self, opt): + """Setup the necessary processes for training YOLO models: - Attempt to download model checkpoint and dataset + artifacts if opt.resume stats with WANDB_ARTIFACT_PREFIX - Update data_dict, to contain info of previous + run if resumed and the paths of dataset artifact if downloaded - Setup log_dict, + initialize bbox_interval. + + Args: + opt (namespace) -- commandline arguments for this run + """ + self.log_dict, self.current_epoch = {}, 0 + self.bbox_interval = opt.bbox_interval + if isinstance(opt.resume, str): + model_dir, _ = self.download_model_artifact(opt) + if model_dir: + self.weights = Path(model_dir) / "last.pt" + config = self.wandb_run.config + opt.weights, opt.save_period, opt.batch_size, opt.bbox_interval, opt.epochs, opt.hyp, opt.imgsz = ( + str(self.weights), + config.save_period, + config.batch_size, + config.bbox_interval, + config.epochs, + config.hyp, + config.imgsz, + ) + + if opt.bbox_interval == -1: + self.bbox_interval = opt.bbox_interval = (opt.epochs // 10) if opt.epochs > 10 else 1 + if opt.evolve or opt.noplots: + self.bbox_interval = opt.bbox_interval = opt.epochs + 1 # disable bbox_interval + + def log_model(self, path, opt, epoch, fitness_score, best_model=False): + """Log the model checkpoint as W&B artifact. + + Args: + path (Path) -- Path of directory containing the checkpoints: opt (namespace) -- Command line arguments for + this run epoch (int) -- Current epoch number fitness_score (float) -- fitness score for current epoch + best_model (boolean) -- Boolean representing if the current checkpoint is the best yet. + """ + model_artifact = wandb.Artifact( + f"run_{wandb.run.id}_model", + type="model", + metadata={ + "original_url": str(path), + "epochs_trained": epoch + 1, + "save period": opt.save_period, + "project": opt.project, + "total_epochs": opt.epochs, + "fitness_score": fitness_score, + }, + ) + model_artifact.add_file(str(path / "last.pt"), name="last.pt") + wandb.log_artifact( + model_artifact, + aliases=[ + "latest", + "last", + f"epoch {self.current_epoch!s}", + "best" if best_model else "", + ], + ) + LOGGER.info(f"Saving model artifact on epoch {epoch + 1}") + + def val_one_image(self, pred, predn, path, names, im): + """Evaluates model's prediction for a single image, updating metrics based on comparison with ground truth.""" + pass + + def log(self, log_dict): + """Save the metrics to the logging dictionary. + + Args: + log_dict (Dict) -- metrics/media to be logged in current step + """ + if self.wandb_run: + for key, value in log_dict.items(): + self.log_dict[key] = value + + def end_epoch(self): + """Commit the log_dict, model artifacts and Tables to W&B and flush the log_dict. + + Args: + best_result (boolean): Boolean representing if the result of this evaluation is best or not + """ + if self.wandb_run: + with all_logging_disabled(): + try: + wandb.log(self.log_dict) + except BaseException as e: + LOGGER.info( + f"An error occurred in wandb. The training will proceed without interruption. More info\n{e}" + ) + self.wandb_run.finish() + self.wandb_run = None + self.log_dict = {} + + def finish_run(self): + """Log metrics if any and finish the current W&B run.""" + if self.wandb_run: + if self.log_dict: + with all_logging_disabled(): + wandb.log(self.log_dict) + wandb.run.finish() + LOGGER.warning(DEPRECATION_WARNING) + + +@contextmanager +def all_logging_disabled(highest_level=logging.CRITICAL): + """Source - https://gist.github.com/simon-weber/7853144 + A context manager that will prevent any logging messages triggered during the body from being processed. + :param highest_level: the maximum logging level in use. + This would only need to be changed if a custom level greater than CRITICAL is defined. + """ + previous_level = logging.root.manager.disable + logging.disable(highest_level) + try: + yield + finally: + logging.disable(previous_level) diff --git a/utils/loss.py b/utils/loss.py new file mode 100644 index 0000000000..3444a081e4 --- /dev/null +++ b/utils/loss.py @@ -0,0 +1,255 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Loss functions.""" + +import torch +import torch.nn as nn + +from utils.metrics import bbox_iou +from utils.torch_utils import de_parallel + + +def smooth_BCE(eps=0.1): # https://github.com/ultralytics/yolov3/issues/238#issuecomment-598028441 + """Applies label smoothing to BCE targets, returning smoothed positive/negative labels; eps default is 0.1.""" + return 1.0 - 0.5 * eps, 0.5 * eps + + +class BCEBlurWithLogitsLoss(nn.Module): + """Implements BCEWithLogitsLoss with adjustments to mitigate missing label effects using an alpha parameter.""" + + def __init__(self, alpha=0.05): + """Initializes BCEBlurWithLogitsLoss with alpha to reduce missing label effects; default alpha is 0.05.""" + super().__init__() + self.loss_fcn = nn.BCEWithLogitsLoss(reduction="none") # must be nn.BCEWithLogitsLoss() + self.alpha = alpha + + def forward(self, pred, true): + """Calculates modified BCEWithLogitsLoss factoring in missing labels, taking `pred` logits and `true` labels as + inputs. + """ + loss = self.loss_fcn(pred, true) + pred = torch.sigmoid(pred) # prob from logits + dx = pred - true # reduce only missing label effects + # dx = (pred - true).abs() # reduce missing label and false label effects + alpha_factor = 1 - torch.exp((dx - 1) / (self.alpha + 1e-4)) + loss *= alpha_factor + return loss.mean() + + +class FocalLoss(nn.Module): + """Implements Focal Loss to address class imbalance by modulating the loss based on prediction confidence.""" + + def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): + """Initializes FocalLoss with specified loss function, gamma, and alpha for enhanced training on imbalanced + datasets. + """ + super().__init__() + self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() + self.gamma = gamma + self.alpha = alpha + self.reduction = loss_fcn.reduction + self.loss_fcn.reduction = "none" # required to apply FL to each element + + def forward(self, pred, true): + """Computes the focal loss between `pred` and `true` using specific alpha and gamma, not applying the modulating + factor. + """ + loss = self.loss_fcn(pred, true) + # p_t = torch.exp(-loss) + # loss *= self.alpha * (1.000001 - p_t) ** self.gamma # non-zero power for gradient stability + + # TF implementation https://github.com/tensorflow/addons/blob/v0.7.1/tensorflow_addons/losses/focal_loss.py + pred_prob = torch.sigmoid(pred) # prob from logits + p_t = true * pred_prob + (1 - true) * (1 - pred_prob) + alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) + modulating_factor = (1.0 - p_t) ** self.gamma + loss *= alpha_factor * modulating_factor + + if self.reduction == "mean": + return loss.mean() + elif self.reduction == "sum": + return loss.sum() + else: # 'none' + return loss + + +class QFocalLoss(nn.Module): + """Implements Quality Focal Loss to handle class imbalance with a modulating factor and alpha.""" + + def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): + """Initializes QFocalLoss with specified loss function, gamma, and alpha for element-wise focal loss + application. + """ + super().__init__() + self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() + self.gamma = gamma + self.alpha = alpha + self.reduction = loss_fcn.reduction + self.loss_fcn.reduction = "none" # required to apply FL to each element + + def forward(self, pred, true): + """Computes focal loss between predictions and true labels using configured loss function, `gamma`, and `alpha`. + """ + loss = self.loss_fcn(pred, true) + + pred_prob = torch.sigmoid(pred) # prob from logits + alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) + modulating_factor = torch.abs(true - pred_prob) ** self.gamma + loss *= alpha_factor * modulating_factor + + if self.reduction == "mean": + return loss.mean() + elif self.reduction == "sum": + return loss.sum() + else: # 'none' + return loss + + +class ComputeLoss: + """Computes the total loss for YOLO models by aggregating classification, box regression, and objectness losses.""" + + sort_obj_iou = False + + # Compute losses + def __init__(self, model, autobalance=False): + """Initializes ComputeLoss with model's device and hyperparameters, and sets autobalance.""" + device = next(model.parameters()).device # get model device + h = model.hyp # hyperparameters + + # Define criteria + BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h["cls_pw"]], device=device)) + BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h["obj_pw"]], device=device)) + + # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 + self.cp, self.cn = smooth_BCE(eps=h.get("label_smoothing", 0.0)) # positive, negative BCE targets + + # Focal loss + g = h["fl_gamma"] # focal loss gamma + if g > 0: + BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) + + m = de_parallel(model).model[-1] # Detect() module + self.balance = {3: [4.0, 1.0, 0.4]}.get(m.nl, [4.0, 1.0, 0.25, 0.06, 0.02]) # P3-P7 + self.ssi = list(m.stride).index(16) if autobalance else 0 # stride 16 index + self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, 1.0, h, autobalance + self.na = m.na # number of anchors + self.nc = m.nc # number of classes + self.nl = m.nl # number of layers + self.anchors = m.anchors + self.device = device + + def __call__(self, p, targets): # predictions, targets + """Computes loss given predictions and targets, returning class, box, and object loss as tensors.""" + lcls = torch.zeros(1, device=self.device) # class loss + lbox = torch.zeros(1, device=self.device) # box loss + lobj = torch.zeros(1, device=self.device) # object loss + tcls, tbox, indices, anchors = self.build_targets(p, targets) # targets + + # Losses + for i, pi in enumerate(p): # layer index, layer predictions + b, a, gj, gi = indices[i] # image, anchor, gridy, gridx + tobj = torch.zeros(pi.shape[:4], dtype=pi.dtype, device=self.device) # target obj + + if n := b.shape[0]: + # pxy, pwh, _, pcls = pi[b, a, gj, gi].tensor_split((2, 4, 5), dim=1) # faster, requires torch 1.8.0 + pxy, pwh, _, pcls = pi[b, a, gj, gi].split((2, 2, 1, self.nc), 1) # target-subset of predictions + + # Regression + pxy = pxy.sigmoid() * 2 - 0.5 + pwh = (pwh.sigmoid() * 2) ** 2 * anchors[i] + pbox = torch.cat((pxy, pwh), 1) # predicted box + iou = bbox_iou(pbox, tbox[i], CIoU=True).squeeze() # iou(prediction, target) + lbox += (1.0 - iou).mean() # iou loss + + # Objectness + iou = iou.detach().clamp(0).type(tobj.dtype) + if self.sort_obj_iou: + j = iou.argsort() + b, a, gj, gi, iou = b[j], a[j], gj[j], gi[j], iou[j] + if self.gr < 1: + iou = (1.0 - self.gr) + self.gr * iou + tobj[b, a, gj, gi] = iou # iou ratio + + # Classification + if self.nc > 1: # cls loss (only if multiple classes) + t = torch.full_like(pcls, self.cn, device=self.device) # targets + t[range(n), tcls[i]] = self.cp + lcls += self.BCEcls(pcls, t) # BCE + + obji = self.BCEobj(pi[..., 4], tobj) + lobj += obji * self.balance[i] # obj loss + if self.autobalance: + self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() + + if self.autobalance: + self.balance = [x / self.balance[self.ssi] for x in self.balance] + lbox *= self.hyp["box"] + lobj *= self.hyp["obj"] + lcls *= self.hyp["cls"] + bs = tobj.shape[0] # batch size + + return (lbox + lobj + lcls) * bs, torch.cat((lbox, lobj, lcls)).detach() + + def build_targets(self, p, targets): + """Generates matching anchor targets for compute_loss() from given images and labels in format + (image,class,x,y,w,h). + """ + na, nt = self.na, targets.shape[0] # number of anchors, targets + tcls, tbox, indices, anch = [], [], [], [] + gain = torch.ones(7, device=self.device) # normalized to gridspace gain + ai = torch.arange(na, device=self.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) + targets = torch.cat((targets.repeat(na, 1, 1), ai[..., None]), 2) # append anchor indices + + g = 0.5 # bias + off = ( + torch.tensor( + [ + [0, 0], + [1, 0], + [0, 1], + [-1, 0], + [0, -1], # j,k,l,m + # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm + ], + device=self.device, + ).float() + * g + ) # offsets + + for i in range(self.nl): + anchors, shape = self.anchors[i], p[i].shape + gain[2:6] = torch.tensor(shape)[[3, 2, 3, 2]] # xyxy gain + + # Match targets to anchors + t = targets * gain # shape(3,n,7) + if nt: + # Matches + r = t[..., 4:6] / anchors[:, None] # wh ratio + j = torch.max(r, 1 / r).max(2)[0] < self.hyp["anchor_t"] # compare + # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) + t = t[j] # filter + + # Offsets + gxy = t[:, 2:4] # grid xy + gxi = gain[[2, 3]] - gxy # inverse + j, k = ((gxy % 1 < g) & (gxy > 1)).T + l, m = ((gxi % 1 < g) & (gxi > 1)).T + j = torch.stack((torch.ones_like(j), j, k, l, m)) + t = t.repeat((5, 1, 1))[j] + offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] + else: + t = targets[0] + offsets = 0 + + # Define + bc, gxy, gwh, a = t.chunk(4, 1) # (image, class), grid xy, grid wh, anchors + a, (b, c) = a.long().view(-1), bc.long().T # anchors, image, class + gij = (gxy - offsets).long() + gi, gj = gij.T # grid indices + + # Append + indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1))) # image, anchor, grid + tbox.append(torch.cat((gxy - gij, gwh), 1)) # box + anch.append(anchors[a]) # anchors + tcls.append(c) # class + + return tcls, tbox, indices, anch diff --git a/utils/metrics.py b/utils/metrics.py new file mode 100644 index 0000000000..f7ea2ab57e --- /dev/null +++ b/utils/metrics.py @@ -0,0 +1,361 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Model validation metrics.""" + +import math +import warnings +from pathlib import Path + +import matplotlib.pyplot as plt +import numpy as np +import torch + +from utils import TryExcept, threaded + + +def fitness(x): + """Calculates model fitness as a weighted sum of metrics [P, R, mAP@0.5, mAP@0.5:0.95] with respective weights.""" + w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95] + return (x[:, :4] * w).sum(1) + + +def smooth(y, f=0.05): + """Smooths array `y` using a box filter with fractional size `f`, returning the smoothed array.""" + nf = round(len(y) * f * 2) // 2 + 1 # number of filter elements (must be odd) + p = np.ones(nf // 2) # ones padding + yp = np.concatenate((p * y[0], y, p * y[-1]), 0) # y padded + return np.convolve(yp, np.ones(nf) / nf, mode="valid") # y-smoothed + + +def ap_per_class(tp, conf, pred_cls, target_cls, plot=False, save_dir=".", names=(), eps=1e-16, prefix=""): + """Compute the average precision, given the recall and precision curves. + + Source: https://github.com/rafaelpadilla/Object-Detection-Metrics. # Arguments + tp: True positives (nparray, nx1 or nx10). + conf: Objectness value from 0-1 (nparray). + pred_cls: Predicted object classes (nparray). + target_cls: True object classes (nparray). + plot: Plot precision-recall curve at mAP@0.5 + save_dir: Plot save directory + # Returns + The average precision as computed in py-faster-rcnn. + """ + # Sort by objectness + i = np.argsort(-conf) + tp, conf, pred_cls = tp[i], conf[i], pred_cls[i] + + # Find unique classes + unique_classes, nt = np.unique(target_cls, return_counts=True) + nc = unique_classes.shape[0] # number of classes, number of detections + + # Create Precision-Recall curve and compute AP for each class + px, py = np.linspace(0, 1, 1000), [] # for plotting + ap, p, r = np.zeros((nc, tp.shape[1])), np.zeros((nc, 1000)), np.zeros((nc, 1000)) + for ci, c in enumerate(unique_classes): + i = pred_cls == c + n_l = nt[ci] # number of labels + n_p = i.sum() # number of predictions + if n_p == 0 or n_l == 0: + continue + + # Accumulate FPs and TPs + fpc = (1 - tp[i]).cumsum(0) + tpc = tp[i].cumsum(0) + + # Recall + recall = tpc / (n_l + eps) # recall curve + r[ci] = np.interp(-px, -conf[i], recall[:, 0], left=0) # negative x, xp because xp decreases + + # Precision + precision = tpc / (tpc + fpc) # precision curve + p[ci] = np.interp(-px, -conf[i], precision[:, 0], left=1) # p at pr_score + + # AP from recall-precision curve + for j in range(tp.shape[1]): + ap[ci, j], mpre, mrec = compute_ap(recall[:, j], precision[:, j]) + if plot and j == 0: + py.append(np.interp(px, mrec, mpre)) # precision at mAP@0.5 + + # Compute F1 (harmonic mean of precision and recall) + f1 = 2 * p * r / (p + r + eps) + names = [v for k, v in names.items() if k in unique_classes] # list: only classes that have data + names = dict(enumerate(names)) # to dict + if plot: + plot_pr_curve(px, py, ap, Path(save_dir) / f"{prefix}PR_curve.png", names) + plot_mc_curve(px, f1, Path(save_dir) / f"{prefix}F1_curve.png", names, ylabel="F1") + plot_mc_curve(px, p, Path(save_dir) / f"{prefix}P_curve.png", names, ylabel="Precision") + plot_mc_curve(px, r, Path(save_dir) / f"{prefix}R_curve.png", names, ylabel="Recall") + + i = smooth(f1.mean(0), 0.1).argmax() # max F1 index + p, r, f1 = p[:, i], r[:, i], f1[:, i] + tp = (r * nt).round() # true positives + fp = (tp / (p + eps) - tp).round() # false positives + return tp, fp, p, r, f1, ap, unique_classes.astype(int) + + +def compute_ap(recall, precision): + """Compute the average precision, given the recall and precision curves # Arguments recall: The recall curve (list) + precision: The precision curve (list) # Returns Average precision, precision curve, recall curve. + """ + # Append sentinel values to beginning and end + mrec = np.concatenate(([0.0], recall, [1.0])) + mpre = np.concatenate(([1.0], precision, [0.0])) + + # Compute the precision envelope + mpre = np.flip(np.maximum.accumulate(np.flip(mpre))) + + # Integrate area under curve + method = "interp" # methods: 'continuous', 'interp' + if method == "interp": + x = np.linspace(0, 1, 101) # 101-point interp (COCO) + ap = (np.trapezoid if hasattr(np, "trapezoid") else np.trapz)(np.interp(x, mrec, mpre), x) # integrate + else: # 'continuous' + i = np.where(mrec[1:] != mrec[:-1])[0] # points where x axis (recall) changes + ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) # area under curve + + return ap, mpre, mrec + + +class ConfusionMatrix: + """Computes and visualizes a confusion matrix for object detection tasks with configurable thresholds.""" + + def __init__(self, nc, conf=0.25, iou_thres=0.45): + """Initializes confusion matrix for object detection with adjustable confidence and IoU thresholds.""" + self.matrix = np.zeros((nc + 1, nc + 1)) + self.nc = nc # number of classes + self.conf = conf + self.iou_thres = iou_thres + + def process_batch(self, detections, labels): + """Return intersection-over-union (Jaccard index) of boxes. + + Both sets of boxes are expected to be in (x1, y1, x2, y2) format. + + Args: + detections (Array[N, 6]), x1, y1, x2, y2, conf, class: labels (Array[M, 5]), class, x1, y1, x2, y2 + + Returns: + None, updates confusion matrix accordingly + """ + if detections is None: + gt_classes = labels.int() + for gc in gt_classes: + self.matrix[self.nc, gc] += 1 # background FN + return + + detections = detections[detections[:, 4] > self.conf] + gt_classes = labels[:, 0].int() + detection_classes = detections[:, 5].int() + iou = box_iou(labels[:, 1:], detections[:, :4]) + + x = torch.where(iou > self.iou_thres) + if x[0].shape[0]: + matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() + if x[0].shape[0] > 1: + matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 1], return_index=True)[1]] + matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 0], return_index=True)[1]] + else: + matches = np.zeros((0, 3)) + + n = matches.shape[0] > 0 + m0, m1, _ = matches.transpose().astype(int) + for i, gc in enumerate(gt_classes): + j = m0 == i + if n and sum(j) == 1: + self.matrix[detection_classes[m1[j]], gc] += 1 # correct + else: + self.matrix[self.nc, gc] += 1 # true background + + if n: + for i, dc in enumerate(detection_classes): + if not any(m1 == i): + self.matrix[dc, self.nc] += 1 # predicted background + + def tp_fp(self): + """Computes true positives and false positives, excluding the background class, from a confusion matrix.""" + tp = self.matrix.diagonal() # true positives + fp = self.matrix.sum(1) - tp # false positives + # fn = self.matrix.sum(0) - tp # false negatives (missed detections) + return tp[:-1], fp[:-1] # remove background class + + @TryExcept("WARNING ⚠️ ConfusionMatrix plot failure") + def plot(self, normalize=True, save_dir="", names=()): + """Plots confusion matrix as a heatmap; args: normalize(bool), save_dir(str), names(iterable of str).""" + import seaborn as sn + + array = self.matrix / ((self.matrix.sum(0).reshape(1, -1) + 1e-9) if normalize else 1) # normalize columns + array[array < 0.005] = np.nan # don't annotate (would appear as 0.00) + + fig, ax = plt.subplots(1, 1, figsize=(12, 9), tight_layout=True) + nc, nn = self.nc, len(names) # number of classes, names + sn.set(font_scale=1.0 if nc < 50 else 0.8) # for label size + labels = (0 < nn < 99) and (nn == nc) # apply names to ticklabels + ticklabels = ([*names, "background"]) if labels else "auto" + with warnings.catch_warnings(): + warnings.simplefilter("ignore") # suppress empty matrix RuntimeWarning: All-NaN slice encountered + sn.heatmap( + array, + ax=ax, + annot=nc < 30, + annot_kws={"size": 8}, + cmap="Blues", + fmt=".2f", + square=True, + vmin=0.0, + xticklabels=ticklabels, + yticklabels=ticklabels, + ).set_facecolor((1, 1, 1)) + ax.set_xlabel("True") + ax.set_ylabel("Predicted") + ax.set_title("Confusion Matrix") + fig.savefig(Path(save_dir) / "confusion_matrix.png", dpi=250) + plt.close(fig) + + def print(self): + """Prints each row of the confusion matrix, where matrix elements are separated by spaces.""" + for i in range(self.nc + 1): + print(" ".join(map(str, self.matrix[i]))) + + +def bbox_iou(box1, box2, xywh=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-7): + """Calculates IoU, GIoU, DIoU, CIoU between two bounding boxes, supporting `xywh` and `xyxy` formats.""" + # Get the coordinates of bounding boxes + if xywh: # transform from xywh to xyxy + (x1, y1, w1, h1), (x2, y2, w2, h2) = box1.chunk(4, -1), box2.chunk(4, -1) + w1_, h1_, w2_, h2_ = w1 / 2, h1 / 2, w2 / 2, h2 / 2 + b1_x1, b1_x2, b1_y1, b1_y2 = x1 - w1_, x1 + w1_, y1 - h1_, y1 + h1_ + b2_x1, b2_x2, b2_y1, b2_y2 = x2 - w2_, x2 + w2_, y2 - h2_, y2 + h2_ + else: # x1, y1, x2, y2 = box1 + b1_x1, b1_y1, b1_x2, b1_y2 = box1.chunk(4, -1) + b2_x1, b2_y1, b2_x2, b2_y2 = box2.chunk(4, -1) + w1, h1 = b1_x2 - b1_x1, (b1_y2 - b1_y1).clamp(eps) + w2, h2 = b2_x2 - b2_x1, (b2_y2 - b2_y1).clamp(eps) + + # Intersection area + inter = (b1_x2.minimum(b2_x2) - b1_x1.maximum(b2_x1)).clamp(0) * ( + b1_y2.minimum(b2_y2) - b1_y1.maximum(b2_y1) + ).clamp(0) + + # Union Area + union = w1 * h1 + w2 * h2 - inter + eps + + # IoU + iou = inter / union + if CIoU or DIoU or GIoU: + cw = b1_x2.maximum(b2_x2) - b1_x1.minimum(b2_x1) # convex (smallest enclosing box) width + ch = b1_y2.maximum(b2_y2) - b1_y1.minimum(b2_y1) # convex height + if CIoU or DIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 + c2 = cw**2 + ch**2 + eps # convex diagonal squared + rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4 # center dist ** 2 + if CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 + v = (4 / math.pi**2) * (torch.atan(w2 / h2) - torch.atan(w1 / h1)).pow(2) + with torch.no_grad(): + alpha = v / (v - iou + (1 + eps)) + return iou - (rho2 / c2 + v * alpha) # CIoU + return iou - rho2 / c2 # DIoU + c_area = cw * ch + eps # convex area + return iou - (c_area - union) / c_area # GIoU https://arxiv.org/pdf/1902.09630.pdf + return iou # IoU + + +def box_iou(box1, box2, eps=1e-7): + # https://github.com/pytorch/vision/blob/master/torchvision/ops/boxes.py + """Return intersection-over-union (Jaccard index) of boxes. + + Both sets of boxes are expected to be in (x1, y1, x2, y2) format. + + Args: + box1 (Tensor[N, 4]): box2 (Tensor[M, 4]) + + Returns: + iou (Tensor[N, M]): the NxM matrix containing the pairwise IoU values for every element in boxes1 and boxes2 + """ + # inter(N,M) = (rb(N,M,2) - lt(N,M,2)).clamp(0).prod(2) + (a1, a2), (b1, b2) = box1.unsqueeze(1).chunk(2, 2), box2.unsqueeze(0).chunk(2, 2) + inter = (torch.min(a2, b2) - torch.max(a1, b1)).clamp(0).prod(2) + + # IoU = inter / (area1 + area2 - inter) + return inter / ((a2 - a1).prod(2) + (b2 - b1).prod(2) - inter + eps) + + +def bbox_ioa(box1, box2, eps=1e-7): + """Returns the intersection over box2 area given box1, box2. + + Boxes are x1y1x2y2 box1: np.array of shape(4) box2: np.array of shape(nx4) returns: np.array of shape(n) + """ + # Get the coordinates of bounding boxes + b1_x1, b1_y1, b1_x2, b1_y2 = box1 + b2_x1, b2_y1, b2_x2, b2_y2 = box2.T + + # Intersection area + inter_area = (np.minimum(b1_x2, b2_x2) - np.maximum(b1_x1, b2_x1)).clip(0) * ( + np.minimum(b1_y2, b2_y2) - np.maximum(b1_y1, b2_y1) + ).clip(0) + + # box2 area + box2_area = (b2_x2 - b2_x1) * (b2_y2 - b2_y1) + eps + + # Intersection over box2 area + return inter_area / box2_area + + +def wh_iou(wh1, wh2, eps=1e-7): + """Calculates the IoU of width-height pairs, wh1[n,2] and wh2[m,2], returning an nxm IoU matrix.""" + wh1 = wh1[:, None] # [N,1,2] + wh2 = wh2[None] # [1,M,2] + inter = torch.min(wh1, wh2).prod(2) # [N,M] + return inter / (wh1.prod(2) + wh2.prod(2) - inter + eps) # iou = inter / (area1 + area2 - inter) + + +# Plots ---------------------------------------------------------------------------------------------------------------- + + +@threaded +def plot_pr_curve(px, py, ap, save_dir=Path("pr_curve.png"), names=()): + """Plots precision-recall curve, supports per-class curves if < 21 classes; args: px (recall), py (precision list), + ap (APs), save_dir, names. + """ + fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) + py = np.stack(py, axis=1) + + if 0 < len(names) < 21: # display per-class legend if < 21 classes + for i, y in enumerate(py.T): + ax.plot(px, y, linewidth=1, label=f"{names[i]} {ap[i, 0]:.3f}") # plot(recall, precision) + else: + ax.plot(px, py, linewidth=1, color="grey") # plot(recall, precision) + + ax.plot(px, py.mean(1), linewidth=3, color="blue", label=f"all classes {ap[:, 0].mean():.3f} mAP@0.5") + ax.set_xlabel("Recall") + ax.set_ylabel("Precision") + ax.set_xlim(0, 1) + ax.set_ylim(0, 1) + ax.legend(bbox_to_anchor=(1.04, 1), loc="upper left") + ax.set_title("Precision-Recall Curve") + fig.savefig(save_dir, dpi=250) + plt.close(fig) + + +@threaded +def plot_mc_curve(px, py, save_dir=Path("mc_curve.png"), names=(), xlabel="Confidence", ylabel="Metric"): + """Plots metric-confidence curve for given classes; px, py shapes (N,), (C, N); save_dir: str or Path; names: tuple + of class names. + """ + fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) + + if 0 < len(names) < 21: # display per-class legend if < 21 classes + for i, y in enumerate(py): + ax.plot(px, y, linewidth=1, label=f"{names[i]}") # plot(confidence, metric) + else: + ax.plot(px, py.T, linewidth=1, color="grey") # plot(confidence, metric) + + y = smooth(py.mean(0), 0.05) + ax.plot(px, y, linewidth=3, color="blue", label=f"all classes {y.max():.2f} at {px[y.argmax()]:.3f}") + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + ax.set_xlim(0, 1) + ax.set_ylim(0, 1) + ax.legend(bbox_to_anchor=(1.04, 1), loc="upper left") + ax.set_title(f"{ylabel}-Confidence Curve") + fig.savefig(save_dir, dpi=250) + plt.close(fig) diff --git a/utils/parse_config.py b/utils/parse_config.py deleted file mode 100644 index 23581a51d2..0000000000 --- a/utils/parse_config.py +++ /dev/null @@ -1,42 +0,0 @@ -import numpy as np - - -def parse_model_cfg(path): - # Parses the yolo-v3 layer configuration file and returns module definitions - file = open(path, 'r') - lines = file.read().split('\n') - lines = [x for x in lines if x and not x.startswith('#')] - lines = [x.rstrip().lstrip() for x in lines] # get rid of fringe whitespaces - mdefs = [] # module definitions - for line in lines: - if line.startswith('['): # This marks the start of a new block - mdefs.append({}) - mdefs[-1]['type'] = line[1:-1].rstrip() - if mdefs[-1]['type'] == 'convolutional': - mdefs[-1]['batch_normalize'] = 0 # pre-populate with zeros (may be overwritten later) - else: - key, val = line.split("=") - key = key.rstrip() - - if 'anchors' in key: - mdefs[-1][key] = np.array([float(x) for x in val.split(',')]).reshape((-1, 2)) # np anchors - else: - mdefs[-1][key] = val.strip() - - return mdefs - - -def parse_data_cfg(path): - # Parses the data configuration file - options = dict() - with open(path, 'r') as fp: - lines = fp.readlines() - - for line in lines: - line = line.strip() - if line == '' or line.startswith('#'): - continue - key, val = line.split('=') - options[key.strip()] = val.strip() - - return options diff --git a/utils/plots.py b/utils/plots.py new file mode 100644 index 0000000000..7d75c9be22 --- /dev/null +++ b/utils/plots.py @@ -0,0 +1,482 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Plotting utils.""" + +import contextlib +import math +import os +from copy import copy +from pathlib import Path + +import cv2 +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import seaborn as sn +import torch +from PIL import Image, ImageDraw +from scipy.ndimage.filters import gaussian_filter1d +from ultralytics.utils.plotting import Annotator + +from utils import TryExcept, threaded +from utils.general import LOGGER, clip_boxes, increment_path, xywh2xyxy, xyxy2xywh +from utils.metrics import fitness + +# Settings +RANK = int(os.getenv("RANK", -1)) +matplotlib.rc("font", **{"size": 11}) +matplotlib.use("Agg") # for writing to files only + + +class Colors: + """Provides a color palette and methods to convert indices to RGB or BGR color tuples.""" + + def __init__(self): + """Initializes the Colors class with a palette from the Ultralytics color palette.""" + hexs = ( + "FF3838", + "FF9D97", + "FF701F", + "FFB21D", + "CFD231", + "48F90A", + "92CC17", + "3DDB86", + "1A9334", + "00D4BB", + "2C99A8", + "00C2FF", + "344593", + "6473FF", + "0018EC", + "8438FF", + "520085", + "CB38FF", + "FF95C8", + "FF37C7", + ) + self.palette = [self.hex2rgb(f"#{c}") for c in hexs] + self.n = len(self.palette) + + def __call__(self, i, bgr=False): + """Converts index `i` to a color from predefined palette, returning in BGR format if `bgr` is True, else RGB.""" + c = self.palette[int(i) % self.n] + return (c[2], c[1], c[0]) if bgr else c + + @staticmethod + def hex2rgb(h): # rgb order (PIL) + """Converts hexadecimal color `h` to RGB tuple; `h` format should be '#RRGGBB'.""" + return tuple(int(h[1 + i : 1 + i + 2], 16) for i in (0, 2, 4)) + + +colors = Colors() # create instance for 'from utils.plots import colors' + + +def feature_visualization(x, module_type, stage, n=32, save_dir=Path("runs/detect/exp")): + """x: Features to be visualized module_type: Module type stage: Module stage within model n: Maximum number of + feature maps to plot save_dir: Directory to save results. + """ + if "Detect" not in module_type: + _batch, channels, height, width = x.shape # batch, channels, height, width + if height > 1 and width > 1: + f = save_dir / f"stage{stage}_{module_type.split('.')[-1]}_features.png" # filename + + blocks = torch.chunk(x[0].cpu(), channels, dim=0) # select batch index 0, block by channels + n = min(n, channels) # number of plots + _fig, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True) # 8 rows x n/8 cols + ax = ax.ravel() + plt.subplots_adjust(wspace=0.05, hspace=0.05) + for i in range(n): + ax[i].imshow(blocks[i].squeeze()) # cmap='gray' + ax[i].axis("off") + + LOGGER.info(f"Saving {f}... ({n}/{channels})") + plt.savefig(f, dpi=300, bbox_inches="tight") + plt.close() + np.save(str(f.with_suffix(".npy")), x[0].cpu().numpy()) # npy save + + +def hist2d(x, y, n=100): + """Generates a 2D log-scaled histogram from input arrays `x` and `y`, with `n` bins for each axis.""" + xedges, yedges = np.linspace(x.min(), x.max(), n), np.linspace(y.min(), y.max(), n) + hist, xedges, yedges = np.histogram2d(x, y, (xedges, yedges)) + xidx = np.clip(np.digitize(x, xedges) - 1, 0, hist.shape[0] - 1) + yidx = np.clip(np.digitize(y, yedges) - 1, 0, hist.shape[1] - 1) + return np.log(hist[xidx, yidx]) + + +def butter_lowpass_filtfilt(data, cutoff=1500, fs=50000, order=5): + """Applies a low-pass Butterworth filter using forward-backward method. + + See: https://stackoverflow.com/questions/28536191/how-to-filter-smooth-with-scipy-numpy + """ + from scipy.signal import butter, filtfilt + + # https://stackoverflow.com/questions/28536191/how-to-filter-smooth-with-scipy-numpy + def butter_lowpass(cutoff, fs, order): + """Applies a low-pass Butterworth filter to input data using forward-backward method; see + https://stackoverflow.com/questions/28536191/how-to-filter-smooth-with-scipy-numpy. + """ + nyq = 0.5 * fs + normal_cutoff = cutoff / nyq + return butter(order, normal_cutoff, btype="low", analog=False) + + b, a = butter_lowpass(cutoff, fs, order=order) + return filtfilt(b, a, data) # forward-backward filter + + +def output_to_target(output, max_det=300): + """Converts model output to [batch_id, class_id, x, y, w, h, conf] format for plotting, handling up to `max_det` + detections. + """ + targets = [] + for i, o in enumerate(output): + box, conf, cls = o[:max_det, :6].cpu().split((4, 1, 1), 1) + j = torch.full((conf.shape[0], 1), i) + targets.append(torch.cat((j, cls, xyxy2xywh(box), conf), 1)) + return torch.cat(targets, 0).numpy() + + +@threaded +def plot_images(images, targets, paths=None, fname="images.jpg", names=None): + """Plots a grid of images with labels, optionally resizing and annotating with target boxes and names.""" + if isinstance(images, torch.Tensor): + images = images.cpu().float().numpy() + if isinstance(targets, torch.Tensor): + targets = targets.cpu().numpy() + + max_size = 1920 # max image size + max_subplots = 16 # max image subplots, i.e. 4x4 + bs, _, h, w = images.shape # batch size, _, height, width + bs = min(bs, max_subplots) # limit plot images + ns = np.ceil(bs**0.5) # number of subplots (square) + if np.max(images[0]) <= 1: + images *= 255 # de-normalise (optional) + + # Build Image + mosaic = np.full((int(ns * h), int(ns * w), 3), 255, dtype=np.uint8) # init + for i, im in enumerate(images): + if i == max_subplots: # if last batch has fewer images than we expect + break + x, y = int(w * (i // ns)), int(h * (i % ns)) # block origin + im = im.transpose(1, 2, 0) + mosaic[y : y + h, x : x + w, :] = im + + # Resize (optional) + scale = max_size / ns / max(h, w) + if scale < 1: + h = math.ceil(scale * h) + w = math.ceil(scale * w) + mosaic = cv2.resize(mosaic, tuple(int(x * ns) for x in (w, h))) + + # Annotate + fs = int((h + w) * ns * 0.01) # font size + annotator = Annotator(mosaic, line_width=round(fs / 10), font_size=fs, pil=True, example=names) + for i in range(i + 1): + x, y = int(w * (i // ns)), int(h * (i % ns)) # block origin + annotator.rectangle([x, y, x + w, y + h], None, (255, 255, 255), width=2) # borders + if paths: + annotator.text([x + 5, y + 5], text=Path(paths[i]).name[:40], txt_color=(220, 220, 220)) # filenames + if len(targets) > 0: + ti = targets[targets[:, 0] == i] # image targets + boxes = xywh2xyxy(ti[:, 2:6]).T + classes = ti[:, 1].astype("int") + labels = ti.shape[1] == 6 # labels if no conf column + conf = None if labels else ti[:, 6] # check for confidence presence (label vs pred) + + if boxes.shape[1]: + if boxes.max() <= 1.01: # if normalized with tolerance 0.01 + boxes[[0, 2]] *= w # scale to pixels + boxes[[1, 3]] *= h + elif scale < 1: # absolute coords need scale if image scales + boxes *= scale + boxes[[0, 2]] += x + boxes[[1, 3]] += y + for j, box in enumerate(boxes.T.tolist()): + cls = classes[j] + color = colors(cls) + cls = names[cls] if names else cls + if labels or conf[j] > 0.25: # 0.25 conf thresh + label = f"{cls}" if labels else f"{cls} {conf[j]:.1f}" + annotator.box_label(box, label, color=color) + annotator.im.save(fname) # save + + +def plot_lr_scheduler(optimizer, scheduler, epochs=300, save_dir=""): + """Simulates and plots LR schedule over epochs, saving figure to `save_dir`.""" + optimizer, scheduler = copy(optimizer), copy(scheduler) # do not modify originals + y = [] + for _ in range(epochs): + scheduler.step() + y.append(optimizer.param_groups[0]["lr"]) + plt.plot(y, ".-", label="LR") + plt.xlabel("epoch") + plt.ylabel("LR") + plt.grid() + plt.xlim(0, epochs) + plt.ylim(0) + plt.savefig(Path(save_dir) / "LR.png", dpi=200) + plt.close() + + +def plot_val_txt(): # from utils.plots import *; plot_val() + """Plots 2D and 1D histograms of object center locations from 'val.txt', saving as 'hist2d.png' and 'hist1d.png'.""" + x = np.loadtxt("val.txt", dtype=np.float32) + box = xyxy2xywh(x[:, :4]) + cx, cy = box[:, 0], box[:, 1] + + fig, ax = plt.subplots(1, 1, figsize=(6, 6), tight_layout=True) + ax.hist2d(cx, cy, bins=600, cmax=10, cmin=0) + ax.set_aspect("equal") + plt.savefig("hist2d.png", dpi=300) + + _fig, ax = plt.subplots(1, 2, figsize=(12, 6), tight_layout=True) + ax[0].hist(cx, bins=600) + ax[1].hist(cy, bins=600) + plt.savefig("hist1d.png", dpi=200) + + +def plot_targets_txt(): # from utils.plots import *; plot_targets_txt() + """Plots histograms for target attributes from 'targets.txt' and saves as 'targets.jpg'.""" + x = np.loadtxt("targets.txt", dtype=np.float32).T + s = ["x targets", "y targets", "width targets", "height targets"] + _fig, ax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True) + ax = ax.ravel() + for i in range(4): + ax[i].hist(x[i], bins=100, label=f"{x[i].mean():.3g} +/- {x[i].std():.3g}") + ax[i].legend() + ax[i].set_title(s[i]) + plt.savefig("targets.jpg", dpi=200) + + +def plot_val_study(file="", dir="", x=None): # from utils.plots import *; plot_val_study() + """Plots validation study results from 'study*.txt' files, comparing model performance and speed.""" + save_dir = Path(file).parent if file else Path(dir) + plot2 = False # plot additional results + if plot2: + ax = plt.subplots(2, 4, figsize=(10, 6), tight_layout=True)[1].ravel() + + _fig2, ax2 = plt.subplots(1, 1, figsize=(8, 4), tight_layout=True) + # for f in [save_dir / f'study_coco_{x}.txt' for x in ['yolov5n6', 'yolov5s6', 'yolov5m6', 'yolov5l6', 'yolov5x6']]: + for f in sorted(save_dir.glob("study*.txt")): + y = np.loadtxt(f, dtype=np.float32, usecols=[0, 1, 2, 3, 7, 8, 9], ndmin=2).T + x = np.arange(y.shape[1]) if x is None else np.array(x) + if plot2: + s = ["P", "R", "mAP@.5", "mAP@.5:.95", "t_preprocess (ms/img)", "t_inference (ms/img)", "t_NMS (ms/img)"] + for i in range(7): + ax[i].plot(x, y[i], ".-", linewidth=2, markersize=8) + ax[i].set_title(s[i]) + + j = y[3].argmax() + 1 + ax2.plot( + y[5, 1:j], + y[3, 1:j] * 1e2, + ".-", + linewidth=2, + markersize=8, + label=f.stem.replace("study_coco_", "").replace("yolo", "YOLO"), + ) + + ax2.plot( + 1e3 / np.array([209, 140, 97, 58, 35, 18]), + [34.6, 40.5, 43.0, 47.5, 49.7, 51.5], + "k.-", + linewidth=2, + markersize=8, + alpha=0.25, + label="EfficientDet", + ) + + ax2.grid(alpha=0.2) + ax2.set_yticks(np.arange(20, 60, 5)) + ax2.set_xlim(0, 57) + ax2.set_ylim(25, 55) + ax2.set_xlabel("GPU Speed (ms/img)") + ax2.set_ylabel("COCO AP val") + ax2.legend(loc="lower right") + f = save_dir / "study.png" + print(f"Saving {f}...") + plt.savefig(f, dpi=300) + + +@TryExcept() # known issue https://github.com/ultralytics/yolov5/issues/5395 +def plot_labels(labels, names=(), save_dir=Path("")): + """Plots dataset labels correlogram, class distribution, and label geometry; saves to `save_dir`.""" + LOGGER.info(f"Plotting labels to {save_dir / 'labels.jpg'}... ") + c, b = labels[:, 0], labels[:, 1:].transpose() # classes, boxes + nc = int(c.max() + 1) # number of classes + x = pd.DataFrame(b.transpose(), columns=["x", "y", "width", "height"]) + + # seaborn correlogram + sn.pairplot(x, corner=True, diag_kind="auto", kind="hist", diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9)) + plt.savefig(save_dir / "labels_correlogram.jpg", dpi=200) + plt.close() + + # matplotlib labels + matplotlib.use("svg") # faster + ax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True)[1].ravel() + y = ax[0].hist(c, bins=np.linspace(0, nc, nc + 1) - 0.5, rwidth=0.8) + with contextlib.suppress(Exception): # color histogram bars by class + [y[2].patches[i].set_color([x / 255 for x in colors(i)]) for i in range(nc)] # known issue #3195 + ax[0].set_ylabel("instances") + if 0 < len(names) < 30: + ax[0].set_xticks(range(len(names))) + ax[0].set_xticklabels(list(names.values()), rotation=90, fontsize=10) + else: + ax[0].set_xlabel("classes") + sn.histplot(x, x="x", y="y", ax=ax[2], bins=50, pmax=0.9) + sn.histplot(x, x="width", y="height", ax=ax[3], bins=50, pmax=0.9) + + # rectangles + labels[:, 1:3] = 0.5 # center + labels[:, 1:] = xywh2xyxy(labels[:, 1:]) * 2000 + img = Image.fromarray(np.ones((2000, 2000, 3), dtype=np.uint8) * 255) + for cls, *box in labels[:1000]: + ImageDraw.Draw(img).rectangle(box, width=1, outline=colors(cls)) # plot + ax[1].imshow(img) + ax[1].axis("off") + + for a in [0, 1, 2, 3]: + for s in ["top", "right", "left", "bottom"]: + ax[a].spines[s].set_visible(False) + + plt.savefig(save_dir / "labels.jpg", dpi=200) + matplotlib.use("Agg") + plt.close() + + +def imshow_cls(im, labels=None, pred=None, names=None, nmax=25, verbose=False, f=Path("images.jpg")): + """Displays a grid of classification images with optional labels and predictions, saving to file.""" + from utils.augmentations import denormalize + + names = names or [f"class{i}" for i in range(1000)] + blocks = torch.chunk( + denormalize(im.clone()).cpu().float(), len(im), dim=0 + ) # select batch index 0, block by channels + n = min(len(blocks), nmax) # number of plots + m = min(8, round(n**0.5)) # 8 x 8 default + _fig, ax = plt.subplots(math.ceil(n / m), m) # 8 rows x n/8 cols + ax = ax.ravel() if m > 1 else [ax] + # plt.subplots_adjust(wspace=0.05, hspace=0.05) + for i in range(n): + ax[i].imshow(blocks[i].squeeze().permute((1, 2, 0)).numpy().clip(0.0, 1.0)) + ax[i].axis("off") + if labels is not None: + s = names[labels[i]] + (f"—{names[pred[i]]}" if pred is not None else "") + ax[i].set_title(s, fontsize=8, verticalalignment="top") + plt.savefig(f, dpi=300, bbox_inches="tight") + plt.close() + if verbose: + LOGGER.info(f"Saving {f}") + if labels is not None: + LOGGER.info("True: " + " ".join(f"{names[i]:3s}" for i in labels[:nmax])) + if pred is not None: + LOGGER.info("Predicted:" + " ".join(f"{names[i]:3s}" for i in pred[:nmax])) + return f + + +def plot_evolve(evolve_csv="path/to/evolve.csv"): # from utils.plots import *; plot_evolve() + """Plots evolution of hyperparameters from a CSV file, highlighting best results.""" + evolve_csv = Path(evolve_csv) + data = pd.read_csv(evolve_csv) + keys = [x.strip() for x in data.columns] + x = data.values + f = fitness(x) + j = np.argmax(f) # max fitness index + plt.figure(figsize=(10, 12), tight_layout=True) + matplotlib.rc("font", **{"size": 8}) + print(f"Best results from row {j} of {evolve_csv}:") + for i, k in enumerate(keys[7:]): + v = x[:, 7 + i] + mu = v[j] # best single result + plt.subplot(6, 5, i + 1) + plt.scatter(v, f, c=hist2d(v, f, 20), cmap="viridis", alpha=0.8, edgecolors="none") + plt.plot(mu, f.max(), "k+", markersize=15) + plt.title(f"{k} = {mu:.3g}", fontdict={"size": 9}) # limit to 40 characters + if i % 5 != 0: + plt.yticks([]) + print(f"{k:>15}: {mu:.3g}") + f = evolve_csv.with_suffix(".png") # filename + plt.savefig(f, dpi=200) + plt.close() + print(f"Saved {f}") + + +def plot_results(file="path/to/results.csv", dir=""): + """Plots training results from 'results.csv'; usage: `plot_results('path/to/results.csv')`.""" + save_dir = Path(file).parent if file else Path(dir) + fig, ax = plt.subplots(2, 5, figsize=(12, 6), tight_layout=True) + ax = ax.ravel() + files = list(save_dir.glob("results*.csv")) + assert len(files), f"No results.csv files found in {save_dir.resolve()}, nothing to plot." + for f in files: + try: + data = pd.read_csv(f) + s = [x.strip() for x in data.columns] + x = data.values[:, 0] + for i, j in enumerate([1, 2, 3, 4, 5, 8, 9, 10, 6, 7]): + y = data.values[:, j].astype("float") + # y[y == 0] = np.nan # don't show zero values + ax[i].plot(x, y, marker=".", label=f.stem, linewidth=2, markersize=8) # actual results + ax[i].plot(x, gaussian_filter1d(y, sigma=3), ":", label="smooth", linewidth=2) # smoothing line + ax[i].set_title(s[j], fontsize=12) + # if j in [8, 9, 10]: # share train and val loss y axes + # ax[i].get_shared_y_axes().join(ax[i], ax[i - 5]) + except Exception as e: + LOGGER.info(f"Warning: Plotting error for {f}: {e}") + ax[1].legend() + fig.savefig(save_dir / "results.png", dpi=200) + plt.close() + + +def profile_idetection(start=0, stop=0, labels=(), save_dir=""): + """Plots iDetection per-image logs from '*.txt', including metrics like storage and FPS; pass start, stop times, + labels, and save_dir. + """ + ax = plt.subplots(2, 4, figsize=(12, 6), tight_layout=True)[1].ravel() + s = ["Images", "Free Storage (GB)", "RAM Usage (GB)", "Battery", "dt_raw (ms)", "dt_smooth (ms)", "real-world FPS"] + files = list(Path(save_dir).glob("frames*.txt")) + for fi, f in enumerate(files): + try: + results = np.loadtxt(f, ndmin=2).T[:, 90:-30] # clip first and last rows + n = results.shape[1] # number of rows + x = np.arange(start, min(stop, n) if stop else n) + results = results[:, x] + t = results[0] - results[0].min() # set t0=0s + results[0] = x + for i, a in enumerate(ax): + if i < len(results): + label = labels[fi] if len(labels) else f.stem.replace("frames_", "") + a.plot(t, results[i], marker=".", label=label, linewidth=1, markersize=5) + a.set_title(s[i]) + a.set_xlabel("time (s)") + # if fi == len(files) - 1: + # a.set_ylim(bottom=0) + for side in ["top", "right"]: + a.spines[side].set_visible(False) + else: + a.remove() + except Exception as e: + print(f"Warning: Plotting error for {f}; {e}") + ax[1].legend() + plt.savefig(Path(save_dir) / "idetection_profile.png", dpi=200) + + +def save_one_box(xyxy, im, file=Path("im.jpg"), gain=1.02, pad=10, square=False, BGR=False, save=True): + """Saves/enhances a crop from `im` defined by `xyxy` to `file` or returns it; customizable with `gain`, `pad`, + `square`, `BGR`. + """ + xyxy = torch.tensor(xyxy).view(-1, 4) + b = xyxy2xywh(xyxy) # boxes + if square: + b[:, 2:] = b[:, 2:].max(1)[0].unsqueeze(1) # attempt rectangle to square + b[:, 2:] = b[:, 2:] * gain + pad # box wh * gain + pad + xyxy = xywh2xyxy(b).long() + clip_boxes(xyxy, im.shape) + crop = im[int(xyxy[0, 1]) : int(xyxy[0, 3]), int(xyxy[0, 0]) : int(xyxy[0, 2]), :: (1 if BGR else -1)] + if save: + file.parent.mkdir(parents=True, exist_ok=True) # make directory + f = str(increment_path(file).with_suffix(".jpg")) + # cv2.imwrite(f, crop) # save BGR, https://github.com/ultralytics/yolov5/issues/7007 chroma subsampling issue + Image.fromarray(crop[..., ::-1]).save(f, quality=95, subsampling=0) # save RGB + return crop diff --git a/utils/segment/__init__.py b/utils/segment/__init__.py new file mode 100644 index 0000000000..77a19dcf0f --- /dev/null +++ b/utils/segment/__init__.py @@ -0,0 +1 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license diff --git a/utils/segment/augmentations.py b/utils/segment/augmentations.py new file mode 100644 index 0000000000..cdec000e33 --- /dev/null +++ b/utils/segment/augmentations.py @@ -0,0 +1,90 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Image augmentation functions.""" + +import math +import random + +import cv2 +import numpy as np + +from ..augmentations import box_candidates +from ..general import resample_segments, segment2box + + +def mixup(im, labels, segments, im2, labels2, segments2): + """Applies MixUp augmentation by blending pairs of images, labels, and segments; see + https://arxiv.org/pdf/1710.09412.pdf. + """ + r = np.random.beta(32.0, 32.0) # mixup ratio, alpha=beta=32.0 + im = (im * r + im2 * (1 - r)).astype(np.uint8) + labels = np.concatenate((labels, labels2), 0) + segments = np.concatenate((segments, segments2), 0) + return im, labels, segments + + +def random_perspective( + im, targets=(), segments=(), degrees=10, translate=0.1, scale=0.1, shear=10, perspective=0.0, border=(0, 0) +): + # torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-10, 10)) + # targets = [cls, xyxy] + """Applies random perspective augmentation including rotation, translation, scale, and shear transformations.""" + height = im.shape[0] + border[0] * 2 # shape(h,w,c) + width = im.shape[1] + border[1] * 2 + + # Center + C = np.eye(3) + C[0, 2] = -im.shape[1] / 2 # x translation (pixels) + C[1, 2] = -im.shape[0] / 2 # y translation (pixels) + + # Perspective + P = np.eye(3) + P[2, 0] = random.uniform(-perspective, perspective) # x perspective (about y) + P[2, 1] = random.uniform(-perspective, perspective) # y perspective (about x) + + # Rotation and Scale + R = np.eye(3) + a = random.uniform(-degrees, degrees) + # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations + s = random.uniform(1 - scale, 1 + scale) + # s = 2 ** random.uniform(-scale, scale) + R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s) + + # Shear + S = np.eye(3) + S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # x shear (deg) + S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # y shear (deg) + + # Translation + T = np.eye(3) + T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * width # x translation (pixels) + T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * height # y translation (pixels) + + # Combined rotation matrix + M = T @ S @ R @ P @ C # order of operations (right to left) is IMPORTANT + if (border[0] != 0) or (border[1] != 0) or (M != np.eye(3)).any(): # image changed + if perspective: + im = cv2.warpPerspective(im, M, dsize=(width, height), borderValue=(114, 114, 114)) + else: # affine + im = cv2.warpAffine(im, M[:2], dsize=(width, height), borderValue=(114, 114, 114)) + + new_segments = [] + if n := len(targets): + new = np.zeros((n, 4)) + segments = resample_segments(segments) # upsample + for i, segment in enumerate(segments): + xy = np.ones((len(segment), 3)) + xy[:, :2] = segment + xy = xy @ M.T # transform + xy = xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2] # perspective rescale or affine + + # clip + new[i] = segment2box(xy, width, height) + new_segments.append(xy) + + # filter candidates + i = box_candidates(box1=targets[:, 1:5].T * s, box2=new.T, area_thr=0.01) + targets = targets[i] + targets[:, 1:5] = new[i] + new_segments = np.array(new_segments)[i] + + return im, targets, new_segments diff --git a/utils/segment/dataloaders.py b/utils/segment/dataloaders.py new file mode 100644 index 0000000000..b3ef0baaf2 --- /dev/null +++ b/utils/segment/dataloaders.py @@ -0,0 +1,360 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Dataloaders.""" + +import os +import random + +import cv2 +import numpy as np +import torch +from torch.utils.data import DataLoader, distributed + +from ..augmentations import augment_hsv, copy_paste, letterbox +from ..dataloaders import InfiniteDataLoader, LoadImagesAndLabels, seed_worker +from ..general import LOGGER, xyn2xy, xywhn2xyxy, xyxy2xywhn +from ..torch_utils import torch_distributed_zero_first +from .augmentations import mixup, random_perspective + +RANK = int(os.getenv("RANK", -1)) + + +def create_dataloader( + path, + imgsz, + batch_size, + stride, + single_cls=False, + hyp=None, + augment=False, + cache=False, + pad=0.0, + rect=False, + rank=-1, + workers=8, + image_weights=False, + quad=False, + prefix="", + shuffle=False, + mask_downsample_ratio=1, + overlap_mask=False, + seed=0, +): + """Creates a DataLoader for images and labels with optional augmentations and distributed sampling.""" + if rect and shuffle: + LOGGER.warning("WARNING ⚠️ --rect is incompatible with DataLoader shuffle, setting shuffle=False") + shuffle = False + with torch_distributed_zero_first(rank): # init dataset *.cache only once if DDP + dataset = LoadImagesAndLabelsAndMasks( + path, + imgsz, + batch_size, + augment=augment, # augmentation + hyp=hyp, # hyperparameters + rect=rect, # rectangular batches + cache_images=cache, + single_cls=single_cls, + stride=int(stride), + pad=pad, + image_weights=image_weights, + prefix=prefix, + downsample_ratio=mask_downsample_ratio, + overlap=overlap_mask, + ) + + batch_size = min(batch_size, len(dataset)) + nd = torch.cuda.device_count() # number of CUDA devices + nw = min([os.cpu_count() // max(nd, 1), batch_size if batch_size > 1 else 0, workers]) # number of workers + sampler = None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle) + loader = DataLoader if image_weights else InfiniteDataLoader # only DataLoader allows for attribute updates + generator = torch.Generator() + generator.manual_seed(6148914691236517205 + seed + RANK) + return loader( + dataset, + batch_size=batch_size, + shuffle=shuffle and sampler is None, + num_workers=nw, + sampler=sampler, + pin_memory=True, + collate_fn=LoadImagesAndLabelsAndMasks.collate_fn4 if quad else LoadImagesAndLabelsAndMasks.collate_fn, + worker_init_fn=seed_worker, + generator=generator, + ), dataset + + +class LoadImagesAndLabelsAndMasks(LoadImagesAndLabels): # for training/testing + """Loads images, labels, and masks for training/testing with optional augmentations including mosaic and mixup.""" + + def __init__( + self, + path, + img_size=640, + batch_size=16, + augment=False, + hyp=None, + rect=False, + image_weights=False, + cache_images=False, + single_cls=False, + stride=32, + pad=0, + min_items=0, + prefix="", + downsample_ratio=1, + overlap=False, + ): + """Initializes image, label, and mask loading for training/testing with optional augmentations.""" + super().__init__( + path, + img_size, + batch_size, + augment, + hyp, + rect, + image_weights, + cache_images, + single_cls, + stride, + pad, + min_items, + prefix, + ) + self.downsample_ratio = downsample_ratio + self.overlap = overlap + + def __getitem__(self, index): + """Fetches the dataset item at a given index, handling linear, shuffled, or image-weighted indexing.""" + index = self.indices[index] # linear, shuffled, or image_weights + + hyp = self.hyp + if mosaic := self.mosaic and random.random() < hyp["mosaic"]: + # Load mosaic + img, labels, segments = self.load_mosaic(index) + shapes = None + + # MixUp augmentation + if random.random() < hyp["mixup"]: + img, labels, segments = mixup(img, labels, segments, *self.load_mosaic(random.randint(0, self.n - 1))) + + else: + # Load image + img, (h0, w0), (h, w) = self.load_image(index) + + # Letterbox + shape = self.batch_shapes[self.batch[index]] if self.rect else self.img_size # final letterboxed shape + img, ratio, pad = letterbox(img, shape, auto=False, scaleup=self.augment) + shapes = (h0, w0), ((h / h0, w / w0), pad) # for COCO mAP rescaling + + labels = self.labels[index].copy() + # [array, array, ....], array.shape=(num_points, 2), xyxyxyxy + segments = self.segments[index].copy() + if len(segments): + for i_s in range(len(segments)): + segments[i_s] = xyn2xy( + segments[i_s], + ratio[0] * w, + ratio[1] * h, + padw=pad[0], + padh=pad[1], + ) + if labels.size: # normalized xywh to pixel xyxy format + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], ratio[0] * w, ratio[1] * h, padw=pad[0], padh=pad[1]) + + if self.augment: + img, labels, segments = random_perspective( + img, + labels, + segments=segments, + degrees=hyp["degrees"], + translate=hyp["translate"], + scale=hyp["scale"], + shear=hyp["shear"], + perspective=hyp["perspective"], + ) + + nl = len(labels) # number of labels + masks = [] + if nl: + labels[:, 1:5] = xyxy2xywhn(labels[:, 1:5], w=img.shape[1], h=img.shape[0], clip=True, eps=1e-3) + if self.overlap: + masks, sorted_idx = polygons2masks_overlap( + img.shape[:2], segments, downsample_ratio=self.downsample_ratio + ) + masks = masks[None] # (640, 640) -> (1, 640, 640) + labels = labels[sorted_idx] + else: + masks = polygons2masks(img.shape[:2], segments, color=1, downsample_ratio=self.downsample_ratio) + + masks = ( + torch.from_numpy(masks) + if len(masks) + else torch.zeros( + 1 if self.overlap else nl, img.shape[0] // self.downsample_ratio, img.shape[1] // self.downsample_ratio + ) + ) + # TODO: albumentations support + if self.augment: + # Albumentations + # there are some augmentation that won't change boxes and masks, + # so just be it for now. + img, labels = self.albumentations(img, labels) + nl = len(labels) # update after albumentations + + # HSV color-space + augment_hsv(img, hgain=hyp["hsv_h"], sgain=hyp["hsv_s"], vgain=hyp["hsv_v"]) + + # Flip up-down + if random.random() < hyp["flipud"]: + img = np.flipud(img) + if nl: + labels[:, 2] = 1 - labels[:, 2] + masks = torch.flip(masks, dims=[1]) + + # Flip left-right + if random.random() < hyp["fliplr"]: + img = np.fliplr(img) + if nl: + labels[:, 1] = 1 - labels[:, 1] + masks = torch.flip(masks, dims=[2]) + + # Cutouts # labels = cutout(img, labels, p=0.5) + + labels_out = torch.zeros((nl, 6)) + if nl: + labels_out[:, 1:] = torch.from_numpy(labels) + + # Convert + img = img.transpose((2, 0, 1))[::-1] # HWC to CHW, BGR to RGB + img = np.ascontiguousarray(img) + + return (torch.from_numpy(img), labels_out, self.im_files[index], shapes, masks) + + def load_mosaic(self, index): + """Loads 4-image mosaic for YOLOv3 training, combining 1 target image with 3 random images within specified + border constraints. + """ + labels4, segments4 = [], [] + s = self.img_size + yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border) # mosaic center x, y + + # 3 additional image indices + indices = [index] + random.choices(self.indices, k=3) # 3 additional image indices + for i, index in enumerate(indices): + # Load image + img, _, (h, w) = self.load_image(index) + + # place img in img4 + if i == 0: # top left + img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles + x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) + x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) + elif i == 1: # top right + x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc + x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h + elif i == 2: # bottom left + x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) + x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) + elif i == 3: # bottom right + x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) + x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) + + img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] + padw = x1a - x1b + padh = y1a - y1b + + labels, segments = self.labels[index].copy(), self.segments[index].copy() + + if labels.size: + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh) # normalized xywh to pixel xyxy format + segments = [xyn2xy(x, w, h, padw, padh) for x in segments] + labels4.append(labels) + segments4.extend(segments) + + # Concat/clip labels + labels4 = np.concatenate(labels4, 0) + for x in (labels4[:, 1:], *segments4): + np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() + # img4, labels4 = replicate(img4, labels4) # replicate + + # Augment + img4, labels4, segments4 = copy_paste(img4, labels4, segments4, p=self.hyp["copy_paste"]) + img4, labels4, segments4 = random_perspective( + img4, + labels4, + segments4, + degrees=self.hyp["degrees"], + translate=self.hyp["translate"], + scale=self.hyp["scale"], + shear=self.hyp["shear"], + perspective=self.hyp["perspective"], + border=self.mosaic_border, + ) # border to remove + return img4, labels4, segments4 + + @staticmethod + def collate_fn(batch): + """Batches images, labels, paths, shapes, and masks; modifies label indices for target image association.""" + img, label, path, shapes, masks = zip(*batch) # transposed + batched_masks = torch.cat(masks, 0) + for i, l in enumerate(label): + l[:, 0] = i # add target image index for build_targets() + return torch.stack(img, 0), torch.cat(label, 0), path, shapes, batched_masks + + +def polygon2mask(img_size, polygons, color=1, downsample_ratio=1): + """ + Args: + img_size (tuple): The image size. + polygons (np.ndarray): [N, M], N is the number of polygons, M is the number of points(Be divided by 2). + """ + mask = np.zeros(img_size, dtype=np.uint8) + polygons = np.asarray(polygons) + polygons = polygons.astype(np.int32) + shape = polygons.shape + polygons = polygons.reshape(shape[0], -1, 2) + cv2.fillPoly(mask, polygons, color=color) + nh, nw = (img_size[0] // downsample_ratio, img_size[1] // downsample_ratio) + # NOTE: fillPoly firstly then resize is trying the keep the same way + # of loss calculation when mask-ratio=1. + mask = cv2.resize(mask, (nw, nh)) + return mask + + +def polygons2masks(img_size, polygons, color, downsample_ratio=1): + """ + Args: + img_size (tuple): The image size. + polygons (list[np.ndarray]): each polygon is [N, M], N is the number of polygons, M is the number of points(Be + divided by 2). + """ + masks = [] + for si in range(len(polygons)): + mask = polygon2mask(img_size, [polygons[si].reshape(-1)], color, downsample_ratio) + masks.append(mask) + return np.array(masks) + + +def polygons2masks_overlap(img_size, segments, downsample_ratio=1): + """Return a (640, 640) overlap mask.""" + masks = np.zeros( + (img_size[0] // downsample_ratio, img_size[1] // downsample_ratio), + dtype=np.int32 if len(segments) > 255 else np.uint8, + ) + areas = [] + ms = [] + for si in range(len(segments)): + mask = polygon2mask( + img_size, + [segments[si].reshape(-1)], + downsample_ratio=downsample_ratio, + color=1, + ) + ms.append(mask) + areas.append(mask.sum()) + areas = np.asarray(areas) + index = np.argsort(-areas) + ms = np.array(ms)[index] + for i in range(len(segments)): + mask = ms[i] * (i + 1) + masks = masks + mask + masks = np.clip(masks, a_min=0, a_max=i + 1) + return masks, index diff --git a/utils/segment/general.py b/utils/segment/general.py new file mode 100644 index 0000000000..4774d7b65e --- /dev/null +++ b/utils/segment/general.py @@ -0,0 +1,139 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +import cv2 +import numpy as np +import torch +import torch.nn.functional as F + + +def crop_mask(masks, boxes): + """"Crop" predicted masks by zeroing out everything not in the predicted bbox. Vectorized by Chong (thanks Chong). + + Args: + - masks should be a size [n, h, w] tensor of masks + - boxes should be a size [n, 4] tensor of bbox coords in relative point form + """ + _n, h, w = masks.shape + x1, y1, x2, y2 = torch.chunk(boxes[:, :, None], 4, 1) # x1 shape(1,1,n) + r = torch.arange(w, device=masks.device, dtype=x1.dtype)[None, None, :] # rows shape(1,w,1) + c = torch.arange(h, device=masks.device, dtype=x1.dtype)[None, :, None] # cols shape(h,1,1) + + return masks * ((r >= x1) * (r < x2) * (c >= y1) * (c < y2)) + + +def process_mask_upsample(protos, masks_in, bboxes, shape): + """Crop after upsample. protos: [mask_dim, mask_h, mask_w] masks_in: [n, mask_dim], n is number of masks after nms + bboxes: [n, 4], n is number of masks after nms shape: input_image_size, (h, w). + + return: h, w, n + """ + c, mh, mw = protos.shape # CHW + masks = (masks_in @ protos.float().view(c, -1)).sigmoid().view(-1, mh, mw) + masks = F.interpolate(masks[None], shape, mode="bilinear", align_corners=False)[0] # CHW + masks = crop_mask(masks, bboxes) # CHW + return masks.gt_(0.5) + + +def process_mask(protos, masks_in, bboxes, shape, upsample=False): + """Crop before upsample. proto_out: [mask_dim, mask_h, mask_w] out_masks: [n, mask_dim], n is number of masks after + nms bboxes: [n, 4], n is number of masks after nms shape:input_image_size, (h, w). + + return: h, w, n + """ + c, mh, mw = protos.shape # CHW + ih, iw = shape + masks = (masks_in @ protos.float().view(c, -1)).sigmoid().view(-1, mh, mw) # CHW + + downsampled_bboxes = bboxes.clone() + downsampled_bboxes[:, 0] *= mw / iw + downsampled_bboxes[:, 2] *= mw / iw + downsampled_bboxes[:, 3] *= mh / ih + downsampled_bboxes[:, 1] *= mh / ih + + masks = crop_mask(masks, downsampled_bboxes) # CHW + if upsample: + masks = F.interpolate(masks[None], shape, mode="bilinear", align_corners=False)[0] # CHW + return masks.gt_(0.5) + + +def process_mask_native(protos, masks_in, bboxes, shape): + """Crop after upsample. protos: [mask_dim, mask_h, mask_w] masks_in: [n, mask_dim], n is number of masks after nms + bboxes: [n, 4], n is number of masks after nms shape: input_image_size, (h, w). + + return: h, w, n + """ + c, mh, mw = protos.shape # CHW + masks = (masks_in @ protos.float().view(c, -1)).sigmoid().view(-1, mh, mw) + gain = min(mh / shape[0], mw / shape[1]) # gain = old / new + pad = (mw - shape[1] * gain) / 2, (mh - shape[0] * gain) / 2 # wh padding + top, left = int(pad[1]), int(pad[0]) # y, x + bottom, right = int(mh - pad[1]), int(mw - pad[0]) + masks = masks[:, top:bottom, left:right] + + masks = F.interpolate(masks[None], shape, mode="bilinear", align_corners=False)[0] # CHW + masks = crop_mask(masks, bboxes) # CHW + return masks.gt_(0.5) + + +def scale_image(im1_shape, masks, im0_shape, ratio_pad=None): + """Img1_shape: model input shape, [h, w] img0_shape: origin pic shape, [h, w, 3] masks: [h, w, num].""" + # Rescale coordinates (xyxy) from im1_shape to im0_shape + if ratio_pad is None: # calculate from im0_shape + gain = min(im1_shape[0] / im0_shape[0], im1_shape[1] / im0_shape[1]) # gain = old / new + pad = (im1_shape[1] - im0_shape[1] * gain) / 2, (im1_shape[0] - im0_shape[0] * gain) / 2 # wh padding + else: + pad = ratio_pad[1] + top, left = int(pad[1]), int(pad[0]) # y, x + bottom, right = int(im1_shape[0] - pad[1]), int(im1_shape[1] - pad[0]) + + if len(masks.shape) < 2: + raise ValueError(f'"len of masks shape" should be 2 or 3, but got {len(masks.shape)}') + masks = masks[top:bottom, left:right] + # masks = masks.permute(2, 0, 1).contiguous() + # masks = F.interpolate(masks[None], im0_shape[:2], mode='bilinear', align_corners=False)[0] + # masks = masks.permute(1, 2, 0).contiguous() + masks = cv2.resize(masks, (im0_shape[1], im0_shape[0])) + + if len(masks.shape) == 2: + masks = masks[:, :, None] + return masks + + +def mask_iou(mask1, mask2, eps=1e-7): + """mask1: [N, n] m1 means number of predicted objects mask2: [M, n] m2 means number of gt objects Note: n means + image_w x image_h. + + return: masks iou, [N, M] + """ + intersection = torch.matmul(mask1, mask2.t()).clamp(0) + union = (mask1.sum(1)[:, None] + mask2.sum(1)[None]) - intersection # (area1 + area2) - intersection + return intersection / (union + eps) + + +def masks_iou(mask1, mask2, eps=1e-7): + """mask1: [N, n] m1 means number of predicted objects mask2: [N, n] m2 means number of gt objects Note: n means + image_w x image_h. + + return: masks iou, (N, ) + """ + intersection = (mask1 * mask2).sum(1).clamp(0) # (N, ) + union = (mask1.sum(1) + mask2.sum(1))[None] - intersection # (area1 + area2) - intersection + return intersection / (union + eps) + + +def masks2segments(masks, strategy="largest"): + """Converts binary masks to polygon segments with 'largest' or 'concat' strategies, returning lists of (n,xy) + coordinates. + """ + segments = [] + for x in masks.int().cpu().numpy().astype("uint8"): + c = cv2.findContours(x, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0] + if c: + if strategy == "concat": # concatenate all segments + c = np.concatenate([x.reshape(-1, 2) for x in c]) + elif strategy == "largest": # select largest segment + c = np.array(c[np.array([len(x) for x in c]).argmax()]).reshape(-1, 2) + else: + c = np.zeros((0, 2)) # no segments found + segments.append(c.astype("float32")) + return segments diff --git a/utils/segment/loss.py b/utils/segment/loss.py new file mode 100644 index 0000000000..657ac15005 --- /dev/null +++ b/utils/segment/loss.py @@ -0,0 +1,199 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from ..general import xywh2xyxy +from ..loss import FocalLoss, smooth_BCE +from ..metrics import bbox_iou +from ..torch_utils import de_parallel +from .general import crop_mask + + +class ComputeLoss: + """Computes classification, box regression, objectness, and segmentation losses for YOLOv3 model predictions.""" + + def __init__(self, model, autobalance=False, overlap=False): + """Initializes ComputeLoss with model settings, optional autobalancing, and overlap handling.""" + self.sort_obj_iou = False + self.overlap = overlap + device = next(model.parameters()).device # get model device + h = model.hyp # hyperparameters + + # Define criteria + BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h["cls_pw"]], device=device)) + BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h["obj_pw"]], device=device)) + + # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 + self.cp, self.cn = smooth_BCE(eps=h.get("label_smoothing", 0.0)) # positive, negative BCE targets + + # Focal loss + g = h["fl_gamma"] # focal loss gamma + if g > 0: + BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) + + m = de_parallel(model).model[-1] # Detect() module + self.balance = {3: [4.0, 1.0, 0.4]}.get(m.nl, [4.0, 1.0, 0.25, 0.06, 0.02]) # P3-P7 + self.ssi = list(m.stride).index(16) if autobalance else 0 # stride 16 index + self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, 1.0, h, autobalance + self.na = m.na # number of anchors + self.nc = m.nc # number of classes + self.nl = m.nl # number of layers + self.nm = m.nm # number of masks + self.anchors = m.anchors + self.device = device + + def __call__(self, preds, targets, masks): # predictions, targets, model + """Computes losses given predictions, targets, and masks; returns tuple of class, box, object, and segmentation + losses. + """ + p, proto = preds + bs, nm, mask_h, mask_w = proto.shape # batch size, number of masks, mask height, mask width + lcls = torch.zeros(1, device=self.device) + lbox = torch.zeros(1, device=self.device) + lobj = torch.zeros(1, device=self.device) + lseg = torch.zeros(1, device=self.device) + tcls, tbox, indices, anchors, tidxs, xywhn = self.build_targets(p, targets) # targets + + # Losses + for i, pi in enumerate(p): # layer index, layer predictions + b, a, gj, gi = indices[i] # image, anchor, gridy, gridx + tobj = torch.zeros(pi.shape[:4], dtype=pi.dtype, device=self.device) # target obj + + if n := b.shape[0]: + pxy, pwh, _, pcls, pmask = pi[b, a, gj, gi].split((2, 2, 1, self.nc, nm), 1) # subset of predictions + + # Box regression + pxy = pxy.sigmoid() * 2 - 0.5 + pwh = (pwh.sigmoid() * 2) ** 2 * anchors[i] + pbox = torch.cat((pxy, pwh), 1) # predicted box + iou = bbox_iou(pbox, tbox[i], CIoU=True).squeeze() # iou(prediction, target) + lbox += (1.0 - iou).mean() # iou loss + + # Objectness + iou = iou.detach().clamp(0).type(tobj.dtype) + if self.sort_obj_iou: + j = iou.argsort() + b, a, gj, gi, iou = b[j], a[j], gj[j], gi[j], iou[j] + if self.gr < 1: + iou = (1.0 - self.gr) + self.gr * iou + tobj[b, a, gj, gi] = iou # iou ratio + + # Classification + if self.nc > 1: # cls loss (only if multiple classes) + t = torch.full_like(pcls, self.cn, device=self.device) # targets + t[range(n), tcls[i]] = self.cp + lcls += self.BCEcls(pcls, t) # BCE + + # Mask regression + if tuple(masks.shape[-2:]) != (mask_h, mask_w): # downsample + masks = F.interpolate(masks[None], (mask_h, mask_w), mode="nearest")[0] + marea = xywhn[i][:, 2:].prod(1) # mask width, height normalized + mxyxy = xywh2xyxy(xywhn[i] * torch.tensor([mask_w, mask_h, mask_w, mask_h], device=self.device)) + for bi in b.unique(): + j = b == bi # matching index + if self.overlap: + mask_gti = torch.where(masks[bi][None] == tidxs[i][j].view(-1, 1, 1), 1.0, 0.0) + else: + mask_gti = masks[tidxs[i]][j] + lseg += self.single_mask_loss(mask_gti, pmask[j], proto[bi], mxyxy[j], marea[j]) + + obji = self.BCEobj(pi[..., 4], tobj) + lobj += obji * self.balance[i] # obj loss + if self.autobalance: + self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() + + if self.autobalance: + self.balance = [x / self.balance[self.ssi] for x in self.balance] + lbox *= self.hyp["box"] + lobj *= self.hyp["obj"] + lcls *= self.hyp["cls"] + lseg *= self.hyp["box"] / bs + + loss = lbox + lobj + lcls + lseg + return loss * bs, torch.cat((lbox, lseg, lobj, lcls)).detach() + + def single_mask_loss(self, gt_mask, pred, proto, xyxy, area): + """Computes single image mask loss using BCE, cropping based on bbox. + + Args: gt_mask[n,h,w], pred[n,nm], proto[nm,h,w], xyxy[n,4], area[n]. + """ + pred_mask = (pred @ proto.view(self.nm, -1)).view(-1, *proto.shape[1:]) # (n,32) @ (32,80,80) -> (n,80,80) + loss = F.binary_cross_entropy_with_logits(pred_mask, gt_mask, reduction="none") + return (crop_mask(loss, xyxy).mean(dim=(1, 2)) / area).mean() + + def build_targets(self, p, targets): + """Prepares targets for loss computation by appending anchor indices; supports optional target overlap handling. + """ + na, nt = self.na, targets.shape[0] # number of anchors, targets + tcls, tbox, indices, anch, tidxs, xywhn = [], [], [], [], [], [] + gain = torch.ones(8, device=self.device) # normalized to gridspace gain + ai = torch.arange(na, device=self.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) + if self.overlap: + batch = p[0].shape[0] + ti = [] + for i in range(batch): + num = (targets[:, 0] == i).sum() # find number of targets of each image + ti.append(torch.arange(num, device=self.device).float().view(1, num).repeat(na, 1) + 1) # (na, num) + ti = torch.cat(ti, 1) # (na, nt) + else: + ti = torch.arange(nt, device=self.device).float().view(1, nt).repeat(na, 1) + targets = torch.cat((targets.repeat(na, 1, 1), ai[..., None], ti[..., None]), 2) # append anchor indices + + g = 0.5 # bias + off = ( + torch.tensor( + [ + [0, 0], + [1, 0], + [0, 1], + [-1, 0], + [0, -1], # j,k,l,m + # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm + ], + device=self.device, + ).float() + * g + ) # offsets + + for i in range(self.nl): + anchors, shape = self.anchors[i], p[i].shape + gain[2:6] = torch.tensor(shape)[[3, 2, 3, 2]] # xyxy gain + + # Match targets to anchors + t = targets * gain # shape(3,n,7) + if nt: + # Matches + r = t[..., 4:6] / anchors[:, None] # wh ratio + j = torch.max(r, 1 / r).max(2)[0] < self.hyp["anchor_t"] # compare + # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) + t = t[j] # filter + + # Offsets + gxy = t[:, 2:4] # grid xy + gxi = gain[[2, 3]] - gxy # inverse + j, k = ((gxy % 1 < g) & (gxy > 1)).T + l, m = ((gxi % 1 < g) & (gxi > 1)).T + j = torch.stack((torch.ones_like(j), j, k, l, m)) + t = t.repeat((5, 1, 1))[j] + offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] + else: + t = targets[0] + offsets = 0 + + # Define + bc, gxy, gwh, at = t.chunk(4, 1) # (image, class), grid xy, grid wh, anchors + (a, tidx), (b, c) = at.long().T, bc.long().T # anchors, image, class + gij = (gxy - offsets).long() + gi, gj = gij.T # grid indices + + # Append + indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1))) # image, anchor, grid + tbox.append(torch.cat((gxy - gij, gwh), 1)) # box + anch.append(anchors[a]) # anchors + tcls.append(c) # class + tidxs.append(tidx) + xywhn.append(torch.cat((gxy, gwh), 1) / gain[2:6]) # xywh normalized + + return tcls, tbox, indices, anch, tidxs, xywhn diff --git a/utils/segment/metrics.py b/utils/segment/metrics.py new file mode 100644 index 0000000000..efc109ba03 --- /dev/null +++ b/utils/segment/metrics.py @@ -0,0 +1,217 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Model validation metrics.""" + +import numpy as np + +from ..metrics import ap_per_class + + +def fitness(x): + """Calculates model fitness as a weighted sum of 8 metrics, where `x` is an array of shape [N, 8].""" + w = [0.0, 0.0, 0.1, 0.9, 0.0, 0.0, 0.1, 0.9] + return (x[:, :8] * w).sum(1) + + +def ap_per_class_box_and_mask( + tp_m, + tp_b, + conf, + pred_cls, + target_cls, + plot=False, + save_dir=".", + names=(), +): + """ + Args: + tp_b: tp of boxes. + tp_m: tp of masks. + other arguments see `func: ap_per_class`. + """ + results_boxes = ap_per_class( + tp_b, conf, pred_cls, target_cls, plot=plot, save_dir=save_dir, names=names, prefix="Box" + )[2:] + results_masks = ap_per_class( + tp_m, conf, pred_cls, target_cls, plot=plot, save_dir=save_dir, names=names, prefix="Mask" + )[2:] + + return { + "boxes": { + "p": results_boxes[0], + "r": results_boxes[1], + "ap": results_boxes[3], + "f1": results_boxes[2], + "ap_class": results_boxes[4], + }, + "masks": { + "p": results_masks[0], + "r": results_masks[1], + "ap": results_masks[3], + "f1": results_masks[2], + "ap_class": results_masks[4], + }, + } + + +class Metric: + """Represents model evaluation metrics including precision, recall, F1 score, and average precision (AP) values.""" + + def __init__(self) -> None: + """Initializes Metric class attributes for precision, recall, F1 score, AP values, and AP class indices.""" + self.p = [] # (nc, ) + self.r = [] # (nc, ) + self.f1 = [] # (nc, ) + self.all_ap = [] # (nc, 10) + self.ap_class_index = [] # (nc, ) + + @property + def ap50(self): + """AP@0.5 of all classes. + + Returns: + (nc, ) or []. + """ + return self.all_ap[:, 0] if len(self.all_ap) else [] + + @property + def ap(self): + """AP@0.5:0.95. + + Returns: + (nc, ) or []. + """ + return self.all_ap.mean(1) if len(self.all_ap) else [] + + @property + def mp(self): + """Mean precision of all classes. + + Returns: + float. + """ + return self.p.mean() if len(self.p) else 0.0 + + @property + def mr(self): + """Mean recall of all classes. + + Returns: + float. + """ + return self.r.mean() if len(self.r) else 0.0 + + @property + def map50(self): + """Mean AP@0.5 of all classes. + + Returns: + float. + """ + return self.all_ap[:, 0].mean() if len(self.all_ap) else 0.0 + + @property + def map(self): + """Mean AP@0.5:0.95 of all classes. + + Returns: + float. + """ + return self.all_ap.mean() if len(self.all_ap) else 0.0 + + def mean_results(self): + """Mean of results, return mp, mr, map50, map.""" + return (self.mp, self.mr, self.map50, self.map) + + def class_result(self, i): + """Class-aware result, return p[i], r[i], ap50[i], ap[i].""" + return (self.p[i], self.r[i], self.ap50[i], self.ap[i]) + + def get_maps(self, nc): + """Calculates mean average precisions (mAPs) for each class; `nc`: num of classes; returns array of mAPs per + class. + """ + maps = np.zeros(nc) + self.map + for i, c in enumerate(self.ap_class_index): + maps[c] = self.ap[i] + return maps + + def update(self, results): + """ + Args: + results: tuple(p, r, ap, f1, ap_class). + """ + p, r, all_ap, f1, ap_class_index = results + self.p = p + self.r = r + self.all_ap = all_ap + self.f1 = f1 + self.ap_class_index = ap_class_index + + +class Metrics: + """Metric for boxes and masks.""" + + def __init__(self) -> None: + """Initializes the Metrics class with separate Metric instances for boxes and masks.""" + self.metric_box = Metric() + self.metric_mask = Metric() + + def update(self, results): + """ + Args: + results: Dict{'boxes': Dict{}, 'masks': Dict{}}. + """ + self.metric_box.update(list(results["boxes"].values())) + self.metric_mask.update(list(results["masks"].values())) + + def mean_results(self): + """Calculates and returns the sum of mean results from 'metric_box' and 'metric_mask'.""" + return self.metric_box.mean_results() + self.metric_mask.mean_results() + + def class_result(self, i): + """Combines and returns class-specific results from 'metric_box' and 'metric_mask' for class index 'i'.""" + return self.metric_box.class_result(i) + self.metric_mask.class_result(i) + + def get_maps(self, nc): + """Returns combined mean Average Precision (mAP) scores for bounding boxes and masks for `nc` classes.""" + return self.metric_box.get_maps(nc) + self.metric_mask.get_maps(nc) + + @property + def ap_class_index(self): + """Returns the AP class index, identical for both boxes and masks.""" + return self.metric_box.ap_class_index + + +KEYS = [ + "train/box_loss", + "train/seg_loss", # train loss + "train/obj_loss", + "train/cls_loss", + "metrics/precision(B)", + "metrics/recall(B)", + "metrics/mAP_0.5(B)", + "metrics/mAP_0.5:0.95(B)", # metrics + "metrics/precision(M)", + "metrics/recall(M)", + "metrics/mAP_0.5(M)", + "metrics/mAP_0.5:0.95(M)", # metrics + "val/box_loss", + "val/seg_loss", # val loss + "val/obj_loss", + "val/cls_loss", + "x/lr0", + "x/lr1", + "x/lr2", +] + +BEST_KEYS = [ + "best/epoch", + "best/precision(B)", + "best/recall(B)", + "best/mAP_0.5(B)", + "best/mAP_0.5:0.95(B)", + "best/precision(M)", + "best/recall(M)", + "best/mAP_0.5(M)", + "best/mAP_0.5:0.95(M)", +] diff --git a/utils/segment/plots.py b/utils/segment/plots.py new file mode 100644 index 0000000000..bbaef3caae --- /dev/null +++ b/utils/segment/plots.py @@ -0,0 +1,149 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license + +import contextlib +import math +from pathlib import Path + +import cv2 +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import torch + +from .. import threaded +from ..general import xywh2xyxy +from ..plots import Annotator, colors + + +@threaded +def plot_images_and_masks(images, targets, masks, paths=None, fname="images.jpg", names=None): + """Plots a grid of images with annotations and masks, optionally resizing and saving the result.""" + if isinstance(images, torch.Tensor): + images = images.cpu().float().numpy() + if isinstance(targets, torch.Tensor): + targets = targets.cpu().numpy() + if isinstance(masks, torch.Tensor): + masks = masks.cpu().numpy().astype(int) + + max_size = 1920 # max image size + max_subplots = 16 # max image subplots, i.e. 4x4 + bs, _, h, w = images.shape # batch size, _, height, width + bs = min(bs, max_subplots) # limit plot images + ns = np.ceil(bs**0.5) # number of subplots (square) + if np.max(images[0]) <= 1: + images *= 255 # de-normalise (optional) + + # Build Image + mosaic = np.full((int(ns * h), int(ns * w), 3), 255, dtype=np.uint8) # init + for i, im in enumerate(images): + if i == max_subplots: # if last batch has fewer images than we expect + break + x, y = int(w * (i // ns)), int(h * (i % ns)) # block origin + im = im.transpose(1, 2, 0) + mosaic[y : y + h, x : x + w, :] = im + + # Resize (optional) + scale = max_size / ns / max(h, w) + if scale < 1: + h = math.ceil(scale * h) + w = math.ceil(scale * w) + mosaic = cv2.resize(mosaic, tuple(int(x * ns) for x in (w, h))) + + # Annotate + fs = int((h + w) * ns * 0.01) # font size + annotator = Annotator(mosaic, line_width=round(fs / 10), font_size=fs, pil=True, example=names) + for i in range(i + 1): + x, y = int(w * (i // ns)), int(h * (i % ns)) # block origin + annotator.rectangle([x, y, x + w, y + h], None, (255, 255, 255), width=2) # borders + if paths: + annotator.text([x + 5, y + 5], text=Path(paths[i]).name[:40], txt_color=(220, 220, 220)) # filenames + if len(targets) > 0: + idx = targets[:, 0] == i + ti = targets[idx] # image targets + + boxes = xywh2xyxy(ti[:, 2:6]).T + classes = ti[:, 1].astype("int") + labels = ti.shape[1] == 6 # labels if no conf column + conf = None if labels else ti[:, 6] # check for confidence presence (label vs pred) + + if boxes.shape[1]: + if boxes.max() <= 1.01: # if normalized with tolerance 0.01 + boxes[[0, 2]] *= w # scale to pixels + boxes[[1, 3]] *= h + elif scale < 1: # absolute coords need scale if image scales + boxes *= scale + boxes[[0, 2]] += x + boxes[[1, 3]] += y + for j, box in enumerate(boxes.T.tolist()): + cls = classes[j] + color = colors(cls) + cls = names[cls] if names else cls + if labels or conf[j] > 0.25: # 0.25 conf thresh + label = f"{cls}" if labels else f"{cls} {conf[j]:.1f}" + annotator.box_label(box, label, color=color) + + # Plot masks + if len(masks): + if masks.max() > 1.0: # mean that masks are overlap + image_masks = masks[[i]] # (1, 640, 640) + nl = len(ti) + index = np.arange(nl).reshape(nl, 1, 1) + 1 + image_masks = np.repeat(image_masks, nl, axis=0) + image_masks = np.where(image_masks == index, 1.0, 0.0) + else: + image_masks = masks[idx] + + im = np.asarray(annotator.im).copy() + for j, box in enumerate(boxes.T.tolist()): + if labels or conf[j] > 0.25: # 0.25 conf thresh + color = colors(classes[j]) + mh, mw = image_masks[j].shape + if mh != h or mw != w: + mask = image_masks[j].astype(np.uint8) + mask = cv2.resize(mask, (w, h)) + mask = mask.astype(bool) + else: + mask = image_masks[j].astype(bool) + with contextlib.suppress(Exception): + im[y : y + h, x : x + w, :][mask] = ( + im[y : y + h, x : x + w, :][mask] * 0.4 + np.array(color) * 0.6 + ) + annotator.fromarray(im) + annotator.im.save(fname) # save + + +def plot_results_with_masks(file="path/to/results.csv", dir="", best=True): + """Plots training results from CSV, highlighting best/last metrics; supports custom file paths and directory saving. + """ + save_dir = Path(file).parent if file else Path(dir) + fig, ax = plt.subplots(2, 8, figsize=(18, 6), tight_layout=True) + ax = ax.ravel() + files = list(save_dir.glob("results*.csv")) + assert len(files), f"No results.csv files found in {save_dir.resolve()}, nothing to plot." + for f in files: + try: + data = pd.read_csv(f) + index = np.argmax( + 0.9 * data.values[:, 8] + 0.1 * data.values[:, 7] + 0.9 * data.values[:, 12] + 0.1 * data.values[:, 11] + ) + s = [x.strip() for x in data.columns] + x = data.values[:, 0] + for i, j in enumerate([1, 2, 3, 4, 5, 6, 9, 10, 13, 14, 15, 16, 7, 8, 11, 12]): + y = data.values[:, j] + # y[y == 0] = np.nan # don't show zero values + ax[i].plot(x, y, marker=".", label=f.stem, linewidth=2, markersize=2) + if best: + # best + ax[i].scatter(index, y[index], color="r", label=f"best:{index}", marker="*", linewidth=3) + ax[i].set_title(s[j] + f"\n{round(y[index], 5)}") + else: + # last + ax[i].scatter(x[-1], y[-1], color="r", label="last", marker="*", linewidth=3) + ax[i].set_title(s[j] + f"\n{round(y[-1], 5)}") + # if j in [8, 9, 10]: # share train and val loss y axes + # ax[i].get_shared_y_axes().join(ax[i], ax[i - 5]) + except Exception as e: + print(f"Warning: Plotting error for {f}: {e}") + ax[1].legend() + fig.savefig(save_dir / "results.png", dpi=200) + plt.close() diff --git a/utils/torch_utils.py b/utils/torch_utils.py index ecbcd3063f..266afde674 100644 --- a/utils/torch_utils.py +++ b/utils/torch_utils.py @@ -1,168 +1,481 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""PyTorch utils.""" + +import math import os +import platform +import subprocess +import time +import warnings +from contextlib import contextmanager +from copy import deepcopy +from pathlib import Path import torch +import torch.distributed as dist +import torch.nn as nn +import torch.nn.functional as F +from torch.nn.parallel import DistributedDataParallel as DDP + +from utils.general import LOGGER, check_version, colorstr, file_date, git_describe + +LOCAL_RANK = int(os.getenv("LOCAL_RANK", -1)) # https://pytorch.org/docs/stable/elastic/run.html +RANK = int(os.getenv("RANK", -1)) +WORLD_SIZE = int(os.getenv("WORLD_SIZE", 1)) + +try: + import thop # for FLOPs computation +except ImportError: + thop = None + +# Suppress PyTorch warnings +warnings.filterwarnings("ignore", message="User provided device_type of 'cuda', but CUDA is not available. Disabling") +warnings.filterwarnings("ignore", category=UserWarning) + + +def smart_inference_mode(torch_1_9=check_version(torch.__version__, "1.9.0")): + """Applies torch.inference_mode() if torch>=1.9.0 or torch.no_grad() otherwise as a decorator to functions.""" + + def decorate(fn): + """Applies torch.inference_mode() if torch>=1.9.0, otherwise torch.no_grad(), as a decorator to functions.""" + return (torch.inference_mode if torch_1_9 else torch.no_grad)()(fn) + + return decorate + +def smartCrossEntropyLoss(label_smoothing=0.0): + """Returns CrossEntropyLoss with optional label smoothing for torch>=1.10.0; warns if label smoothing used with + older versions. + """ + if check_version(torch.__version__, "1.10.0"): + return nn.CrossEntropyLoss(label_smoothing=label_smoothing) + if label_smoothing > 0: + LOGGER.warning(f"WARNING ⚠️ label smoothing {label_smoothing} requires torch>=1.10.0") + return nn.CrossEntropyLoss() -def init_seeds(seed=0): - torch.manual_seed(seed) - torch.cuda.manual_seed(seed) - torch.cuda.manual_seed_all(seed) - - # Remove randomness (may be slower on Tesla GPUs) # https://pytorch.org/docs/stable/notes/randomness.html - if seed == 0: - torch.backends.cudnn.deterministic = True - torch.backends.cudnn.benchmark = False - - -def select_device(device='', apex=False, batch_size=None): - # device = 'cpu' or '0' or '0,1,2,3' - cpu_request = device.lower() == 'cpu' - if device and not cpu_request: # if device requested other than 'cpu' - os.environ['CUDA_VISIBLE_DEVICES'] = device # set environment variable - assert torch.cuda.is_available(), 'CUDA unavailable, invalid device %s requested' % device # check availablity - - cuda = False if cpu_request else torch.cuda.is_available() - if cuda: - c = 1024 ** 2 # bytes to MB - ng = torch.cuda.device_count() - if ng > 1 and batch_size: # check that batch_size is compatible with device_count - assert batch_size % ng == 0, 'batch-size %g not multiple of GPU count %g' % (batch_size, ng) - x = [torch.cuda.get_device_properties(i) for i in range(ng)] - s = 'Using CUDA ' + ('Apex ' if apex else '') # apex for mixed precision https://github.com/NVIDIA/apex - for i in range(0, ng): - if i == 1: - s = ' ' * len(s) - print("%sdevice%g _CudaDeviceProperties(name='%s', total_memory=%dMB)" % - (s, i, x[i].name, x[i].total_memory / c)) + +def smart_DDP(model): + """Initializes DDP for a model with version checks; fails for torch==1.12.0 due to known issues. + + See https://github.com/ultralytics/yolov5/issues/8395. + """ + assert not check_version(torch.__version__, "1.12.0", pinned=True), ( + "torch==1.12.0 torchvision==0.13.0 DDP training is not supported due to a known issue. " + "Please upgrade or downgrade torch to use DDP. See https://github.com/ultralytics/yolov5/issues/8395" + ) + if check_version(torch.__version__, "1.11.0"): + return DDP(model, device_ids=[LOCAL_RANK], output_device=LOCAL_RANK, static_graph=True) else: - print('Using CPU') + return DDP(model, device_ids=[LOCAL_RANK], output_device=LOCAL_RANK) + + +def reshape_classifier_output(model, n=1000): + """Reshapes the last layer of a model to have 'n' outputs; supports YOLOv3, ResNet, EfficientNet, adjusting Linear + and Conv2d layers. + """ + from models.common import Classify + + name, m = list((model.model if hasattr(model, "model") else model).named_children())[-1] # last module + if isinstance(m, Classify): # YOLOv3 Classify() head + if m.linear.out_features != n: + m.linear = nn.Linear(m.linear.in_features, n) + elif isinstance(m, nn.Linear): # ResNet, EfficientNet + if m.out_features != n: + setattr(model, name, nn.Linear(m.in_features, n)) + elif isinstance(m, nn.Sequential): + types = [type(x) for x in m] + if nn.Linear in types: + i = types.index(nn.Linear) # nn.Linear index + if m[i].out_features != n: + m[i] = nn.Linear(m[i].in_features, n) + elif nn.Conv2d in types: + i = types.index(nn.Conv2d) # nn.Conv2d index + if m[i].out_channels != n: + m[i] = nn.Conv2d(m[i].in_channels, n, m[i].kernel_size, m[i].stride, bias=m[i].bias is not None) + + +@contextmanager +def torch_distributed_zero_first(local_rank: int): + """Context manager ensuring ordered execution in distributed training by synchronizing local masters first.""" + if local_rank not in [-1, 0]: + dist.barrier(device_ids=[local_rank]) + yield + if local_rank == 0: + dist.barrier(device_ids=[0]) + + +def device_count(): + """Returns the count of available CUDA devices; supports Linux and Windows, using nvidia-smi.""" + assert platform.system() in ("Linux", "Windows"), "device_count() only supported on Linux or Windows" + try: + cmd = "nvidia-smi -L | wc -l" if platform.system() == "Linux" else 'nvidia-smi -L | find /c /v ""' # Windows + return int(subprocess.run(cmd, shell=True, capture_output=True, check=True).stdout.decode().split()[-1]) + except Exception: + return 0 + + +def select_device(device="", batch_size=0, newline=True): + """Selects the device for running models, handling CPU, GPU, and MPS with optional batch size divisibility check.""" + s = f"YOLOv3 🚀 {git_describe() or file_date()} Python-{platform.python_version()} torch-{torch.__version__} " + device = str(device).strip().lower().replace("cuda:", "").replace("none", "") # to string, 'cuda:0' to '0' + cpu = device == "cpu" + mps = device == "mps" # Apple Metal Performance Shaders (MPS) + if cpu or mps: + os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # force torch.cuda.is_available() = False + elif device: # non-cpu device requested + os.environ["CUDA_VISIBLE_DEVICES"] = device # set environment variable - must be before assert is_available() + assert torch.cuda.is_available() and torch.cuda.device_count() >= len(device.replace(",", "")), ( + f"Invalid CUDA '--device {device}' requested, use '--device cpu' or pass valid CUDA device(s)" + ) + + if not cpu and not mps and torch.cuda.is_available(): # prefer GPU if available + devices = device.split(",") if device else "0" # range(torch.cuda.device_count()) # i.e. 0,1,6,7 + n = len(devices) # device count + if n > 1 and batch_size > 0: # check batch_size is divisible by device_count + assert batch_size % n == 0, f"batch-size {batch_size} not multiple of GPU count {n}" + space = " " * (len(s) + 1) + for i, d in enumerate(devices): + p = torch.cuda.get_device_properties(i) + s += f"{'' if i == 0 else space}CUDA:{d} ({p.name}, {p.total_memory / (1 << 20):.0f}MiB)\n" # bytes to MB + arg = "cuda:0" + elif mps and getattr(torch, "has_mps", False) and torch.backends.mps.is_available(): # prefer MPS if available + s += "MPS\n" + arg = "mps" + else: # revert to CPU + s += "CPU\n" + arg = "cpu" + + if not newline: + s = s.rstrip() + LOGGER.info(s) + return torch.device(arg) + + +def time_sync(): + """Synchronizes PyTorch across available CUDA devices and returns current time in seconds.""" + if torch.cuda.is_available(): + torch.cuda.synchronize() + return time.time() + + +def profile(input, ops, n=10, device=None): + """YOLOv3 speed/memory/FLOPs profiler. + + Examples: + input = torch.randn(16, 3, 640, 640) + m1 = lambda x: x * torch.sigmoid(x) + m2 = nn.SiLU() + profile(input, [m1, m2], n=100) # profile over 100 iterations. + """ + results = [] + if not isinstance(device, torch.device): + device = select_device(device) + print( + f"{'Params':>12s}{'GFLOPs':>12s}{'GPU_mem (GB)':>14s}{'forward (ms)':>14s}{'backward (ms)':>14s}" + f"{'input':>24s}{'output':>24s}" + ) + + for x in input if isinstance(input, list) else [input]: + x = x.to(device) + x.requires_grad = True + for m in ops if isinstance(ops, list) else [ops]: + m = m.to(device) if hasattr(m, "to") else m # device + m = m.half() if hasattr(m, "half") and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m + tf, tb, t = 0, 0, [0, 0, 0] # dt forward, backward + try: + flops = thop.profile(m, inputs=(x,), verbose=False)[0] / 1e9 * 2 # GFLOPs + except Exception: + flops = 0 + + try: + for _ in range(n): + t[0] = time_sync() + y = m(x) + t[1] = time_sync() + try: + _ = (sum(yi.sum() for yi in y) if isinstance(y, list) else y).sum().backward() + t[2] = time_sync() + except Exception: # no backward method + # print(e) # for debug + t[2] = float("nan") + tf += (t[1] - t[0]) * 1000 / n # ms per op forward + tb += (t[2] - t[1]) * 1000 / n # ms per op backward + mem = torch.cuda.memory_reserved() / 1e9 if torch.cuda.is_available() else 0 # (GB) + s_in, s_out = (tuple(x.shape) if isinstance(x, torch.Tensor) else "list" for x in (x, y)) # shapes + p = sum(x.numel() for x in m.parameters()) if isinstance(m, nn.Module) else 0 # parameters + print(f"{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{s_in!s:>24s}{s_out!s:>24s}") + results.append([p, flops, mem, tf, tb, s_in, s_out]) + except Exception as e: + print(e) + results.append(None) + torch.cuda.empty_cache() + return results + + +def is_parallel(model): + """Checks if a model is using DataParallel (DP) or DistributedDataParallel (DDP).""" + return type(model) in (nn.parallel.DataParallel, nn.parallel.DistributedDataParallel) + + +def de_parallel(model): + """Returns a single-GPU model if input model is using DataParallel (DP) or DistributedDataParallel (DDP).""" + return model.module if is_parallel(model) else model + + +def initialize_weights(model): + """Initializes weights for Conv2D, BatchNorm2d, and activation layers (Hardswish, LeakyReLU, ReLU, ReLU6, SiLU) in a + model. + """ + for m in model.modules(): + t = type(m) + if t is nn.Conv2d: + pass # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif t is nn.BatchNorm2d: + m.eps = 1e-3 + m.momentum = 0.03 + elif t in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU]: + m.inplace = True + - print('') # skip a line - return torch.device('cuda:0' if cuda else 'cpu') +def find_modules(model, mclass=nn.Conv2d): + """Finds indices of layers in 'model' matching 'mclass'; default searches for 'nn.Conv2d'.""" + return [i for i, m in enumerate(model.module_list) if isinstance(m, mclass)] + + +def sparsity(model): + """Calculates and returns the global sparsity of a model as the ratio of zero-valued parameters to total parameters. + """ + a, b = 0, 0 + for p in model.parameters(): + a += p.numel() + b += (p == 0).sum() + return b / a + + +def prune(model, amount=0.3): + """Prunes Conv2d layers in a model to a specified global sparsity using l1 unstructured pruning.""" + import torch.nn.utils.prune as prune + + for name, m in model.named_modules(): + if isinstance(m, nn.Conv2d): + prune.l1_unstructured(m, name="weight", amount=amount) # prune + prune.remove(m, "weight") # make permanent + LOGGER.info(f"Model pruned to {sparsity(model):.3g} global sparsity") def fuse_conv_and_bn(conv, bn): - # https://tehnokv.com/posts/fusing-batchnorm-and-conv/ - with torch.no_grad(): - # init - fusedconv = torch.nn.Conv2d(conv.in_channels, - conv.out_channels, - kernel_size=conv.kernel_size, - stride=conv.stride, - padding=conv.padding, - bias=True) - - # prepare filters - w_conv = conv.weight.clone().view(conv.out_channels, -1) - w_bn = torch.diag(bn.weight.div(torch.sqrt(bn.eps + bn.running_var))) - fusedconv.weight.copy_(torch.mm(w_bn, w_conv).view(fusedconv.weight.size())) - - # prepare spatial bias - if conv.bias is not None: - b_conv = conv.bias - else: - b_conv = torch.zeros(conv.weight.size(0)) - b_bn = bn.bias - bn.weight.mul(bn.running_mean).div(torch.sqrt(bn.running_var + bn.eps)) - fusedconv.bias.copy_(b_conv + b_bn) + """Fuses Conv2d and BatchNorm2d layers for efficiency; see https://tehnokv.com/posts/fusing-batchnorm-and-conv/.""" + fusedconv = ( + nn.Conv2d( + conv.in_channels, + conv.out_channels, + kernel_size=conv.kernel_size, + stride=conv.stride, + padding=conv.padding, + dilation=conv.dilation, + groups=conv.groups, + bias=True, + ) + .requires_grad_(False) + .to(conv.weight.device) + ) + + # Prepare filters + w_conv = conv.weight.clone().view(conv.out_channels, -1) + w_bn = torch.diag(bn.weight.div(torch.sqrt(bn.eps + bn.running_var))) + fusedconv.weight.copy_(torch.mm(w_bn, w_conv).view(fusedconv.weight.shape)) + + # Prepare spatial bias + b_conv = torch.zeros(conv.weight.size(0), device=conv.weight.device) if conv.bias is None else conv.bias + b_bn = bn.bias - bn.weight.mul(bn.running_mean).div(torch.sqrt(bn.running_var + bn.eps)) + fusedconv.bias.copy_(torch.mm(w_bn, b_conv.reshape(-1, 1)).reshape(-1) + b_bn) + + return fusedconv - return fusedconv +def model_info(model, verbose=False, imgsz=640): + """Prints model layers, parameters, gradients, and GFLOPs if verbose; handles various `imgsz`. -def model_info(model, report='summary'): - # Plots a line-by-line description of a PyTorch model + Usage: model_info(model). + """ n_p = sum(x.numel() for x in model.parameters()) # number parameters n_g = sum(x.numel() for x in model.parameters() if x.requires_grad) # number gradients - if report is 'full': - print('%5s %40s %9s %12s %20s %10s %10s' % ('layer', 'name', 'gradient', 'parameters', 'shape', 'mu', 'sigma')) + if verbose: + print(f"{'layer':>5} {'name':>40} {'gradient':>9} {'parameters':>12} {'shape':>20} {'mu':>10} {'sigma':>10}") for i, (name, p) in enumerate(model.named_parameters()): - name = name.replace('module_list.', '') - print('%5g %40s %9s %12g %20s %10.3g %10.3g' % - (i, name, p.requires_grad, p.numel(), list(p.shape), p.mean(), p.std())) - print('Model Summary: %g layers, %g parameters, %g gradients' % (len(list(model.parameters())), n_p, n_g)) - - -def load_classifier(name='resnet101', n=2): - # Loads a pretrained model reshaped to n-class output - import pretrainedmodels # https://github.com/Cadene/pretrained-models.pytorch#torchvision - model = pretrainedmodels.__dict__[name](num_classes=1000, pretrained='imagenet') - - # Display model properties - for x in ['model.input_size', 'model.input_space', 'model.input_range', 'model.mean', 'model.std']: - print(x + ' =', eval(x)) - - # Reshape output to n classes - filters = model.last_linear.weight.shape[1] - model.last_linear.bias = torch.nn.Parameter(torch.zeros(n)) - model.last_linear.weight = torch.nn.Parameter(torch.zeros(n, filters)) - model.last_linear.out_features = n - return model - - -from collections import defaultdict -from torch.optim import Optimizer - -class Lookahead(Optimizer): - def __init__(self, optimizer, k=5, alpha=0.5): - self.optimizer = optimizer - self.k = k - self.alpha = alpha - self.param_groups = self.optimizer.param_groups - self.state = defaultdict(dict) - self.fast_state = self.optimizer.state - for group in self.param_groups: - group["counter"] = 0 - - def update(self, group): - for fast in group["params"]: - param_state = self.state[fast] - if "slow_param" not in param_state: - param_state["slow_param"] = torch.zeros_like(fast.data) - param_state["slow_param"].copy_(fast.data) - slow = param_state["slow_param"] - slow += (fast.data - slow) * self.alpha - fast.data.copy_(slow) - - def update_lookahead(self): - for group in self.param_groups: - self.update(group) - - def step(self, closure=None): - loss = self.optimizer.step(closure) - for group in self.param_groups: - if group["counter"] == 0: - self.update(group) - group["counter"] += 1 - if group["counter"] >= self.k: - group["counter"] = 0 - return loss - - def state_dict(self): - fast_state_dict = self.optimizer.state_dict() - slow_state = { - (id(k) if isinstance(k, torch.Tensor) else k): v - for k, v in self.state.items() - } - fast_state = fast_state_dict["state"] - param_groups = fast_state_dict["param_groups"] - return { - "fast_state": fast_state, - "slow_state": slow_state, - "param_groups": param_groups, - } - - def load_state_dict(self, state_dict): - slow_state_dict = { - "state": state_dict["slow_state"], - "param_groups": state_dict["param_groups"], - } - fast_state_dict = { - "state": state_dict["fast_state"], - "param_groups": state_dict["param_groups"], - } - super(Lookahead, self).load_state_dict(slow_state_dict) - self.optimizer.load_state_dict(fast_state_dict) - self.fast_state = self.optimizer.state - - def add_param_group(self, param_group): - param_group["counter"] = 0 - self.optimizer.add_param_group(param_group) \ No newline at end of file + name = name.replace("module_list.", "") + print( + "%5g %40s %9s %12g %20s %10.3g %10.3g" + % (i, name, p.requires_grad, p.numel(), list(p.shape), p.mean(), p.std()) + ) + + try: # FLOPs + p = next(model.parameters()) + stride = max(int(model.stride.max()), 32) if hasattr(model, "stride") else 32 # max stride + im = torch.empty((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format + flops = thop.profile(deepcopy(model), inputs=(im,), verbose=False)[0] / 1e9 * 2 # stride GFLOPs + imgsz = imgsz if isinstance(imgsz, list) else [imgsz, imgsz] # expand if int/float + fs = f", {flops * imgsz[0] / stride * imgsz[1] / stride:.1f} GFLOPs" # 640x640 GFLOPs + except Exception: + fs = "" + + name = Path(model.yaml_file).stem.replace("yolov5", "YOLOv3") if hasattr(model, "yaml_file") else "Model" + LOGGER.info(f"{name} summary: {len(list(model.modules()))} layers, {n_p} parameters, {n_g} gradients{fs}") + + +def scale_img(img, ratio=1.0, same_shape=False, gs=32): # img(16,3,256,416) + """Scales and optionally pads an image tensor to a specified ratio, maintaining its aspect ratio constrained by + `gs`. + """ + if ratio == 1.0: + return img + h, w = img.shape[2:] + s = (int(h * ratio), int(w * ratio)) # new size + img = F.interpolate(img, size=s, mode="bilinear", align_corners=False) # resize + if not same_shape: # pad/crop img + h, w = (math.ceil(x * ratio / gs) * gs for x in (h, w)) + return F.pad(img, [0, w - s[1], 0, h - s[0]], value=0.447) # value = imagenet mean + + +def copy_attr(a, b, include=(), exclude=()): + """Copies attributes from object b to a, with options to include or exclude specific attributes.""" + for k, v in b.__dict__.items(): + if (len(include) and k not in include) or k.startswith("_") or k in exclude: + continue + else: + setattr(a, k, v) + + +def smart_optimizer(model, name="Adam", lr=0.001, momentum=0.9, decay=1e-5): + """Initializes a smart optimizer for YOLOv3 with custom parameter groups for different weight decays and biases.""" + g = [], [], [] # optimizer parameter groups + bn = tuple(v for k, v in nn.__dict__.items() if "Norm" in k) # normalization layers, i.e. BatchNorm2d() + for v in model.modules(): + for p_name, p in v.named_parameters(recurse=0): + if p_name == "bias": # bias (no decay) + g[2].append(p) + elif p_name == "weight" and isinstance(v, bn): # weight (no decay) + g[1].append(p) + else: + g[0].append(p) # weight (with decay) + + if name == "Adam": + optimizer = torch.optim.Adam(g[2], lr=lr, betas=(momentum, 0.999)) # adjust beta1 to momentum + elif name == "AdamW": + optimizer = torch.optim.AdamW(g[2], lr=lr, betas=(momentum, 0.999), weight_decay=0.0) + elif name == "RMSProp": + optimizer = torch.optim.RMSprop(g[2], lr=lr, momentum=momentum) + elif name == "SGD": + optimizer = torch.optim.SGD(g[2], lr=lr, momentum=momentum, nesterov=True) + else: + raise NotImplementedError(f"Optimizer {name} not implemented.") + + optimizer.add_param_group({"params": g[0], "weight_decay": decay}) # add g0 with weight_decay + optimizer.add_param_group({"params": g[1], "weight_decay": 0.0}) # add g1 (BatchNorm2d weights) + LOGGER.info( + f"{colorstr('optimizer:')} {type(optimizer).__name__}(lr={lr}) with parameter groups " + f"{len(g[1])} weight(decay=0.0), {len(g[0])} weight(decay={decay}), {len(g[2])} bias" + ) + return optimizer + + +def smart_hub_load(repo="ultralytics/yolov5", model="yolov5s", **kwargs): + """Loads YOLO model from Ultralytics repo with smart error handling, supports `force_reload` on failure. + + See https://github.com/ultralytics/yolov5 + """ + if check_version(torch.__version__, "1.9.1"): + kwargs["skip_validation"] = True # validation causes GitHub API rate limit errors + if check_version(torch.__version__, "1.12.0"): + kwargs["trust_repo"] = True # argument required starting in torch 0.12 + try: + return torch.hub.load(repo, model, **kwargs) + except Exception: + return torch.hub.load(repo, model, force_reload=True, **kwargs) + + +def smart_resume(ckpt, optimizer, ema=None, weights="yolov5s.pt", epochs=300, resume=True): + """Resumes or fine-tunes training from a checkpoint with optimizer and EMA support; updates epochs based on + progress. + """ + best_fitness = 0.0 + start_epoch = ckpt["epoch"] + 1 + if ckpt["optimizer"] is not None: + optimizer.load_state_dict(ckpt["optimizer"]) # optimizer + best_fitness = ckpt["best_fitness"] + if ema and ckpt.get("ema"): + ema.ema.load_state_dict(ckpt["ema"].float().state_dict()) # EMA + ema.updates = ckpt["updates"] + if resume: + assert start_epoch > 0, ( + f"{weights} training to {epochs} epochs is finished, nothing to resume.\n" + f"Start a new training without --resume, i.e. 'python train.py --weights {weights}'" + ) + LOGGER.info(f"Resuming training from {weights} from epoch {start_epoch} to {epochs} total epochs") + if epochs < start_epoch: + LOGGER.info(f"{weights} has been trained for {ckpt['epoch']} epochs. Fine-tuning for {epochs} more epochs.") + epochs += ckpt["epoch"] # finetune additional epochs + return best_fitness, start_epoch, epochs + + +class EarlyStopping: + """Monitors training to halt if no improvement in fitness metric is observed for a specified number of epochs.""" + + def __init__(self, patience=30): + """Initializes EarlyStopping to monitor training, halting if no improvement in 'patience' epochs, defaulting to + 30. + """ + self.best_fitness = 0.0 # i.e. mAP + self.best_epoch = 0 + self.patience = patience or float("inf") # epochs to wait after fitness stops improving to stop + self.possible_stop = False # possible stop may occur next epoch + + def __call__(self, epoch, fitness): + """Updates stopping criteria based on fitness; returns True to stop if no improvement in 'patience' epochs.""" + if fitness >= self.best_fitness: # >= 0 to allow for early zero-fitness stage of training + self.best_epoch = epoch + self.best_fitness = fitness + delta = epoch - self.best_epoch # epochs without improvement + self.possible_stop = delta >= (self.patience - 1) # possible stop may occur next epoch + stop = delta >= self.patience # stop training if patience exceeded + if stop: + LOGGER.info( + f"Stopping training early as no improvement observed in last {self.patience} epochs. " + f"Best results observed at epoch {self.best_epoch}, best model saved as best.pt.\n" + f"To update EarlyStopping(patience={self.patience}) pass a new patience value, " + f"i.e. `python train.py --patience 300` or use `--patience 0` to disable EarlyStopping." + ) + return stop + + +class ModelEMA: + """Updated Exponential Moving Average (EMA) from https://github.com/rwightman/pytorch-image-models Keeps a moving + average of everything in the model state_dict (parameters and buffers) For EMA details + see https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage. + """ + + def __init__(self, model, decay=0.9999, tau=2000, updates=0): + """Initializes EMA with model, optional decay (default 0.9999), tau (2000), and updates count, setting model to + eval mode. + """ + self.ema = deepcopy(de_parallel(model)).eval() # FP32 EMA + self.updates = updates # number of EMA updates + self.decay = lambda x: decay * (1 - math.exp(-x / tau)) # decay exponential ramp (to help early epochs) + for p in self.ema.parameters(): + p.requires_grad_(False) + + def update(self, model): + """Updates EMA parameters based on model weights, decay factor, and increment update count.""" + self.updates += 1 + d = self.decay(self.updates) + + msd = de_parallel(model).state_dict() # model state_dict + for k, v in self.ema.state_dict().items(): + if v.dtype.is_floating_point: # true for FP16 and FP32 + v *= d + v += (1 - d) * msd[k].detach() + # assert v.dtype == msd[k].dtype == torch.float32, f'{k}: EMA {v.dtype} and model {msd[k].dtype} must be FP32' + + def update_attr(self, model, include=(), exclude=("process_group", "reducer")): + """Updates EMA attributes by copying from model, excluding 'process_group' and 'reducer' by default.""" + copy_attr(self.ema, model, include, exclude) diff --git a/utils/triton.py b/utils/triton.py new file mode 100644 index 0000000000..376ba4f881 --- /dev/null +++ b/utils/triton.py @@ -0,0 +1,87 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +"""Utils to interact with the Triton Inference Server.""" + +from __future__ import annotations + +from urllib.parse import urlparse + +import torch + + +class TritonRemoteModel: + """A wrapper over a model served by the Triton Inference Server. + + It can be configured to communicate over GRPC or HTTP. It accepts Torch Tensors as input and returns them as + outputs. + """ + + def __init__(self, url: str): + """Keyword Arguments: url: Fully qualified address of the Triton server - for e.g. grpc://localhost:8000.""" + parsed_url = urlparse(url) + if parsed_url.scheme == "grpc": + from tritonclient.grpc import InferenceServerClient, InferInput + + self.client = InferenceServerClient(parsed_url.netloc) # Triton GRPC client + model_repository = self.client.get_model_repository_index() + self.model_name = model_repository.models[0].name + self.metadata = self.client.get_model_metadata(self.model_name, as_json=True) + + def create_input_placeholders() -> list[InferInput]: + return [ + InferInput(i["name"], [int(s) for s in i["shape"]], i["datatype"]) for i in self.metadata["inputs"] + ] + + else: + from tritonclient.http import InferenceServerClient, InferInput + + self.client = InferenceServerClient(parsed_url.netloc) # Triton HTTP client + model_repository = self.client.get_model_repository_index() + self.model_name = model_repository[0]["name"] + self.metadata = self.client.get_model_metadata(self.model_name) + + def create_input_placeholders() -> list[InferInput]: + return [ + InferInput(i["name"], [int(s) for s in i["shape"]], i["datatype"]) for i in self.metadata["inputs"] + ] + + self._create_input_placeholders_fn = create_input_placeholders + + @property + def runtime(self): + """Returns the model runtime.""" + return self.metadata.get("backend", self.metadata.get("platform")) + + def __call__(self, *args, **kwargs) -> torch.Tensor | tuple[torch.Tensor, ...]: + """Invokes the model. + + Parameters can be provided via args or kwargs. args, if provided, are assumed to match the order of inputs of + the model. kwargs are matched with the model input names. + """ + inputs = self._create_inputs(*args, **kwargs) + response = self.client.infer(model_name=self.model_name, inputs=inputs) + result = [] + for output in self.metadata["outputs"]: + tensor = torch.as_tensor(response.as_numpy(output["name"])) + result.append(tensor) + return result[0] if len(result) == 1 else result + + def _create_inputs(self, *args, **kwargs): + """Generates model inputs from args or kwargs, not allowing both; raises error if neither or both are provided. + """ + args_len, kwargs_len = len(args), len(kwargs) + if not args_len and not kwargs_len: + raise RuntimeError("No inputs provided.") + if args_len and kwargs_len: + raise RuntimeError("Cannot specify args and kwargs at the same time") + + placeholders = self._create_input_placeholders_fn() + if args_len: + if args_len != len(placeholders): + raise RuntimeError(f"Expected {len(placeholders)} inputs, got {args_len}.") + for input, value in zip(placeholders, args): + input.set_data_from_numpy(value.cpu().numpy()) + else: + for input in placeholders: + value = kwargs[input.name] + input.set_data_from_numpy(value.cpu().numpy()) + return placeholders diff --git a/utils/utils.py b/utils/utils.py deleted file mode 100755 index 1208398822..0000000000 --- a/utils/utils.py +++ /dev/null @@ -1,955 +0,0 @@ -import glob -import os -import random -import shutil -from pathlib import Path - -import cv2 -import matplotlib -import matplotlib.pyplot as plt -import numpy as np -import torch -import torch.nn as nn -from tqdm import tqdm -import math - -from . import torch_utils # , google_utils - -matplotlib.rc('font', **{'size': 11}) - -# Set printoptions -torch.set_printoptions(linewidth=320, precision=5, profile='long') -np.set_printoptions(linewidth=320, formatter={'float_kind': '{:11.5g}'.format}) # format short g, %precision=5 - -# Prevent OpenCV from multithreading (to use PyTorch DataLoader) -cv2.setNumThreads(0) - - -def floatn(x, n=3): # format floats to n decimals - return float(format(x, '.%gf' % n)) - - -def init_seeds(seed=0): - random.seed(seed) - np.random.seed(seed) - torch_utils.init_seeds(seed=seed) - - -def load_classes(path): - # Loads *.names file at 'path' - with open(path, 'r') as f: - names = f.read().split('\n') - return list(filter(None, names)) # filter removes empty strings (such as last line) - - -def labels_to_class_weights(labels, nc=80): - # Get class weights (inverse frequency) from training labels - if labels[0] is None: # no labels loaded - return torch.Tensor() - - labels = np.concatenate(labels, 0) # labels.shape = (866643, 5) for COCO - classes = labels[:, 0].astype(np.int) # labels = [class xywh] - weights = np.bincount(classes, minlength=nc) # occurences per class - - # Prepend gridpoint count (for uCE trianing) - # gpi = ((320 / 32 * np.array([1, 2, 4])) ** 2 * 3).sum() # gridpoints per image - # weights = np.hstack([gpi * len(labels) - weights.sum() * 9, weights * 9]) ** 0.5 # prepend gridpoints to start - - weights[weights == 0] = 1 # replace empty bins with 1 - weights = 1 / weights # number of targets per class - weights /= weights.sum() # normalize - return torch.from_numpy(weights) - - -def labels_to_image_weights(labels, nc=80, class_weights=np.ones(80)): - # Produces image weights based on class mAPs - n = len(labels) - class_counts = np.array([np.bincount(labels[i][:, 0].astype(np.int), minlength=nc) for i in range(n)]) - image_weights = (class_weights.reshape(1, nc) * class_counts).sum(1) - # index = random.choices(range(n), weights=image_weights, k=1) # weight image sample - return image_weights - - -def coco_class_weights(): # frequency of each class in coco train2014 - n = [187437, 4955, 30920, 6033, 3838, 4332, 3160, 7051, 7677, 9167, 1316, 1372, 833, 6757, 7355, 3302, 3776, 4671, - 6769, 5706, 3908, 903, 3686, 3596, 6200, 7920, 8779, 4505, 4272, 1862, 4698, 1962, 4403, 6659, 2402, 2689, - 4012, 4175, 3411, 17048, 5637, 14553, 3923, 5539, 4289, 10084, 7018, 4314, 3099, 4638, 4939, 5543, 2038, 4004, - 5053, 4578, 27292, 4113, 5931, 2905, 11174, 2873, 4036, 3415, 1517, 4122, 1980, 4464, 1190, 2302, 156, 3933, - 1877, 17630, 4337, 4624, 1075, 3468, 135, 1380] - weights = 1 / torch.Tensor(n) - weights /= weights.sum() - # with open('data/coco.names', 'r') as f: - # for k, v in zip(f.read().splitlines(), n): - # print('%20s: %g' % (k, v)) - return weights - - -def coco80_to_coco91_class(): # converts 80-index (val2014) to 91-index (paper) - # https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/ - # a = np.loadtxt('data/coco.names', dtype='str', delimiter='\n') - # b = np.loadtxt('data/coco_paper.names', dtype='str', delimiter='\n') - # x = [list(a[i] == b).index(True) + 1 for i in range(80)] # darknet to coco - x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90] - return x - - -def weights_init_normal(m): - classname = m.__class__.__name__ - if classname.find('Conv') != -1: - torch.nn.init.normal_(m.weight.data, 0.0, 0.03) - elif classname.find('BatchNorm2d') != -1: - torch.nn.init.normal_(m.weight.data, 1.0, 0.03) - torch.nn.init.constant_(m.bias.data, 0.0) - - -def xyxy2xywh(x): - # Convert bounding box format from [x1, y1, x2, y2] to [x, y, w, h] - y = torch.zeros_like(x) if isinstance(x, torch.Tensor) else np.zeros_like(x) - y[:, 0] = (x[:, 0] + x[:, 2]) / 2 - y[:, 1] = (x[:, 1] + x[:, 3]) / 2 - y[:, 2] = x[:, 2] - x[:, 0] - y[:, 3] = x[:, 3] - x[:, 1] - return y - - -def xywh2xyxy(x): - # Convert bounding box format from [x, y, w, h] to [x1, y1, x2, y2] - y = torch.zeros_like(x) if isinstance(x, torch.Tensor) else np.zeros_like(x) - y[:, 0] = x[:, 0] - x[:, 2] / 2 - y[:, 1] = x[:, 1] - x[:, 3] / 2 - y[:, 2] = x[:, 0] + x[:, 2] / 2 - y[:, 3] = x[:, 1] + x[:, 3] / 2 - return y - - -def scale_coords(img1_shape, coords, img0_shape, ratio_pad=None): - # Rescale coords (xyxy) from img1_shape to img0_shape - if ratio_pad is None: # calculate from img0_shape - gain = max(img1_shape) / max(img0_shape) # gain = old / new - pad = (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2 # wh padding - else: - gain = ratio_pad[0][0] - pad = ratio_pad[1] - - coords[:, [0, 2]] -= pad[0] # x padding - coords[:, [1, 3]] -= pad[1] # y padding - coords[:, :4] /= gain - clip_coords(coords, img0_shape) - return coords - - -def clip_coords(boxes, img_shape): - # Clip bounding xyxy bounding boxes to image shape (height, width) - boxes[:, [0, 2]] = boxes[:, [0, 2]].clamp(min=0, max=img_shape[1]) # clip x - boxes[:, [1, 3]] = boxes[:, [1, 3]].clamp(min=0, max=img_shape[0]) # clip y - - -def ap_per_class(tp, conf, pred_cls, target_cls): - """ Compute the average precision, given the recall and precision curves. - Source: https://github.com/rafaelpadilla/Object-Detection-Metrics. - # Arguments - tp: True positives (list). - conf: Objectness value from 0-1 (list). - pred_cls: Predicted object classes (list). - target_cls: True object classes (list). - # Returns - The average precision as computed in py-faster-rcnn. - """ - - # Sort by objectness - i = np.argsort(-conf) - tp, conf, pred_cls = tp[i], conf[i], pred_cls[i] - - # Find unique classes - unique_classes = np.unique(target_cls) - - # Create Precision-Recall curve and compute AP for each class - ap, p, r = [], [], [] - for c in unique_classes: - i = pred_cls == c - n_gt = (target_cls == c).sum() # Number of ground truth objects - n_p = i.sum() # Number of predicted objects - - if n_p == 0 and n_gt == 0: - continue - elif n_p == 0 or n_gt == 0: - ap.append(0) - r.append(0) - p.append(0) - else: - # Accumulate FPs and TPs - fpc = (1 - tp[i]).cumsum() - tpc = (tp[i]).cumsum() - - # Recall - recall = tpc / (n_gt + 1e-16) # recall curve - r.append(recall[-1]) - - # Precision - precision = tpc / (tpc + fpc) # precision curve - p.append(precision[-1]) - - # AP from recall-precision curve - ap.append(compute_ap(recall, precision)) - - # Plot - # fig, ax = plt.subplots(1, 1, figsize=(4, 4)) - # ax.plot(np.concatenate(([0.], recall)), np.concatenate(([0.], precision))) - # ax.set_xlabel('YOLOv3-SPP') - # ax.set_xlabel('Recall') - # ax.set_ylabel('Precision') - # ax.set_xlim(0, 1) - # fig.tight_layout() - # fig.savefig('PR_curve.png', dpi=300) - - # Compute F1 score (harmonic mean of precision and recall) - p, r, ap = np.array(p), np.array(r), np.array(ap) - f1 = 2 * p * r / (p + r + 1e-16) - - return p, r, ap, f1, unique_classes.astype('int32') - - -def compute_ap(recall, precision): - """ Compute the average precision, given the recall and precision curves. - Source: https://github.com/rbgirshick/py-faster-rcnn. - # Arguments - recall: The recall curve (list). - precision: The precision curve (list). - # Returns - The average precision as computed in py-faster-rcnn. - """ - - # Append sentinel values to beginning and end - mrec = np.concatenate(([0.], recall, [min(recall[-1] + 1E-3, 1.)])) - mpre = np.concatenate(([0.], precision, [0.])) - - # Compute the precision envelope - for i in range(mpre.size - 1, 0, -1): - mpre[i - 1] = np.maximum(mpre[i - 1], mpre[i]) - - # Integrate area under curve - method = 'interp' # methods: 'continuous', 'interp' - if method == 'interp': - x = np.linspace(0, 1, 101) # 101-point interp (COCO) - ap = np.trapz(np.interp(x, mrec, mpre), x) # integrate - else: # 'continuous' - i = np.where(mrec[1:] != mrec[:-1])[0] # points where x axis (recall) changes - ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) # area under curve - - return ap - - -def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False): - # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4 - box2 = box2.t() - - # Get the coordinates of bounding boxes - if x1y1x2y2: # x1, y1, x2, y2 = box1 - b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] - b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] - else: # x, y, w, h = box1 - b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2 - b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2 - b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2 - b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2 - - # Intersection area - inter_area = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \ - (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0) - - # Union Area - w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 - w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 - union_area = (w1 * h1 + 1e-16) + w2 * h2 - inter_area - - iou = inter_area / union_area # iou - if GIoU or DIoU or CIoU: - cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) # convex (smallest enclosing box) width - ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # convex height - if GIoU: # Generalized IoU https://arxiv.org/pdf/1902.09630.pdf - c_area = cw * ch + 1e-16 # convex area - return iou - (c_area - union_area) / c_area # GIoU - if DIoU or CIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 - # convex diagonal squared - c2 = cw ** 2 + ch ** 2 + 1e-16 - # centerpoint distance squared - rho2 = ((b2_x1 + b2_x2) - (b1_x1 + b1_x2)) ** 2 / 4 + ((b2_y1 + b2_y2) - (b1_y1 + b1_y2)) ** 2 / 4 - if DIoU: - return iou - rho2 / c2 # DIoU - elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 - v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2) - with torch.no_grad(): - alpha = v / (1 - iou + v) - return iou - (rho2 / c2 + v * alpha) # CIoU - - return iou - - -def wh_iou(box1, box2): - # Returns the IoU of wh1 to wh2. wh1 is 2, wh2 is nx2 - box2 = box2.t() - - # w, h = box1 - w1, h1 = box1[0], box1[1] - w2, h2 = box2[0], box2[1] - - # Intersection area - inter_area = torch.min(w1, w2) * torch.min(h1, h2) - - # Union Area - union_area = (w1 * h1 + 1e-16) + w2 * h2 - inter_area - - return inter_area / union_area # iou - - -class FocalLoss(nn.Module): - # Wraps focal loss around existing loss_fcn() https://arxiv.org/pdf/1708.02002.pdf - # i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=2.5) - def __init__(self, loss_fcn, gamma=0.5, alpha=1, reduction='mean'): - super(FocalLoss, self).__init__() - loss_fcn.reduction = 'none' # required to apply FL to each element - self.loss_fcn = loss_fcn - self.gamma = gamma - self.alpha = alpha - self.reduction = reduction - - def forward(self, input, target): - loss = self.loss_fcn(input, target) - loss *= self.alpha * (1.000001 - torch.exp(-loss)) ** self.gamma # non-zero power for gradient stability - - if self.reduction == 'mean': - return loss.mean() - elif self.reduction == 'sum': - return loss.sum() - else: # 'none' - return loss - - -def compute_loss(p, targets, model): # predictions, targets, model - ft = torch.cuda.FloatTensor if p[0].is_cuda else torch.Tensor - lcls, lbox, lobj = ft([0]), ft([0]), ft([0]) - tcls, tbox, indices, anchor_vec = build_targets(model, targets) - h = model.hyp # hyperparameters - arc = model.arc # # (default, uCE, uBCE) detection architectures - - # Define criteria - BCEcls = nn.BCEWithLogitsLoss(pos_weight=ft([h['cls_pw']])) - BCEobj = nn.BCEWithLogitsLoss(pos_weight=ft([h['obj_pw']])) - BCE = nn.BCEWithLogitsLoss() - CE = nn.CrossEntropyLoss() # weight=model.class_weights - - if 'F' in arc: # add focal loss - g = h['fl_gamma'] - BCEcls, BCEobj, BCE, CE = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g), FocalLoss(BCE, g), FocalLoss(CE, g) - - # Compute losses - for i, pi in enumerate(p): # layer index, layer predictions - b, a, gj, gi = indices[i] # image, anchor, gridy, gridx - tobj = torch.zeros_like(pi[..., 0]) # target obj - - # Compute losses - nb = len(b) - if nb: # number of targets - ps = pi[b, a, gj, gi] # prediction subset corresponding to targets - tobj[b, a, gj, gi] = 1.0 # obj - # ps[:, 2:4] = torch.sigmoid(ps[:, 2:4]) # wh power loss (uncomment) - - # GIoU - pxy = torch.sigmoid(ps[:, 0:2]) # pxy = pxy * s - (s - 1) / 2, s = 1.5 (scale_xy) - pbox = torch.cat((pxy, torch.exp(ps[:, 2:4]).clamp(max=1E4) * anchor_vec[i]), 1) # predicted box - giou = bbox_iou(pbox.t(), tbox[i], x1y1x2y2=False, GIoU=True) # giou computation - lbox += (1.0 - giou).mean() # giou loss - - if 'default' in arc and model.nc > 1: # cls loss (only if multiple classes) - t = torch.zeros_like(ps[:, 5:]) # targets - t[range(nb), tcls[i]] = 1.0 - lcls += BCEcls(ps[:, 5:], t) # BCE - # lcls += CE(ps[:, 5:], tcls[i]) # CE - - # Instance-class weighting (use with reduction='none') - # nt = t.sum(0) + 1 # number of targets per class - # lcls += (BCEcls(ps[:, 5:], t) / nt).mean() * nt.mean() # v1 - # lcls += (BCEcls(ps[:, 5:], t) / nt[tcls[i]].view(-1,1)).mean() * nt.mean() # v2 - - # Append targets to text file - # with open('targets.txt', 'a') as file: - # [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)] - - if 'default' in arc: # separate obj and cls - lobj += BCEobj(pi[..., 4], tobj) # obj loss - - elif 'BCE' in arc: # unified BCE (80 classes) - t = torch.zeros_like(pi[..., 5:]) # targets - if nb: - t[b, a, gj, gi, tcls[i]] = 1.0 - lobj += BCE(pi[..., 5:], t) - - elif 'CE' in arc: # unified CE (1 background + 80 classes) - t = torch.zeros_like(pi[..., 0], dtype=torch.long) # targets - if nb: - t[b, a, gj, gi] = tcls[i] + 1 - lcls += CE(pi[..., 4:].view(-1, model.nc + 1), t.view(-1)) - - lbox *= h['giou'] - lobj *= h['obj'] - lcls *= h['cls'] - loss = lbox + lobj + lcls - return loss, torch.cat((lbox, lobj, lcls, loss)).detach() - - -def build_targets(model, targets): - # targets = [image, class, x, y, w, h] - - nt = len(targets) - tcls, tbox, indices, av = [], [], [], [] - multi_gpu = type(model) in (nn.parallel.DataParallel, nn.parallel.DistributedDataParallel) - for i in model.yolo_layers: - # get number of grid points and anchor vec for this yolo layer - if multi_gpu: - ng, anchor_vec = model.module.module_list[i].ng, model.module.module_list[i].anchor_vec - else: - ng, anchor_vec = model.module_list[i].ng, model.module_list[i].anchor_vec - - # iou of targets-anchors - t, a = targets, [] - gwh = t[:, 4:6] * ng - if nt: - iou = torch.stack([wh_iou(x, gwh) for x in anchor_vec], 0) - - use_best_anchor = False - if use_best_anchor: - iou, a = iou.max(0) # best iou and anchor - else: # use all anchors - na = len(anchor_vec) # number of anchors - a = torch.arange(na).view((-1, 1)).repeat([1, nt]).view(-1) - t = targets.repeat([na, 1]) - gwh = gwh.repeat([na, 1]) - iou = iou.view(-1) # use all ious - - # reject anchors below iou_thres (OPTIONAL, increases P, lowers R) - reject = True - if reject: - j = iou > model.hyp['iou_t'] # iou threshold hyperparameter - t, a, gwh = t[j], a[j], gwh[j] - - # Indices - b, c = t[:, :2].long().t() # target image, class - gxy = t[:, 2:4] * ng # grid x, y - gi, gj = gxy.long().t() # grid x, y indices - indices.append((b, a, gj, gi)) - - # GIoU - gxy -= gxy.floor() # xy - tbox.append(torch.cat((gxy, gwh), 1)) # xywh (grids) - av.append(anchor_vec[a]) # anchor vec - - # Class - tcls.append(c) - if c.shape[0]: # if any targets - assert c.max() <= model.nc, 'Target classes exceed model classes' - - return tcls, tbox, indices, av - - -def non_max_suppression(prediction, conf_thres=0.5, nms_thres=0.5): - """ - Removes detections with lower object confidence score than 'conf_thres' - Non-Maximum Suppression to further filter detections. - Returns detections with shape: - (x1, y1, x2, y2, object_conf, class_conf, class) - """ - - min_wh, max_wh = 2, 30000 # (pixels) minimum and maximium box width and height - - output = [None] * len(prediction) - for image_i, pred in enumerate(prediction): - # Experiment: Prior class size rejection - # x, y, w, h = pred[:, 0], pred[:, 1], pred[:, 2], pred[:, 3] - # a = w * h # area - # ar = w / (h + 1e-16) # aspect ratio - # n = len(w) - # log_w, log_h, log_a, log_ar = torch.log(w), torch.log(h), torch.log(a), torch.log(ar) - # shape_likelihood = np.zeros((n, 60), dtype=np.float32) - # x = np.concatenate((log_w.reshape(-1, 1), log_h.reshape(-1, 1)), 1) - # from scipy.stats import multivariate_normal - # for c in range(60): - # shape_likelihood[:, c] = - # multivariate_normal.pdf(x, mean=mat['class_mu'][c, :2], cov=mat['class_cov'][c, :2, :2]) - - # Multiply conf by class conf to get combined confidence - class_conf, class_pred = pred[:, 5:].max(1) - pred[:, 4] *= class_conf - - # # Merge classes (optional) - # class_pred[(class_pred.view(-1,1) == torch.LongTensor([2, 3, 5, 6, 7]).view(1,-1)).any(1)] = 2 - # - # # Remove classes (optional) - # pred[class_pred != 2, 4] = 0.0 - - # Select only suitable predictions - i = (pred[:, 4] > conf_thres) & (pred[:, 2:4] > min_wh).all(1) & (pred[:, 2:4] < max_wh).all(1) & \ - torch.isfinite(pred).all(1) - pred = pred[i] - - # If none are remaining => process next image - if len(pred) == 0: - continue - - # Select predicted classes - class_conf = class_conf[i] - class_pred = class_pred[i].unsqueeze(1).float() - - # Box (center x, center y, width, height) to (x1, y1, x2, y2) - pred[:, :4] = xywh2xyxy(pred[:, :4]) - # pred[:, 4] *= class_conf # improves mAP from 0.549 to 0.551 - - # Detections ordered as (x1y1x2y2, obj_conf, class_conf, class_pred) - pred = torch.cat((pred[:, :5], class_conf.unsqueeze(1), class_pred), 1) - - # Get detections sorted by decreasing confidence scores - pred = pred[(-pred[:, 4]).argsort()] - - det_max = [] - nms_style = 'MERGE' # 'OR' (default), 'AND', 'MERGE' (experimental) - for c in pred[:, -1].unique(): - dc = pred[pred[:, -1] == c] # select class c - n = len(dc) - if n == 1: - det_max.append(dc) # No NMS required if only 1 prediction - continue - elif n > 500: - dc = dc[:500] # limit to first 100 boxes: https://github.com/ultralytics/yolov3/issues/117 - - # Non-maximum suppression - if nms_style == 'OR': # default - # METHOD1 - # ind = list(range(len(dc))) - # while len(ind): - # j = ind[0] - # det_max.append(dc[j:j + 1]) # save highest conf detection - # reject = (bbox_iou(dc[j], dc[ind]) > nms_thres).nonzero() - # [ind.pop(i) for i in reversed(reject)] - - # METHOD2 - while dc.shape[0]: - det_max.append(dc[:1]) # save highest conf detection - if len(dc) == 1: # Stop if we're at the last detection - break - iou = bbox_iou(dc[0], dc[1:]) # iou with other boxes - dc = dc[1:][iou < nms_thres] # remove ious > threshold - - elif nms_style == 'AND': # requires overlap, single boxes erased - while len(dc) > 1: - iou = bbox_iou(dc[0], dc[1:]) # iou with other boxes - if iou.max() > 0.5: - det_max.append(dc[:1]) - dc = dc[1:][iou < nms_thres] # remove ious > threshold - - elif nms_style == 'MERGE': # weighted mixture box - while len(dc): - if len(dc) == 1: - det_max.append(dc) - break - i = bbox_iou(dc[0], dc) > nms_thres # iou with other boxes - weights = dc[i, 4:5] - dc[0, :4] = (weights * dc[i, :4]).sum(0) / weights.sum() - det_max.append(dc[:1]) - dc = dc[i == 0] - - elif nms_style == 'SOFT': # soft-NMS https://arxiv.org/abs/1704.04503 - sigma = 0.5 # soft-nms sigma parameter - while len(dc): - if len(dc) == 1: - det_max.append(dc) - break - det_max.append(dc[:1]) - iou = bbox_iou(dc[0], dc[1:]) # iou with other boxes - dc = dc[1:] - dc[:, 4] *= torch.exp(-iou ** 2 / sigma) # decay confidences - # dc = dc[dc[:, 4] > nms_thres] # new line per https://github.com/ultralytics/yolov3/issues/362 - - if len(det_max): - det_max = torch.cat(det_max) # concatenate - output[image_i] = det_max[(-det_max[:, 4]).argsort()] # sort - - return output - - -def get_yolo_layers(model): - bool_vec = [x['type'] == 'yolo' for x in model.module_defs] - return [i for i, x in enumerate(bool_vec) if x] # [82, 94, 106] for yolov3 - - -def print_model_biases(model): - # prints the bias neurons preceding each yolo layer - print('\nModel Bias Summary (per output layer):') - multi_gpu = type(model) in (nn.parallel.DataParallel, nn.parallel.DistributedDataParallel) - for l in model.yolo_layers: # print pretrained biases - if multi_gpu: - na = model.module.module_list[l].na # number of anchors - b = model.module.module_list[l - 1][0].bias.view(na, -1) # bias 3x85 - else: - na = model.module_list[l].na - b = model.module_list[l - 1][0].bias.view(na, -1) # bias 3x85 - print('regression: %5.2f+/-%-5.2f ' % (b[:, :4].mean(), b[:, :4].std()), - 'objectness: %5.2f+/-%-5.2f ' % (b[:, 4].mean(), b[:, 4].std()), - 'classification: %5.2f+/-%-5.2f' % (b[:, 5:].mean(), b[:, 5:].std())) - - -def strip_optimizer(f='weights/last.pt'): # from utils.utils import *; strip_optimizer() - # Strip optimizer from *.pt files for lighter files (reduced by 2/3 size) - x = torch.load(f, map_location=torch.device('cpu')) - x['optimizer'] = None - # x['training_results'] = None # uncomment to create a backbone - # x['epoch'] = -1 # uncomment to create a backbone - torch.save(x, f) - - -def create_backbone(f='weights/last.pt'): # from utils.utils import *; create_backbone() - # create a backbone from a *.pt file - x = torch.load(f, map_location=torch.device('cpu')) - x['optimizer'] = None - x['training_results'] = None - x['epoch'] = -1 - for p in x['model'].values(): - try: - p.requires_grad = True - except: - pass - torch.save(x, 'weights/backbone.pt') - - -def coco_class_count(path='../coco/labels/train2014/'): - # Histogram of occurrences per class - nc = 80 # number classes - x = np.zeros(nc, dtype='int32') - files = sorted(glob.glob('%s/*.*' % path)) - for i, file in enumerate(files): - labels = np.loadtxt(file, dtype=np.float32).reshape(-1, 5) - x += np.bincount(labels[:, 0].astype('int32'), minlength=nc) - print(i, len(files)) - - -def coco_only_people(path='../coco/labels/val2014/'): - # Find images with only people - files = sorted(glob.glob('%s/*.*' % path)) - for i, file in enumerate(files): - labels = np.loadtxt(file, dtype=np.float32).reshape(-1, 5) - if all(labels[:, 0] == 0): - print(labels.shape[0], file) - - -def select_best_evolve(path='evolve*.txt'): # from utils.utils import *; select_best_evolve() - # Find best evolved mutation - for file in sorted(glob.glob(path)): - x = np.loadtxt(file, dtype=np.float32, ndmin=2) - print(file, x[fitness(x).argmax()]) - - -def crop_images_random(path='../images/', scale=0.50): # from utils.utils import *; crop_images_random() - # crops images into random squares up to scale fraction - # WARNING: overwrites images! - for file in tqdm(sorted(glob.glob('%s/*.*' % path))): - img = cv2.imread(file) # BGR - if img is not None: - h, w = img.shape[:2] - - # create random mask - a = 30 # minimum size (pixels) - mask_h = random.randint(a, int(max(a, h * scale))) # mask height - mask_w = mask_h # mask width - - # box - xmin = max(0, random.randint(0, w) - mask_w // 2) - ymin = max(0, random.randint(0, h) - mask_h // 2) - xmax = min(w, xmin + mask_w) - ymax = min(h, ymin + mask_h) - - # apply random color mask - cv2.imwrite(file, img[ymin:ymax, xmin:xmax]) - - -def coco_single_class_labels(path='../coco/labels/train2014/', label_class=43): - # Makes single-class coco datasets. from utils.utils import *; coco_single_class_labels() - if os.path.exists('new/'): - shutil.rmtree('new/') # delete output folder - os.makedirs('new/') # make new output folder - os.makedirs('new/labels/') - os.makedirs('new/images/') - for file in tqdm(sorted(glob.glob('%s/*.*' % path))): - with open(file, 'r') as f: - labels = np.array([x.split() for x in f.read().splitlines()], dtype=np.float32) - i = labels[:, 0] == label_class - if any(i): - img_file = file.replace('labels', 'images').replace('txt', 'jpg') - labels[:, 0] = 0 # reset class to 0 - with open('new/images.txt', 'a') as f: # add image to dataset list - f.write(img_file + '\n') - with open('new/labels/' + Path(file).name, 'a') as f: # write label - for l in labels[i]: - f.write('%g %.6f %.6f %.6f %.6f\n' % tuple(l)) - shutil.copyfile(src=img_file, dst='new/images/' + Path(file).name.replace('txt', 'jpg')) # copy images - - -def kmeans_targets(path='../coco/trainvalno5k.txt', n=9, img_size=416): # from utils.utils import *; kmeans_targets() - # Produces a list of target kmeans suitable for use in *.cfg files - from utils.datasets import LoadImagesAndLabels - from scipy import cluster - - # Get label wh - dataset = LoadImagesAndLabels(path, augment=True, rect=True, cache_labels=True) - for s, l in zip(dataset.shapes, dataset.labels): - l[:, [1, 3]] *= s[0] # normalized to pixels - l[:, [2, 4]] *= s[1] - l[:, 1:] *= img_size / max(s) * random.uniform(0.5, 1.5) # nominal img_size for training - wh = np.concatenate(dataset.labels, 0)[:, 3:5] # wh from cxywh - - # Kmeans calculation - k, dist = cluster.vq.kmeans(wh, n) # points, mean distance - k = k[np.argsort(k.prod(1))] # sort small to large - - # # Plot - # k, d = [None] * 20, [None] * 20 - # for i in tqdm(range(1, 21)): - # k[i-1], d[i-1] = cluster.vq.kmeans(wh, i) # points, mean distance - # fig, ax = plt.subplots(1, 2, figsize=(14, 7)) - # ax = ax.ravel() - # ax[0].plot(np.arange(1, 21), np.array(d) ** 2, marker='.') - - # Measure IoUs - iou = torch.stack([wh_iou(torch.Tensor(wh).T, torch.Tensor(x).T) for x in k], 0) - biou = iou.max(0)[0] # closest anchor IoU - print('Best possible recall: %.3f' % (biou > 0.2635).float().mean()) # BPR (best possible recall) - - # Print - print('kmeans anchors (n=%g, img_size=%g, IoU=%.2f/%.2f/%.2f-min/mean/best): ' % - (n, img_size, biou.min(), iou.mean(), biou.mean()), end='') - for i, x in enumerate(k): - print('%i,%i' % (round(x[0]), round(x[1])), end=', ' if i < len(k) - 1 else '\n') # use in *.cfg - - # Plot - # plt.hist(biou.numpy().ravel(), 100) - - -def print_mutation(hyp, results, bucket=''): - # Print mutation results to evolve.txt (for use with train.py --evolve) - a = '%10s' * len(hyp) % tuple(hyp.keys()) # hyperparam keys - b = '%10.3g' * len(hyp) % tuple(hyp.values()) # hyperparam values - c = '%10.3g' * len(results) % results # results (P, R, mAP, F1, test_loss) - print('\n%s\n%s\nEvolved fitness: %s\n' % (a, b, c)) - - if bucket: - os.system('gsutil cp gs://%s/evolve.txt .' % bucket) # download evolve.txt - - with open('evolve.txt', 'a') as f: # append result - f.write(c + b + '\n') - x = np.unique(np.loadtxt('evolve.txt', ndmin=2), axis=0) # load unique rows - np.savetxt('evolve.txt', x[np.argsort(-fitness(x))], '%10.3g') # save sort by fitness - - if bucket: - os.system('gsutil cp evolve.txt gs://%s' % bucket) # upload evolve.txt - - -def apply_classifier(x, model, img, im0): - # applies a second stage classifier to yolo outputs - - for i, d in enumerate(x): # per image - if d is not None and len(d): - d = d.clone() - - # Reshape and pad cutouts - b = xyxy2xywh(d[:, :4]) # boxes - b[:, 2:] = b[:, 2:].max(1)[0].unsqueeze(1) # rectangle to square - b[:, 2:] = b[:, 2:] * 1.3 + 30 # pad - d[:, :4] = xywh2xyxy(b).long() - - # Rescale boxes from img_size to im0 size - scale_coords(img.shape[2:], d[:, :4], im0.shape) - - # Classes - pred_cls1 = d[:, 6].long() - ims = [] - for j, a in enumerate(d): # per item - cutout = im0[int(a[1]):int(a[3]), int(a[0]):int(a[2])] - im = cv2.resize(cutout, (224, 224)) # BGR - # cv2.imwrite('test%i.jpg' % j, cutout) - - im = im[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 - im = np.ascontiguousarray(im, dtype=np.float32) # uint8 to float32 - im /= 255.0 # 0 - 255 to 0.0 - 1.0 - ims.append(im) - - pred_cls2 = model(torch.Tensor(ims).to(d.device)).argmax(1) # classifier prediction - x[i] = x[i][pred_cls1 == pred_cls2] # retain matching class detections - - return x - - -def fitness(x): - # Returns fitness (for use with results.txt or evolve.txt) - return x[:, 2] * 0.8 + x[:, 3] * 0.2 # weighted mAP and F1 combination - - -# Plotting functions --------------------------------------------------------------------------------------------------- -def plot_one_box(x, img, color=None, label=None, line_thickness=None): - # Plots one bounding box on image img - tl = line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1 # line thickness - color = color or [random.randint(0, 255) for _ in range(3)] - c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3])) - cv2.rectangle(img, c1, c2, color, thickness=tl) - if label: - tf = max(tl - 1, 1) # font thickness - t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0] - c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 - cv2.rectangle(img, c1, c2, color, -1) # filled - cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA) - - -def plot_wh_methods(): # from utils.utils import *; plot_wh_methods() - # Compares the two methods for width-height anchor multiplication - # https://github.com/ultralytics/yolov3/issues/168 - x = np.arange(-4.0, 4.0, .1) - ya = np.exp(x) - yb = torch.sigmoid(torch.from_numpy(x)).numpy() * 2 - - fig = plt.figure(figsize=(6, 3), dpi=150) - plt.plot(x, ya, '.-', label='yolo method') - plt.plot(x, yb ** 2, '.-', label='^2 power method') - plt.plot(x, yb ** 2.5, '.-', label='^2.5 power method') - plt.xlim(left=-4, right=4) - plt.ylim(bottom=0, top=6) - plt.xlabel('input') - plt.ylabel('output') - plt.legend() - fig.tight_layout() - fig.savefig('comparison.png', dpi=200) - - -def plot_images(imgs, targets, paths=None, fname='images.jpg'): - # Plots training images overlaid with targets - imgs = imgs.cpu().numpy() - targets = targets.cpu().numpy() - # targets = targets[targets[:, 1] == 21] # plot only one class - - fig = plt.figure(figsize=(10, 10)) - bs, _, h, w = imgs.shape # batch size, _, height, width - bs = min(bs, 16) # limit plot to 16 images - ns = np.ceil(bs ** 0.5) # number of subplots - - for i in range(bs): - boxes = xywh2xyxy(targets[targets[:, 0] == i, 2:6]).T - boxes[[0, 2]] *= w - boxes[[1, 3]] *= h - plt.subplot(ns, ns, i + 1).imshow(imgs[i].transpose(1, 2, 0)) - plt.plot(boxes[[0, 2, 2, 0, 0]], boxes[[1, 1, 3, 3, 1]], '.-') - plt.axis('off') - if paths is not None: - s = Path(paths[i]).name - plt.title(s[:min(len(s), 40)], fontdict={'size': 8}) # limit to 40 characters - fig.tight_layout() - fig.savefig(fname, dpi=200) - plt.close() - - -def plot_test_txt(): # from utils.utils import *; plot_test() - # Plot test.txt histograms - x = np.loadtxt('test.txt', dtype=np.float32) - box = xyxy2xywh(x[:, :4]) - cx, cy = box[:, 0], box[:, 1] - - fig, ax = plt.subplots(1, 1, figsize=(6, 6)) - ax.hist2d(cx, cy, bins=600, cmax=10, cmin=0) - ax.set_aspect('equal') - fig.tight_layout() - plt.savefig('hist2d.jpg', dpi=300) - - fig, ax = plt.subplots(1, 2, figsize=(12, 6)) - ax[0].hist(cx, bins=600) - ax[1].hist(cy, bins=600) - fig.tight_layout() - plt.savefig('hist1d.jpg', dpi=200) - - -def plot_targets_txt(): # from utils.utils import *; plot_targets_txt() - # Plot test.txt histograms - x = np.loadtxt('targets.txt', dtype=np.float32) - x = x.T - - s = ['x targets', 'y targets', 'width targets', 'height targets'] - fig, ax = plt.subplots(2, 2, figsize=(8, 8)) - ax = ax.ravel() - for i in range(4): - ax[i].hist(x[i], bins=100, label='%.3g +/- %.3g' % (x[i].mean(), x[i].std())) - ax[i].legend() - ax[i].set_title(s[i]) - fig.tight_layout() - plt.savefig('targets.jpg', dpi=200) - - -def plot_evolution_results(hyp): # from utils.utils import *; plot_evolution_results(hyp) - # Plot hyperparameter evolution results in evolve.txt - x = np.loadtxt('evolve.txt', ndmin=2) - f = fitness(x) - weights = (f - f.min()) ** 2 # for weighted results - fig = plt.figure(figsize=(12, 10)) - matplotlib.rc('font', **{'size': 8}) - for i, (k, v) in enumerate(hyp.items()): - y = x[:, i + 7] - # mu = (y * weights).sum() / weights.sum() # best weighted result - mu = y[f.argmax()] # best single result - plt.subplot(4, 5, i + 1) - plt.plot(mu, f.max(), 'o', markersize=10) - plt.plot(y, f, '.') - plt.title('%s = %.3g' % (k, mu), fontdict={'size': 9}) # limit to 40 characters - print('%15s: %.3g' % (k, mu)) - fig.tight_layout() - plt.savefig('evolve.png', dpi=200) - - -def plot_results_overlay(start=0, stop=0): # from utils.utils import *; plot_results_overlay() - # Plot training results files 'results*.txt', overlaying train and val losses - s = ['train', 'train', 'train', 'Precision', 'mAP@0.5', 'val', 'val', 'val', 'Recall', 'F1'] # legends - t = ['GIoU', 'Objectness', 'Classification', 'P-R', 'mAP-F1'] # titles - for f in sorted(glob.glob('results*.txt') + glob.glob('../../Downloads/results*.txt')): - results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).T - n = results.shape[1] # number of rows - x = range(start, min(stop, n) if stop else n) - fig, ax = plt.subplots(1, 5, figsize=(14, 3.5)) - ax = ax.ravel() - for i in range(5): - for j in [i, i + 5]: - y = results[j, x] - if i in [0, 1, 2]: - y[y == 0] = np.nan # dont show zero loss values - ax[i].plot(x, y, marker='.', label=s[j]) - ax[i].set_title(t[i]) - ax[i].legend() - ax[i].set_ylabel(f) if i == 0 else None # add filename - fig.tight_layout() - fig.savefig(f.replace('.txt', '.png'), dpi=200) - - -def plot_results(start=0, stop=0): # from utils.utils import *; plot_results() - # Plot training results files 'results*.txt' - fig, ax = plt.subplots(2, 5, figsize=(14, 7)) - ax = ax.ravel() - s = ['GIoU', 'Objectness', 'Classification', 'Precision', 'Recall', - 'val GIoU', 'val Objectness', 'val Classification', 'mAP@0.5', 'F1'] - for f in sorted(glob.glob('results*.txt') + glob.glob('../../Downloads/results*.txt')): - results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).T - n = results.shape[1] # number of rows - x = range(start, min(stop, n) if stop else n) - for i in range(10): - y = results[i, x] - if i in [0, 1, 2, 5, 6, 7]: - y[y == 0] = np.nan # dont show zero loss values - ax[i].plot(x, y, marker='.', label=f.replace('.txt', '')) - ax[i].set_title(s[i]) - if i in [5, 6, 7]: # share train and val loss y axes - ax[i].get_shared_y_axes().join(ax[i], ax[i - 5]) - - fig.tight_layout() - ax[1].legend() - fig.savefig('results.png', dpi=200) diff --git a/val.py b/val.py new file mode 100644 index 0000000000..cbe70444df --- /dev/null +++ b/val.py @@ -0,0 +1,629 @@ +# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license +""" +Validate a trained YOLOv3 detection model on a detection dataset. + +Usage: + $ python val.py --weights yolov5s.pt --data coco128.yaml --img 640 + +Usage - formats: + $ python val.py --weights yolov5s.pt # PyTorch + yolov5s.torchscript # TorchScript + yolov5s.onnx # ONNX Runtime or OpenCV DNN with --dnn + yolov5s_openvino_model # OpenVINO + yolov5s.engine # TensorRT + yolov5s.mlmodel # CoreML (macOS-only) + yolov5s_saved_model # TensorFlow SavedModel + yolov5s.pb # TensorFlow GraphDef + yolov5s.tflite # TensorFlow Lite + yolov5s_edgetpu.tflite # TensorFlow Edge TPU + yolov5s_paddle_model # PaddlePaddle +""" + +import argparse +import json +import os +import subprocess +import sys +from pathlib import Path + +import numpy as np +import torch +from tqdm import tqdm + +FILE = Path(__file__).resolve() +ROOT = FILE.parents[0] # YOLOv3 root directory +if str(ROOT) not in sys.path: + sys.path.append(str(ROOT)) # add ROOT to PATH +ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative + +from models.common import DetectMultiBackend +from utils.callbacks import Callbacks +from utils.dataloaders import create_dataloader +from utils.general import ( + LOGGER, + TQDM_BAR_FORMAT, + Profile, + check_dataset, + check_img_size, + check_requirements, + check_yaml, + coco80_to_coco91_class, + colorstr, + increment_path, + non_max_suppression, + print_args, + scale_boxes, + xywh2xyxy, + xyxy2xywh, +) +from utils.metrics import ConfusionMatrix, ap_per_class, box_iou +from utils.plots import output_to_target, plot_images, plot_val_study +from utils.torch_utils import select_device, smart_inference_mode + + +def save_one_txt(predn, save_conf, shape, file): + """Saves detection results in a text format, including labels and optionally confidence scores. + + Args: + predn (torch.Tensor): A tensor containing normalized prediction results in the format (x1, y1, x2, y2, conf, + cls). + save_conf (bool): A flag indicating whether to save confidence scores. + shape (tuple[int, int]): Original image shape in the format (height, width). + file (str | Path): Path to the file where the results will be saved. + + Returns: + None + + Examples: + ```python + from pathlib import Path + import torch + + predn = torch.tensor([ + [10, 20, 100, 200, 0.9, 1], + [30, 40, 150, 250, 0.8, 0], + ]) + save_conf = True + shape = (416, 416) + file = Path("results.txt") + + save_one_txt(predn, save_conf, shape, file) + ``` + + Notes: + - The function normalizes bounding box coordinates before saving. + - Each line in the output file will contain class, x-center, y-center, width, height and optionally confidence score. + - The format is compatible with YOLO training dataset format. + """ + gn = torch.tensor(shape)[[1, 0, 1, 0]] # normalization gain whwh + for *xyxy, conf, cls in predn.tolist(): + xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() # normalized xywh + line = (cls, *xywh, conf) if save_conf else (cls, *xywh) # label format + with open(file, "a") as f: + f.write(("%g " * len(line)).rstrip() % line + "\n") + + +def save_one_json(predn, jdict, path, class_map): + """Save detection results in JSON format containing image_id, category_id, bbox, and score per detection. + + Args: + predn (torch.Tensor): Normalized prediction tensor of shape (N, 6) where N is the number of detections. Each + detection should contain (x1, y1, x2, y2, confidence, class). + jdict (list): List to store the JSON serializable detections. + path (Path): Path object representing the image file path. + class_map (dict[int, int]): Dictionary mapping class indices to their respective category IDs. + + Returns: + None + + Examples: + ```python + predn = torch.tensor([[50, 30, 200, 150, 0.9, 0], [30, 20, 180, 150, 0.8, 1]]) + jdict = [] + path = Path('images/000001.jpg') + class_map = {0: 1, 1: 2} + save_one_json(predn, jdict, path, class_map) + ``` + + Notes: + - The image_id is extracted from the image file path. + - Bounding boxes are converted from xyxy format to xywh format. + - The JSON output format is compatible with COCO dataset evaluation. + """ + image_id = int(path.stem) if path.stem.isnumeric() else path.stem + box = xyxy2xywh(predn[:, :4]) # xywh + box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner + for p, b in zip(predn.tolist(), box.tolist()): + jdict.append( + { + "image_id": image_id, + "category_id": class_map[int(p[5])], + "bbox": [round(x, 3) for x in b], + "score": round(p[4], 5), + } + ) + + +def process_batch(detections, labels, iouv): + """Computes correct prediction matrix for detections against ground truth labels at various IoU thresholds. + + Args: + detections (np.ndarray): Array of detections with shape (N, 6), where each detection contains [x1, y1, x2, y2, + confidence, class]. + labels (np.ndarray): Array of ground truth labels with shape (M, 5), where each label contains [class, x1, y1, + x2, y2]. + iouv (np.ndarray): Array of IoU thresholds to use for evaluation. + + Returns: + np.ndarray: Boolean array of shape (N, len(iouv)), indicating correct predictions at each IoU threshold. + + Examples: + ```python + detections = np.array([[50, 50, 150, 150, 0.8, 0], + [30, 30, 120, 120, 0.7, 1]]) + labels = np.array([[0, 50, 50, 150, 150], + [1, 30, 30, 120, 120]]) + iouv = np.array([0.5, 0.6, 0.7]) + + correct = process_batch(detections, labels, iouv) + ``` + + Notes: + - This function compares detections and ground truth labels to establish matches based on IoU and class. + - It supports multiple IoU thresholds to evaluate prediction accuracy flexibly. + """ + correct = np.zeros((detections.shape[0], iouv.shape[0])).astype(bool) + iou = box_iou(labels[:, 1:], detections[:, :4]) + correct_class = labels[:, 0:1] == detections[:, 5] + for i in range(len(iouv)): + x = torch.where((iou >= iouv[i]) & correct_class) # IoU > threshold and classes match + if x[0].shape[0]: + matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() # [label, detect, iou] + if x[0].shape[0] > 1: + matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 1], return_index=True)[1]] + # matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 0], return_index=True)[1]] + correct[matches[:, 1].astype(int), i] = True + return torch.tensor(correct, dtype=torch.bool, device=iouv.device) + + +@smart_inference_mode() +def run( + data, + weights=None, # model.pt path(s) + batch_size=32, # batch size + imgsz=640, # inference size (pixels) + conf_thres=0.001, # confidence threshold + iou_thres=0.6, # NMS IoU threshold + max_det=300, # maximum detections per image + task="val", # train, val, test, speed or study + device="", # cuda device, i.e. 0 or 0,1,2,3 or cpu + workers=8, # max dataloader workers (per RANK in DDP mode) + single_cls=False, # treat as single-class dataset + augment=False, # augmented inference + verbose=False, # verbose output + save_txt=False, # save results to *.txt + save_hybrid=False, # save label+prediction hybrid results to *.txt + save_conf=False, # save confidences in --save-txt labels + save_json=False, # save a COCO-JSON results file + project=ROOT / "runs/val", # save to project/name + name="exp", # save to project/name + exist_ok=False, # existing project/name ok, do not increment + half=True, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + model=None, + dataloader=None, + save_dir=Path(""), + plots=True, + callbacks=Callbacks(), + compute_loss=None, +): + """Validates a trained YOLO model on a dataset and saves detection results in specified formats. + + Args: + data (str | dict): Path to the dataset configuration file (.yaml) or a dictionary containing the dataset paths. + weights (str | list, optional): Path to the trained model weights file(s). Default is None. + batch_size (int, optional): Batch size for inference. Default is 32. + imgsz (int, optional): Input image size for inference in pixels. Default is 640. + conf_thres (float, optional): Confidence threshold for object detection. Default is 0.001. + iou_thres (float, optional): IoU threshold for Non-Maximum Suppression (NMS). Default is 0.6. + max_det (int, optional): Maximum number of detections per image. Default is 300. + task (str, optional): Task type, can be 'train', 'val', 'test', 'speed', or 'study'. Default is 'val'. + device (str, optional): Device for computation, e.g., '0' for GPU or 'cpu' for CPU. Default is "". + workers (int, optional): Number of dataloader workers. Default is 8. + single_cls (bool, optional): Whether to treat the dataset as a single-class dataset. Default is False. + augment (bool, optional): Whether to apply augmented inference. Default is False. + verbose (bool, optional): Whether to output verbose information. Default is False. + save_txt (bool, optional): Whether to save detection results in text format (*.txt). Default is False. + save_hybrid (bool, optional): Whether to save hybrid results (labels+predictions) in text format (*.txt). + Default is False. + save_conf (bool, optional): Whether to save confidence scores in text format labels. Default is False. + save_json (bool, optional): Whether to save detection results in COCO JSON format. Default is False. + project (str | Path, optional): Directory path to save validation results. Default is ROOT / 'runs/val'. + name (str, optional): Directory name to save validation results. Default is 'exp'. + exist_ok (bool, optional): Whether to overwrite existing project/name directory. Default is False. + half (bool, optional): Whether to use half-precision (FP16) for inference. Default is True. + dnn (bool, optional): Whether to use OpenCV DNN for ONNX inference. Default is False. + model (torch.nn.Module, optional): Existing model instance. Default is None. + dataloader (torch.utils.data.DataLoader, optional): Existing dataloader instance. Default is None. + save_dir (Path, optional): Path to directory to save results. Default is Path(""). + plots (bool, optional): Whether to generate plots for visual results. Default is True. + callbacks (Callbacks, optional): Callbacks instance for event handling. Default is Callbacks(). + compute_loss (Callable, optional): Loss function for computing training loss. Default is None. + + Returns: + (tuple): A tuple containing: + - metrics (torch.Tensor): Dictionary containing metrics such as precision, recall, mAP, F1 score, etc. + - times (dict): Dictionary containing times for different parts of the pipeline (e.g., preprocessing, inference, NMS). + - samples (torch.Tensor): Torch tensor containing validation samples. + + Examples: + ```python + metrics, times, samples = run( + data='data/coco.yaml', + weights='yolov5s.pt', + batch_size=32, + imgsz=640, + conf_thres=0.001, + iou_thres=0.6, + max_det=300, + task='val', + device='cpu' + ) + ``` + """ + # Initialize/load model and set device + training = model is not None + if training: # called by train.py + device, pt, jit, engine = next(model.parameters()).device, True, False, False # get model device, PyTorch model + half &= device.type != "cpu" # half precision only supported on CUDA + model.half() if half else model.float() + else: # called directly + device = select_device(device, batch_size=batch_size) + + # Directories + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + (save_dir / "labels" if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load model + model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half) + stride, pt, jit, engine = model.stride, model.pt, model.jit, model.engine + imgsz = check_img_size(imgsz, s=stride) # check image size + half = model.fp16 # FP16 supported on limited backends with CUDA + if engine: + batch_size = model.batch_size + else: + device = model.device + if not (pt or jit): + batch_size = 1 # export.py models default to batch-size 1 + LOGGER.info(f"Forcing --batch-size 1 square inference (1,3,{imgsz},{imgsz}) for non-PyTorch models") + + # Data + data = check_dataset(data) # check + + # Configure + model.eval() + cuda = device.type != "cpu" + is_coco = isinstance(data.get("val"), str) and data["val"].endswith(f"coco{os.sep}val2017.txt") # COCO dataset + nc = 1 if single_cls else int(data["nc"]) # number of classes + iouv = torch.linspace(0.5, 0.95, 10, device=device) # iou vector for mAP@0.5:0.95 + niou = iouv.numel() + + # Dataloader + if not training: + if pt and not single_cls: # check --weights are trained on --data + ncm = model.model.nc + assert ncm == nc, ( + f"{weights} ({ncm} classes) trained on different --data than what you passed ({nc} " + f"classes). Pass correct combination of --weights and --data that are trained together." + ) + model.warmup(imgsz=(1 if pt else batch_size, 3, imgsz, imgsz)) # warmup + pad, rect = (0.0, False) if task == "speed" else (0.5, pt) # square inference for benchmarks + task = task if task in ("train", "val", "test") else "val" # path to train/val/test images + dataloader = create_dataloader( + data[task], + imgsz, + batch_size, + stride, + single_cls, + pad=pad, + rect=rect, + workers=workers, + prefix=colorstr(f"{task}: "), + )[0] + + seen = 0 + confusion_matrix = ConfusionMatrix(nc=nc) + names = model.names if hasattr(model, "names") else model.module.names # get class names + if isinstance(names, (list, tuple)): # old format + names = dict(enumerate(names)) + class_map = coco80_to_coco91_class() if is_coco else list(range(1000)) + s = ("%22s" + "%11s" * 6) % ("Class", "Images", "Instances", "P", "R", "mAP50", "mAP50-95") + tp, fp, p, r, f1, mp, mr, map50, ap50, map = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + dt = Profile(), Profile(), Profile() # profiling times + loss = torch.zeros(3, device=device) + jdict, stats, ap, ap_class = [], [], [], [] + callbacks.run("on_val_start") + pbar = tqdm(dataloader, desc=s, bar_format=TQDM_BAR_FORMAT) # progress bar + for batch_i, (im, targets, paths, shapes) in enumerate(pbar): + callbacks.run("on_val_batch_start") + with dt[0]: + if cuda: + im = im.to(device, non_blocking=True) + targets = targets.to(device) + im = im.half() if half else im.float() # uint8 to fp16/32 + im /= 255 # 0 - 255 to 0.0 - 1.0 + nb, _, height, width = im.shape # batch size, channels, height, width + + # Inference + with dt[1]: + preds, train_out = model(im) if compute_loss else (model(im, augment=augment), None) + + # Loss + if compute_loss: + loss += compute_loss(train_out, targets)[1] # box, obj, cls + + # NMS + targets[:, 2:] *= torch.tensor((width, height, width, height), device=device) # to pixels + lb = [targets[targets[:, 0] == i, 1:] for i in range(nb)] if save_hybrid else [] # for autolabelling + with dt[2]: + preds = non_max_suppression( + preds, conf_thres, iou_thres, labels=lb, multi_label=True, agnostic=single_cls, max_det=max_det + ) + + # Metrics + for si, pred in enumerate(preds): + labels = targets[targets[:, 0] == si, 1:] + nl, npr = labels.shape[0], pred.shape[0] # number of labels, predictions + path, shape = Path(paths[si]), shapes[si][0] + correct = torch.zeros(npr, niou, dtype=torch.bool, device=device) # init + seen += 1 + + if npr == 0: + if nl: + stats.append((correct, *torch.zeros((2, 0), device=device), labels[:, 0])) + if plots: + confusion_matrix.process_batch(detections=None, labels=labels[:, 0]) + continue + + # Predictions + if single_cls: + pred[:, 5] = 0 + predn = pred.clone() + scale_boxes(im[si].shape[1:], predn[:, :4], shape, shapes[si][1]) # native-space pred + + # Evaluate + if nl: + tbox = xywh2xyxy(labels[:, 1:5]) # target boxes + scale_boxes(im[si].shape[1:], tbox, shape, shapes[si][1]) # native-space labels + labelsn = torch.cat((labels[:, 0:1], tbox), 1) # native-space labels + correct = process_batch(predn, labelsn, iouv) + if plots: + confusion_matrix.process_batch(predn, labelsn) + stats.append((correct, pred[:, 4], pred[:, 5], labels[:, 0])) # (correct, conf, pcls, tcls) + + # Save/log + if save_txt: + save_one_txt(predn, save_conf, shape, file=save_dir / "labels" / f"{path.stem}.txt") + if save_json: + save_one_json(predn, jdict, path, class_map) # append to COCO-JSON dictionary + callbacks.run("on_val_image_end", pred, predn, path, names, im[si]) + + # Plot images + if plots and batch_i < 3: + plot_images(im, targets, paths, save_dir / f"val_batch{batch_i}_labels.jpg", names) # labels + plot_images(im, output_to_target(preds), paths, save_dir / f"val_batch{batch_i}_pred.jpg", names) # pred + + callbacks.run("on_val_batch_end", batch_i, im, targets, paths, shapes, preds) + + # Compute metrics + stats = [torch.cat(x, 0).cpu().numpy() for x in zip(*stats)] # to numpy + if len(stats) and stats[0].any(): + tp, fp, p, r, f1, ap, ap_class = ap_per_class(*stats, plot=plots, save_dir=save_dir, names=names) + ap50, ap = ap[:, 0], ap.mean(1) # AP@0.5, AP@0.5:0.95 + mp, mr, map50, map = p.mean(), r.mean(), ap50.mean(), ap.mean() + nt = np.bincount(stats[3].astype(int), minlength=nc) # number of targets per class + + # Print results + pf = "%22s" + "%11i" * 2 + "%11.3g" * 4 # print format + LOGGER.info(pf % ("all", seen, nt.sum(), mp, mr, map50, map)) + if nt.sum() == 0: + LOGGER.warning(f"WARNING ⚠️ no labels found in {task} set, can not compute metrics without labels") + + # Print results per class + if (verbose or (nc < 50 and not training)) and nc > 1 and len(stats): + for i, c in enumerate(ap_class): + LOGGER.info(pf % (names[c], seen, nt[c], p[i], r[i], ap50[i], ap[i])) + + # Print speeds + t = tuple(x.t / seen * 1e3 for x in dt) # speeds per image + if not training: + shape = (batch_size, 3, imgsz, imgsz) + LOGGER.info(f"Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {shape}" % t) + + # Plots + if plots: + confusion_matrix.plot(save_dir=save_dir, names=list(names.values())) + callbacks.run("on_val_end", nt, tp, fp, p, r, f1, ap, ap50, ap_class, confusion_matrix) + + # Save JSON + if save_json and len(jdict): + w = Path(weights[0] if isinstance(weights, list) else weights).stem if weights is not None else "" # weights + anno_json = str(Path("../datasets/coco/annotations/instances_val2017.json")) # annotations + if not os.path.exists(anno_json): + anno_json = os.path.join(data["path"], "annotations", "instances_val2017.json") + pred_json = str(save_dir / f"{w}_predictions.json") # predictions + LOGGER.info(f"\nEvaluating pycocotools mAP... saving {pred_json}...") + with open(pred_json, "w") as f: + json.dump(jdict, f) + + try: # https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb + check_requirements("pycocotools>=2.0.6") + from pycocotools.coco import COCO + from pycocotools.cocoeval import COCOeval + + anno = COCO(anno_json) # init annotations api + pred = anno.loadRes(pred_json) # init predictions api + eval = COCOeval(anno, pred, "bbox") + if is_coco: + eval.params.imgIds = [int(Path(x).stem) for x in dataloader.dataset.im_files] # image IDs to evaluate + eval.evaluate() + eval.accumulate() + eval.summarize() + map, map50 = eval.stats[:2] # update results (mAP@0.5:0.95, mAP@0.5) + except Exception as e: + LOGGER.info(f"pycocotools unable to run: {e}") + + # Return results + model.float() # for training + if not training: + s = f"\n{len(list(save_dir.glob('labels/*.txt')))} labels saved to {save_dir / 'labels'}" if save_txt else "" + LOGGER.info(f"Results saved to {colorstr('bold', save_dir)}{s}") + maps = np.zeros(nc) + map + for i, c in enumerate(ap_class): + maps[c] = ap[i] + return (mp, mr, map50, map, *(loss.cpu() / len(dataloader)).tolist()), maps, t + + +def parse_opt(): + """Parses and returns command-line options for dataset paths, model parameters, and inference settings. + + Args: + --data (str): Path to the dataset YAML file. Default is 'data/coco128.yaml'. + --weights (list[str]): Paths to one or more model files. Default is 'yolov3-tiny.pt'. + --batch-size (int): Number of images per batch during inference. Default is 32. + --imgsz (int): Inference size (pixels). Default is 640. + --conf-thres (float): Confidence threshold for object detection. Default is 0.001. + --iou-thres (float): IoU threshold for non-max suppression (NMS). Default is 0.6. + --max-det (int): Maximum number of detections per image. Default is 300. + --task (str): Task to perform: 'train', 'val', 'test', 'speed', or 'study'. Default is 'val'. + --device (str): CUDA device identifier (e.g., '0' or '0,1,2,3') or 'cpu' for using CPU. Default is "". + --workers (int): Maximum number of dataloader workers (per RANK in DDP mode). Default is 8. + --single-cls (bool): Treat the dataset as a single-class dataset. Default is False. + --augment (bool): Apply test-time augmentation during inference. Default is False. + --verbose (bool): Print mAP by class. Default is False. + --save-txt (bool): Save detection results in '.txt' format. Default is False. + --save-hybrid (bool): Save hybrid results containing both label and prediction in '.txt' format. Default is + False. + --save-conf (bool): Save confidence scores in the '--save-txt' labels. Default is False. + --save-json (bool): Save detection results in COCO JSON format. Default is False. + --project (str): Project directory to save results. Default is 'runs/val'. + --name (str): Name of the experiment to save results. Default is 'exp'. + --exist-ok (bool): Whether to overwrite existing project/name without incrementing. Default is False. + --half (bool): Use FP16 half-precision during inference. Default is False. + --dnn (bool): Use OpenCV DNN backend for ONNX inference. Default is False. + + Returns: + opt (argparse.Namespace): Parsed command-line options. + + Examples: + Use the following command to run validation with custom settings: + ```python + $ python val.py --weights yolov5s.pt --data coco128.yaml --img 640 + ``` + + Notes: + - The function uses `argparse` to handle command-line options. + - It also modifies some options based on specific conditions, such as appending additional flags for saving + in JSON format and checking for the `coco.yaml` dataset. + """ + parser = argparse.ArgumentParser() + parser.add_argument("--data", type=str, default=ROOT / "data/coco128.yaml", help="dataset.yaml path") + parser.add_argument("--weights", nargs="+", type=str, default=ROOT / "yolov3-tiny.pt", help="model path(s)") + parser.add_argument("--batch-size", type=int, default=32, help="batch size") + parser.add_argument("--imgsz", "--img", "--img-size", type=int, default=640, help="inference size (pixels)") + parser.add_argument("--conf-thres", type=float, default=0.001, help="confidence threshold") + parser.add_argument("--iou-thres", type=float, default=0.6, help="NMS IoU threshold") + parser.add_argument("--max-det", type=int, default=300, help="maximum detections per image") + parser.add_argument("--task", default="val", help="train, val, test, speed or study") + parser.add_argument("--device", default="", help="cuda device, i.e. 0 or 0,1,2,3 or cpu") + parser.add_argument("--workers", type=int, default=8, help="max dataloader workers (per RANK in DDP mode)") + parser.add_argument("--single-cls", action="store_true", help="treat as single-class dataset") + parser.add_argument("--augment", action="store_true", help="augmented inference") + parser.add_argument("--verbose", action="store_true", help="report mAP by class") + parser.add_argument("--save-txt", action="store_true", help="save results to *.txt") + parser.add_argument("--save-hybrid", action="store_true", help="save label+prediction hybrid results to *.txt") + parser.add_argument("--save-conf", action="store_true", help="save confidences in --save-txt labels") + parser.add_argument("--save-json", action="store_true", help="save a COCO-JSON results file") + parser.add_argument("--project", default=ROOT / "runs/val", help="save to project/name") + parser.add_argument("--name", default="exp", help="save to project/name") + parser.add_argument("--exist-ok", action="store_true", help="existing project/name ok, do not increment") + parser.add_argument("--half", action="store_true", help="use FP16 half-precision inference") + parser.add_argument("--dnn", action="store_true", help="use OpenCV DNN for ONNX inference") + opt = parser.parse_args() + opt.data = check_yaml(opt.data) # check YAML + opt.save_json |= opt.data.endswith("coco.yaml") + opt.save_txt |= opt.save_hybrid + print_args(vars(opt)) + return opt + + +def main(opt): + """Executes model tasks including training, validation, and speed or study benchmarks based on specified options. + + Args: + opt (argparse.Namespace): Parsed command-line options for dataset paths, model parameters, and inference + settings. + + Returns: + None + + Examples: + To validate a trained YOLOv3 model: + + ```bash + $ python val.py --weights yolov3.pt --data coco.yaml --img 640 --task val + ``` + + For running speed benchmarks: + + ```bash + $ python val.py --task speed --data coco.yaml --weights yolov3.pt --batch-size 1 + ``` + + Links: + For more information, visit the official repository: https://github.com/ultralytics/ultralytics + + Notes: + This function orchestrates different tasks based on the user input provided through command-line arguments. It supports tasks + like `train`, `val`, `test`, `speed`, and `study`. Depending on the task, it validates the model on a dataset, performs speed + benchmarks, or runs mAP benchmarks. + """ + check_requirements(ROOT / "requirements.txt", exclude=("tensorboard", "thop")) + + if opt.task in ("train", "val", "test"): # run normally + if opt.conf_thres > 0.001: # https://github.com/ultralytics/yolov5/issues/1466 + LOGGER.info(f"WARNING ⚠️ confidence threshold {opt.conf_thres} > 0.001 produces invalid results") + if opt.save_hybrid: + LOGGER.info("WARNING ⚠️ --save-hybrid will return high mAP from hybrid labels, not from predictions alone") + run(**vars(opt)) + + else: + weights = opt.weights if isinstance(opt.weights, list) else [opt.weights] + opt.half = torch.cuda.is_available() and opt.device != "cpu" # FP16 for fastest results + if opt.task == "speed": # speed benchmarks + # python val.py --task speed --data coco.yaml --batch 1 --weights yolov5n.pt yolov5s.pt... + opt.conf_thres, opt.iou_thres, opt.save_json = 0.25, 0.45, False + for opt.weights in weights: + run(**vars(opt), plots=False) + + elif opt.task == "study": # speed vs mAP benchmarks + # python val.py --task study --data coco.yaml --iou 0.7 --weights yolov5n.pt yolov5s.pt... + for opt.weights in weights: + f = f"study_{Path(opt.data).stem}_{Path(opt.weights).stem}.txt" # filename to save to + x, y = list(range(256, 1536 + 128, 128)), [] # x axis (image sizes), y axis + for opt.imgsz in x: # img-size + LOGGER.info(f"\nRunning {f} --imgsz {opt.imgsz}...") + r, _, t = run(**vars(opt), plots=False) + y.append(r + t) # results and times + np.savetxt(f, y, fmt="%10.4g") # save + subprocess.run(["zip", "-r", "study.zip", "study_*.txt"]) + plot_val_study(x=x) # plot + else: + raise NotImplementedError(f'--task {opt.task} not in ("train", "val", "test", "speed", "study")') + + +if __name__ == "__main__": + opt = parse_opt() + main(opt) diff --git a/weights/download_yolov3_weights.sh b/weights/download_yolov3_weights.sh deleted file mode 100644 index 0568cb8772..0000000000 --- a/weights/download_yolov3_weights.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -# make '/weights' directory if it does not exist and cd into it -mkdir -p weights && cd weights - -# copy darknet weight files, continue '-c' if partially downloaded -wget -c https://pjreddie.com/media/files/yolov3.weights -wget -c https://pjreddie.com/media/files/yolov3-tiny.weights -wget -c https://pjreddie.com/media/files/yolov3-spp.weights - -# yolov3 pytorch weights -# download from Google Drive: https://drive.google.com/drive/folders/1uxgUBemJVw9wZsdpboYbzUN4bcRhsuAI - -# darknet53 weights (first 75 layers only) -wget -c https://pjreddie.com/media/files/darknet53.conv.74 - -# yolov3-tiny weights from darknet (first 16 layers only) -# ./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15 -# mv yolov3-tiny.conv.15 ../ -